Preskočiť na obsah
coden

Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide

Spojenie dvoch meraní a Kalmanov zisk, filter ako priebežný priemer, stavový model, predpoveď a oprava, sledovanie auta podľa GPS s odhadom nemeranej rýchlosti, ladenie šumov Q a R, optimalita a nelineárne rozšírenia.

14 minút Matěj Žalmánek 2026-10-15

Séria Základy AI Diel 41 z 52
  1. Mapa umelej inteligencie: čo je čo a ako to do seba zapadá
  2. Stručná história umelej inteligencie: od Turinga po jazykové modely
  3. Dáta, model, tréning, inferencia: základné pojmy na jednom príklade
  4. Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
  6. Funkcie a zobrazenia: prečo je každý model v AI funkcia
  7. Logika a dôkazy: pravidlá, podľa ktorých sa v AI uvažuje
  8. Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
  9. Lineárna algebra pre strojové učenie: vektory, matice a prečo AI hlavne násobí
  10. Derivácie, gradient a reťazové pravidlo: ako model zistí, ktorým smerom sa učiť
  11. Gradientný zostup: ako sa model učí
  12. Čo je pravdepodobnosť: od hodu kockou ku Kolmogorovovým axiómam
  13. Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové
  14. Náhodná premenná a distribučná funkcia: jedna funkcia, ktorá o rozdelení povie všetko
  15. Funkcia hustoty a pravdepodobnostná funkcia: prečo má spojitá premenná v bode pravdepodobnosť nula
  16. Stredná hodnota, rozptyl a kovariancia: kde rozdelenie leží, aké je široké a čo s čím súvisí
  17. Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne
  18. Zákon veľkých čísel a centrálna limitná veta: prečo sa priemery správajú tak predvídateľne
  19. Štatistika a odhady parametrov: maximálna vierohodnosť, MAP a intervaly spoľahlivosti
  20. Teória informácie: entropia, krížová entropia a KL divergencia — odkiaľ sa berú stratové funkcie
  21. Prehľadávanie stavového priestoru: BFS, DFS, UCS a A* s animáciami
  22. Hry a protivník: minimax, alfa-beta orezávanie a Monte Carlo tree search
  23. Splňovanie obmedzujúcich podmienok: backtracking, propagácia obmedzení a AC-3 na sudoku a mape krajov
  24. Logika a znalostné systémy: dopredné a spätné reťazenie, rezolúcia a expertné systémy
  25. Plánovanie: STRIPS, svet kociek, heuristiky z relaxácie a plánovanie v AI agentoch
  26. Lokálne hľadanie a simulované žíhanie: obchodný cestujúci cez krajské mestá
  27. Genetické algoritmy: populácia, kríženie, mutácia a výber na batohu na výlet
  28. Evolučné stratégie a genetické programovanie: od pravidla jednej pätiny po Keplerov zákon
  29. Optimalizácia mravčou kolóniou: ako feromónová stopa nájde krátku cestu
  30. Optimalizácia rojom častíc: zotrvačnosť, vlastná skúsenosť a skúsenosť roja
  31. Neuroevolúcia: evolúcia váh aj tvaru neurónových sietí a algoritmus NEAT
  32. Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“
  33. Fuzzy logika a pravdepodobnosť: prečo „trochu teplo“ neznamená „pravdepodobne teplo“
  34. Fuzzy logika: t-normy, implikácie a pravidlá AK–TAK
  35. Fuzzy riadenie: Mamdani a Sugeno od ventilátora po kyvadlo na vozíku
  36. Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidlá, ktoré sa učia z dát
  38. Markovove reťazce: prechodová matica, stacionárne rozdelenie a PageRank
  39. Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno
  40. Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
  41. Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide
  42. Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
  43. Prompty, kontext a RAG: ako modelu dať správne informácie
  44. Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru
  45. Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi
  46. Difúzne modely: ako sa z čistého šumu stane obrázok
  47. Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
  48. Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť
  49. Policy gradient a PPO: učenie priamo stratégie
  50. Ako funguje AI agent: jazykový model v slučke s nástrojmi
  51. Programovanie s AI agentmi: zadanie, testy a kontrola
  52. Vyhodnocovanie a bezpečnosť AI systémov: ako merať a ako strážiť

Celá osnova série Hotovo: 52 z 83 tém

Čo si odnesiete
  • Ako sa spoja dve nepresné merania a čo je Kalmanov zisk.
  • Ako filter strieda predpoveď podľa modelu a opravu podľa merania — a odhadne aj to, čo nikto nemeria.
  • Prečo na nastavení šumov Q a R toľko záleží a ako si filter poradí s nelineárnym svetom.

Čo sa hodí vedieť vopred: Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno, Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne

Loď Apollo 11 letela k Mesiacu s palubným počítačom, ktorý mal menej pamäte než dnešná grafická kalkulačka. Navigácia pritom musela z nepresných meraní hviezd, radaru a zotrvačných snímačov priebežne odhadovať, kde loď je a ako rýchlo letí. Pomohla jej metóda, ktorú v roku 1960 publikoval Rudolf Kálmán a ktorú pre NASA dotiahol do praxe Stanley Schmidt. Kalmanov filter je dnes v každom mobile, ktorý spája GPS s akcelerometrom, v každom dróne a v každom aute, ktoré samo udrží jazdný pruh. Týmto dielom sa končí modul o pravdepodobnostných modeloch.

Nadväzuje na diely Skryté Markovove modely a Prehľad pravdepodobnostných rozdelení.

1. Dve nepresné merania sú lepšie ako jedno

Začneme jednoducho. Vzdialenosť k majáku zmeriame dvakrát: raz presným prístrojom — 100 m s neistotou (smerodajnou odchýlkou) 5 m —, druhý raz hrubým — 110 m s neistotou 10 m. Aký je najlepší odhad?

Veta — spojenie dvoch normálnych odhadov

Nech x ∈ ℝ je neznáma veličina, m1, m2 ∈ ℝ a σ12, σ22 > 0. Nech prvý odhad hovorí x ~ N(m1, σ12) (apriórne rozdelenie) a druhý odhad je pozorovanie m2 = x + ε, kde šum ε ~ N(0, σ22) je nezávislý od x (normálne rozdelenie pozri diel Prehľad pravdepodobnostných rozdelení). Označme

K = σ12/σ12 + σ22 ∈ (0, 1).

Potom spojený odhad — podmienené (aposteriórne) rozdelenie x pri pozorovaní m2 — je normálne N(m, σ2) s

m = m1 + K (m2 − m1),   σ2 = (1 − K) σ12.

Ekvivalentne 1/σ2 = 1/σ12 + 1/σ22: presnosti (prevrátené rozptyly) sa sčítajú.

Dôkaz. Podľa Bayesovej vety je aposteriórna hustota úmerná súčinu apriórnej hustoty a vierohodnosti, t. j. oboch normálnych hustôt. V exponente sa sčítajú dve kvadratické funkcie x:

−(x − m1)2/2σ12 − (x − m2)2/2σ22 = −1/2 (1/σ12 + 1/σ22) x2 + (m1/σ12 + m2/σ22) x + konšt.

Hustota s exponentom −1/2 ax2 + bx + konšt. (a > 0) je po doplnení na štvorec normálna s rozptylom 1/a a strednou hodnotou b/a. Odtiaľ 1/σ2 = 1/σ12 + 1/σ22, teda

σ2 = σ12σ22/σ12 + σ22 = (1 − K) σ12,   m = σ2 (m1/σ12 + m2/σ22) = (1 − K) m1 + K m2 = m1 + K (m2 − m1). ∎

Laicky povedané

Vezmite prvý odhad a posuňte ho smerom k druhému — tým viac, čím viac druhému veríte. Číslo K hovorí, aký veľký kus rozdielu prevziať. Výsledok je presnejší než každé z meraní samo; aj hrubé meranie pridá informáciu.

m = m1 + K (m2 − m1),   K = σ12/σ12 + σ22,   σ2 = (1 − K) σ12

m1, σ12
prvý odhad (na obrázku modrý) je východiskový bod — od neho sa posúvame; jeho rozptyl v čitateli K hovorí: čím menej veríme prvému odhadu, tým ďalej od neho sa smieme pohnúť
m2, σ22
druhý odhad (jantárový); do vzorca vstupuje len rozdielom m2 − m1 — keby sa oba zhodovali, nie je čo opravovať. Jeho rozptyl v menovateli K zisk zmenšuje: hrubému meraniu veríme málo
K
Kalmanov zisk, číslo medzi 0 a 1 — aký podiel rozdielu prevziať. Je to podiel neistoty prvého odhadu na celkovej neistote, takže presnejší odhad „ťahá“ výsledok k sebe
m, σ2
spojený odhad (zelený); činiteľ 1 − K < 1 zaručuje, že nová neistota je menšia než tá prvá — každé meranie, aj hrubé, niečo pridá
Posuňte sa od prvého odhadu k druhému o podiel daný tým, komu viac veríte.
8090100110120130 vzdialenosť (m) hustota pravdep. (1/m)
Spojenie dvoch meraní vzdialenosti presné: 100 ± 5 mhrubé: 110 ± 10 mspojené: 102 ± 4,5 m

Tu K = 25/25 + 100 = 0,2 (farby podľa vzorca vyššie): prevezmeme pätinu rozdielu a dostaneme 102 m s neistotou √20 ≈ 4,5 m — menej než 5 m presného prístroja. Toto číslo K je Kalmanov zisk a celý filter nie je nič iné než tento krok, opakovaný v čase.

Príklad — spojenie meraní 100 ± 5 m a 110 ± 10 m krok za krokom

Farby podľa rozboru vzorca vyššie.

Rozptyly: σ12 = 52 = 25, σ22 = 102 = 100.

Zisk: K = 25/25 + 100 = 0,2.

Stredná hodnota: m = 100 + 0,2 · (110 − 100) = 102 m — to isté ako vážený priemer 0,8 · 100 + 0,2 · 110.

Rozptyl: σ2 = (1 − 0,2) · 25 = 20,   σ = √20 ≈ 4,47 m.

Kontrola cez presnosti: 1/25 + 1/100 = 0,04 + 0,01 = 0,05 = 1/20. ✓

2. Opakované meranie jednej veličiny

Teplotu v miestnosti meriame teplomerom s neistotou 2 °C, päťdesiatkrát po sebe, a po každom meraní spojíme nový údaj s doterajším odhadom. Po päťdesiatich meraniach je odhad 19,895 °C — presne aritmetický priemer všetkých meraní — a neistota 0,283 °C = 2/√50. Kalmanov filter pre veličinu, ktorá sa nemení, je teda obyčajný priebežný priemer. Zaujímavý začne byť, keď sa veličina v čase mení.

Veta — filter pre nemennú veličinu je priebežný priemer

Nech σ2 > 0 je rozptyl meradla a z1, z2, … ∈ ℝ sú merania nemennej veličiny. Filter začne odhadom m0 ∈ ℝ s rozptylom v0 > 0 a pre k = 1, 2, … spojí doterajší odhad N(mk−1, vk−1) s meraním zk podľa predchádzajúcej vety:

Kk = vk−1/vk−1 + σ2,   mk = mk−1 + Kk (zk − mk−1),   vk = (1 − Kk) vk−1.

Potom v limite v0 → ∞ (počiatočný odhad je taký neistý, že ho prvé meranie úplne prebije) platí pre každé k ≥ 1

Kk = 1/k,   mk = z1 + … + zk/k,   vk = σ2/k.

Dôkaz indukciou podľa k. Pre k = 1 je K1 = v0/v0 + σ2 → 1, takže m1 = m0 + K1(z1 − m0) → z1 a v1 = v0σ2/v0 + σ2 → σ2. Nech k ≥ 2 a tvrdenie platí pre k − 1, t. j. vk−1 = σ2/k − 1 a mk−1 je priemer z1, …, zk−1. Potom

Kk = vk−1/vk−1 + σ2 = 1/k − 1/1/k − 1 + 1 = 1/k,   vk = (1 − 1/k) · σ2/k − 1 = σ2/k,

mk = mk−1 + 1/k (zk − mk−1) = (k − 1) mk−1 + zk/k,

a to je priemer všetkých k meraní, pretože (k − 1) mk−1 = z1 + … + zk−1. ∎

Laicky povedané

Desiate meranie má v priemere desiatich čísel váhu jedna desatina — a presne toľko mu dá aj filter. Čím viac toho už vieme, tým menej nami jedno nové meranie pohne. Neistota klesá ako 1/√k: pre polovičnú chybu potrebujete štyrikrát viac meraní.

Príklad — prvé tri merania teploty

Náš filter začína odhadom 0 °C s rozptylom 106 (neistota 1 000 °C — „neviem nič“), rozptyl merania je 22 = 4.

Každý krok je spojenie dvoch odhadov z prvej kapitoly: doterajší odhad hrá úlohu prvého, meranie druhého (farby podľa rozboru vzorca pre spojenie vyššie).

1. meranie 23,098 °C: K1 = 106/106 + 4 ≈ 1, odhad 23,098 °C, rozptyl 4,00.

2. meranie 21,967 °C: K2 = 4/4 + 4 = 1/2, odhad 23,098 + 1/2 · (21,967 − 23,098) = 22,533 °C, rozptyl 2,00.

3. meranie 16,630 °C: K3 = 2/2 + 4 = 1/3, odhad 22,533 + 1/3 · (16,630 − 22,533) = 20,565 °C, rozptyl 1,33 = 4/3.

Kontrola: 23,098 + 21,967 + 16,630/3 = 20,565 °C — obyčajný priemer. Po päťdesiatich meraniach je rozptyl 4/50 = 0,08 a neistota √0,08 ≈ 0,283 °C.

3. Stavový model

Definícia — lineárny stavový model

Nech n, m ≥ 1 sú rozmery stavu a merania a

  1. F ∈ ℝn×n je prechodová matica,
  2. H ∈ ℝm×n je matica merania,
  3. Q ∈ ℝn×n je symetrická pozitívne semidefinitná matica — kovariancia procesného šumu,
  4. R ∈ ℝm×m je symetrická pozitívne definitná matica — kovariancia šumu merania,
  5. x̂0 ∈ ℝn a symetrická pozitívne semidefinitná P0 ∈ ℝn×n opisujú počiatočný stav x0 ~ N(x̂0, P0).

Lineárny stavový model je postupnosť náhodných vektorov — skrytých stavov xk ∈ ℝn a meraní zk ∈ ℝm, k = 1, 2, … — pre ktoré platí

xk = F xk−1 + wk,   wk ~ N(0, Q),    zk = H xk + vk,   vk ~ N(0, R),

kde x0, w1, w2, …, v1, v2, … sú navzájom nezávislé. (Viacrozmerné normálne rozdelenie N(μ, Σ) a kovariančnú maticu definujeme nižšie.) Stav sa teda vyvíja podľa F s náhodnými nárazmi wk a meranie ho zachytáva cez H so šumom vk.

Laicky povedané

Je to skrytý Markovov model z minulého dielu, len stav nie je „poctivá alebo falošná kocka“, ale vektor čísel — napríklad poloha a rýchlosť. Fyzika hovorí, ako sa stav zhruba vyvíja (F), náhodné nárazy a nepresnosť modelu zhŕňa Q. Meradlo vidí len časť stavu (H) a mýli sa o R.

Náš príklad: auto ide po ceste zhruba stálou rýchlosťou 15 m/s, ale vodič občas pribrzdí alebo pridá — náhodné zrýchlenie so smerodajnou odchýlkou 0,5 m/s². Stav je (poloha, rýchlosť), krok 1 s, takže F = [[1, 1], [0, 1]]: nová poloha je stará plus rýchlosť. GPS meria len polohu, s neistotou 8 m: H = [1, 0], R = 64.

Definícia — kovariančná matica a viacrozmerné normálne rozdelenie

Nech n ≥ 1 a X = (X1, …, Xn)T je náhodný vektor, ktorého zložky sú náhodné premenné s konečným rozptylom. Jeho stredná hodnota je vektor μ = E[X] = (E[X1], …, E[Xn])T ∈ ℝn (strednú hodnotu a kovarianciu pozri diel Stredná hodnota, rozptyl a kovariancia). Jeho kovariančná matica je Σ ∈ ℝn×n,

Σ = E[(X − μ)(X − μ)T],   t. j.   Σij = cov(Xi, Xj) = E[(Xi − μi)(Xj − μj)]   pre i, j = 1, …, n.

Na diagonále sú rozptyly zložiek (Σii = var Xi), mimo nej kovariancie. Matica je symetrická (Σ = ΣT) a pozitívne semidefinitná: pre každé a ∈ ℝn je aTΣa = var(aTX) ≥ 0.

Nech μ ∈ ℝn a Σ ∈ ℝn×n je symetrická pozitívne definitná matica. Náhodný vektor X má viacrozmerné normálne rozdelenie, píšeme X ~ N(μ, Σ), práve vtedy, keď má hustotu

f(x) = 1/√(2π)n det Σ exp(−1/2 (x − μ)T Σ−1 (x − μ)),   x ∈ ℝn.

Potom E[X] = μ a kovariančná matica X je Σ. Diel používa dve vlastnosti:

  1. Ak X ~ N(μ, Σ), A ∈ ℝp×n a c ∈ ℝp, potom AX + c ~ N(Aμ + c, A Σ AT) (ak je AΣAT singulárna, ide o tzv. degenerované normálne rozdelenie bez hustoty).
  2. Ak sú X ~ N(μ1, Σ1) a Y ~ N(μ2, Σ2) nezávislé vektory v ℝn, potom X + Y ~ N(μ1 + μ2, Σ1 + Σ2).
Laicky povedané

Kovariančná matica je „neistota pre viac čísel naraz“. Na diagonále stojí, nakoľko si nie sme istí polohou a nakoľko rýchlosťou. Mimo diagonály je, či sa chyby držia spolu: kladná kovariancia polohy a rýchlosti znamená „keď sme auto odhadli príliš vpredu, najskôr sme mu pripísali aj príliš veľkú rýchlosť“.

Príklad — odkiaľ sa vezme matica Q

Počas kroku dĺžky Δt pôsobí na auto stále náhodné zrýchlenie a ~ N(0, q2). Zo vzorcov pre rovnomerne zrýchlený pohyb:

pk = pk−1 + Δt · vk−1 + ½ Δt2 a,   vk = vk−1 + Δt · a.

Bez šumu je to F = [[1, Δt], [0, 1]]. Šum je w = g a s vektorom g = (½ Δt2, Δt), a podľa pravidla AΣAT vyššie

Q = q2 g gT = q2 [[Δt4/4, Δt3/2], [Δt3/2, Δt2]].

Pre Δt = 1 s a q = 0,5 m/s²: Q = 0,25 · [[0,25; 0,5], [0,5; 1]] = [[0,0625; 0,125], [0,125; 0,25]]. Za jednu sekundu teda náhodné zrýchlenie pridá neistotu √0,0625 = 0,25 m v polohe a 0,5 m/s v rýchlosti — a obe chyby majú rovnaké znamienko, preto je kovariancia kladná. Presne táto matica je v kóde nižšie.

4. Predpoveď a oprava

Algoritmus — Kalmanov filter

Vstup: matice F, H, Q, R lineárneho stavového modelu (definícia vyššie), počiatočný odhad x̂0 ∈ ℝn s kovarianciou P0 ∈ ℝn×n (symetrická, pozitívne semidefinitná) a merania z1, …, zT ∈ ℝm.

Výstup: pre každé k = 1, …, T odhad x̂k ∈ ℝn a jeho kovariancia Pk ∈ ℝn×n — stredná hodnota a kovariancia normálneho rozdelenia, ktorým filter opisuje stav xk po meraniach z1, …, zk. I je jednotková matica n × n.

Kroky: pre k = 1, 2, …, T postupne:

  1. Predpoveď: x̂k− = F x̂k−1,   Pk− = F Pk−1 FT + Q.
  2. Inovácia a jej kovariancia: yk = zk − H x̂k−,   Sk = H Pk− HT + R (je pozitívne definitná, pretože R je, a teda invertibilná).
  3. Zisk: Kk = Pk− HT Sk−1 ∈ ℝn×m.
  4. Oprava: x̂k = x̂k− + Kk yk,   Pk = (I − Kk H) Pk−.

Algoritmus skončí po spracovaní posledného merania zT (pri priebežnom behu pokračuje s každým novým meraním). V rozboroch nižšie index k vynechávame: x̂, P vpravo sú hodnoty z minulého kroku, vľavo nové.

Laicky povedané

Predpoveď: „podľa fyziky by auto teraz malo byť tu“ — a pretože fyzika nie je dokonalá, neistota trochu vzrastie. Oprava: príde meranie; rozdiel medzi meraním a predpoveďou (inovácia) sa prevezme len z časti K, podľa toho, komu viac veríme. Je to spojenie dvoch meraní z prvej kapitoly — jedným „meraním“ je predpoveď z minula, druhým GPS. Kovariancia P si navyše pamätá, ako spolu súvisí chyba polohy a rýchlosti, a vďaka tomu filter opravuje aj rýchlosť, ktorú nikto nemeria.

Farby v rozboroch nižšie sedia s obrázkami: predpoveď (predtým „prvý odhad“) modrou, meranie jantárovou, výsledok zelenou, zisk fialovou.

x̂− = F x̂,   P− = F P FT + Q

x̂−, P−
predpoveď na tento krok, skôr než príde meranie — hrá úlohu „prvého odhadu“ zo spojenia dvoch meraní
F … FT
model posunie odhad dopredu; neistota sa prenáša pravidlom AΣAT (pri aute: neistá rýchlosť sa za sekundu premietne do neistoty polohy). Nestačí FP, pretože kovariancia je kvadratická veličina — násobí sa zľava aj sprava
Q
model nie je dokonalý (vodič pribrzdí), takže sa neistota pripočítava v každom kroku — bez Q by P klesla k nule a filter by prestal meranie počúvať
Predpoveď: kam sa stav podľa fyziky dostane a o koľko sa tým zväčší neistota.

K = P− HT (H P− HT + R)−1

H P− HT
neistota predpovede prepočítaná do reči meradla (pri aute len rozptyl polohy) — zodpovedá σ12
R
rozptyl merania, zodpovedá σ22; súčet v zátvorke je rozptyl inovácie S — o koľko sa meranie a predpoveď môžu rozchádzať čisto náhodou
P− HT
kovariancia celého stavu s meranou veličinou; vďaka nej dostane nenulový zisk aj rýchlosť, ktorú nikto nemeria — chyba polohy a rýchlosti spolu súvisia
K
Kalmanov zisk, pre každú zložku stavu jedno číslo; inverzia namiesto delenia len preto, že meranie môže byť vektor
V jednej dimenzii s H = 1 je P−HT = HP−HT = σ12 a vzorec je presne K = σ12/σ12 + σ22 z prvej kapitoly.

x̂ = x̂− + K (z − H x̂−),   P = (I − K H) P−

x̂−, P−
predpoveď — východiskový bod, od ktorého sa posúvame
z
nové meranie (na obrázku jantárové body GPS); jediné miesto, kadiaľ do odhadu vstupujú dáta
H
prevedie predpoveď stavu na to, čo by meradlo malo ukázať; meranie a stav sa nedajú odčítať priamo, pretože GPS vidí len polohu, nie rýchlosť
K
aký podiel inovácie z − Hx̂− prevziať do každej zložky stavu
x̂, P
opravený odhad (na obrázku zelený); činiteľ I − KH neistotu zmenší — tým viac, čím väčší diel merania sme prevzali
Oprava: to isté „posuňte sa k meraniu o podiel K“, len pre vektory.
import numpy as np

F = np.array([[1, 1], [0, 1]])                    # poloha += rýchlosť
H = np.array([[1, 0]])                            # meriame len polohu
Q = 0.5**2 * np.array([[1/4, 1/2], [1/2, 1]])     # náhodné zrýchlenie
R = np.array([[8**2]])                            # GPS ± 8 m

def kalman(mereni, x, P):
    for z in mereni:
        x, P = F @ x, F @ P @ F.T + Q             # predpoveď
        K = P @ H.T @ np.linalg.inv(H @ P @ H.T + R)
        x = x + K @ (z - H @ x)                   # oprava podľa inovácie
        P = (np.eye(2) - K @ H) @ P
        yield x, P
Príklad — prvé dva kroky filtra na dátach auta

Štart. Prvé meranie GPS je z1 = 8,44 m. Filter začne polohou 8,44 m, rýchlosťou 0 a veľkou neistotou P0 = [[100; 0], [0; 100]] (10 m a 10 m/s). Oprava tým istým meraním polohu nezmení (inovácia je 0), len zmenší jej rozptyl (farby podľa rozborov vyššie): K = 100/100 + 64 = 0,610, P11 = (1 − 0,610) · 100 = 39,02.

Predpoveď na 2. sekundu. x̂− = (8,44 + 0; 0) = (8,44; 0,00). Kovariancia FPFT pripočíta k rozptylu polohy rozptyl rýchlosti (poloha += rýchlosť) a k tomu sa pripočíta Q:

P− = [[39,02 + 100 + 0,0625; 100 + 0,125], [100 + 0,125; 100 + 0,25]] = [[139,09; 100,13], [100,13; 100,25]].

Oprava. Meranie z2 = 23,23 m, inovácia y = 23,23 − 8,44 = 14,78 m, jej rozptyl S = 139,09 + 64 = 203,09.

K = (139,09; 100,13)/203,09 = (0,685; 0,493),

x̂ = (8,44 + 0,685 · 14,78; 0 + 0,493 · 14,78) = (18,57 m; 7,29 m/s).

Po dvoch meraniach filter „vie“, že sa auto hýbe, hoci rýchlosť nikto nemeral: odhadol 7,3 m/s (skutočnosť 13,9 m/s). Zisk pre rýchlosť je nenulový len vďaka kovariancii 100,13 mimo diagonály. Prečo len polovica? Merania sú zašumené o 8 m, takže filter rozdiel 15 m ešte neberie úplne vážne — počas ďalších sekúnd sa rýchlosť doladí.

5. Filter sleduje auto

Minúta jazdy, jedno meranie GPS za sekundu. Za ten čas auto prejde necelý kilometer, takže by sa šum v grafe polohy stratil. Kreslíme preto, o koľko je auto vpredu alebo pozadu oproti jazde presne 15 m/s:

−25025 01020 0102030405060 odchýlka od jazdy 15 m/s (m) rýchlosť (m/s) čas (s)
Sledovanie auta: hore odchýlka polohy, dole rýchlosť skutočnosť meranie GPS odhad filtra ± 2σ

Merania GPS sa od skutočnej polohy odchyľujú v priemere o 8,3 m (od desiatej sekundy, keď sa filter rozbehne). Odhad filtra len o 4,9 m — o 41 % menej. A rýchlosť, ktorú žiadny snímač nemeria, odhadne s chybou 0,8 m/s: filter ju odvodí z toho, ako sa mení poloha. Na začiatku rýchlosť nepozná (začína od nuly), za pár sekúnd sa ale chytí. Pás ±2σ je poctivá neistota filtra — skutočná poloha leží vnútri v 95 % krokov, presne ako má.

Definícia — priemerná chyba (RMSE) a pás ±2σ

Nech 𝒦 je konečná neprázdna množina krokov, N = |𝒦|, a pre každé k ∈ 𝒦 je pk ∈ ℝ skutočná poloha a p̂k ∈ ℝ jej odhad (prvá zložka odhadu filtra x̂k, alebo samotné meranie). Odmocnina zo strednej kvadratickej chyby (RMSE) je číslo

RMSE = √1/N ∑k ∈ 𝒦 (p̂k − pk)2.

„Priemerná chyba“ v tomto diele je RMSE cez kroky 𝒦 = {10, …, 59}, teda N = 50. Štvorce trestajú veľké chyby viac než malé a odmocnina vracia výsledok do metrov. Pre samotnú GPS by RMSE malo vyjsť okolo σ = 8 m — a vyšlo 8,3 m. Pre rýchlosť sa RMSE definuje rovnako s druhou zložkou stavu.

Nech Pk ∈ ℝ2×2 je kovariancia odhadu filtra v kroku k a Pk,11 jej prvok vľavo hore (rozptyl polohy). Pás ±2σ v kroku k je interval

[p̂k − 2√Pk,11,   p̂k + 2√Pk,11].

Pre X ~ N(μ, σ2) je P(|X − μ| ≤ 2σ) ≈ 0,9545; ak má filter neistotu Pk vypočítanú správne, musí skutočnosť padnúť do pásu asi v 95 % krokov.

Kalmanov zisk sa po pár krokoch ustáli na K ≈ (0,30; 0,05): z každej inovácie prevezme filter 30 % do polohy a 5 % (na meter inovácie 0,05 m/s) do rýchlosti. Cez 50 simulovaných jázd je chyba filtra v priemere 55 % chyby samotnej GPS.

Veta — ustálený zisk

Vo vzorcoch pre P−, K a P nie sú merania z — kovariancia aj zisk sa dajú vypočítať vopred. Spojením predpovede a opravy vznikne rekurencia (diskrétna Riccatiho rovnica)

P−k+1 = F (P−k − P−kHT (HP−kHT + R)−1 HP−k) FT + Q.

Nech F ∈ ℝn×n, H ∈ ℝm×n, R pozitívne definitná a Q = GGT pre nejaké G ∈ ℝn×r sú pevné (nezávislé od k) a platí

  1. dvojica (F, H) je pozorovateľná: matica zložená pod seba z H, HF, …, HFn−1 má hodnosť n (z radu meraní sa dá zistiť celý stav);
  2. dvojica (F, G) je riaditeľná: matica zložená vedľa seba z G, FG, …, Fn−1G má hodnosť n (šum sa časom dostane do všetkých zložiek stavu).

Potom pre každú symetrickú pozitívne semidefinitnú počiatočnú maticu postupnosť P−k konverguje k matici P∞, ktorá nezávisí od počiatočnej matice a je jediným symetrickým pozitívne semidefinitným pevným bodom rekurencie; zisk Kk konverguje k ustálenej hodnote K∞ = P∞HT (HP∞HT + R)−1. Pri aute obe podmienky platia: [H; HF] = [[1, 0], [1, 1]] aj [g, Fg] = [[0,5; 1,5], [1; 1]] majú hodnosť 2.

Pri aute: po 60 krokoch je K = (0,297; 0,052) a P = [[19,04; 3,35], [3,35; 1,29]], teda filter si verí na √19,04 ≈ 4,4 m v polohe a √1,29 ≈ 1,1 m/s v rýchlosti.

Laicky povedané

Na začiatku filter nevie skoro nič a hltá každé meranie (zisk 0,61, potom 0,68). Ako sa odhad spresňuje, zisk klesá — až sa ustáli tam, kde neistota pridaná za krok šumom Q je rovnako veľká ako tá, ktorú uberie meranie. Ďalej sa už nič nemení, a preto sa v jednoduchých zariadeniach zisk často vypočíta raz vopred a filter potom len násobí pevnými číslami.

6. Komu veriť: Q a R

Filter potrebuje poznať Q a R. GPS výrobca zvyčajne udáva, ale procesný šum sa odhaduje ťažšie. Čo ak filtru dáme iné hodnoty, než aké majú dáta?

Procesný šum, ktorému filter verí (m/s²)0,010,10,5 (pravda)210
chyba polohy (m)9,295,884,865,677,08
chyba rýchlosti (m/s)1,190,860,791,535,19

Keď filter verí, že auto ide skoro presne stálou rýchlosťou (malé Q), drží sa svojho modelu a na skutočné zrýchlenie reaguje neskoro — chyba polohy je dokonca väčšia než pri samotnej GPS. Keď naopak čaká divoké zmeny (veľké Q), neverí modelu a kopíruje zašumené merania. Najlepšie dopadne so skutočnou hodnotou 0,5. To isté platí pre R: s neistotou GPS 2, 8 a 30 m vyjde chyba polohy 5,66; 4,86 a 5,39 m.

7. Prečo práve takto

Veta — optimalita Kalmanovho filtra

Nech xk, zk spĺňajú lineárny stavový model (definícia vyššie) s počiatočným stavom x0 ~ N(x̂0, P0) a nech x̂k, Pk sú výstupy Kalmanovho filtra spusteného s rovnakými F, H, Q, R, x̂0, P0. Potom pre každé k ≥ 1:

  1. podmienené (aposteriórne) rozdelenie stavu xk pri meraniach z1, …, zk je presne N(x̂k, Pk);
  2. najmä x̂k = E[xk | z1, …, zk], a zo všetkých odhadov g(z1, …, zk) má najmenšiu strednú kvadratickú chybu E[‖xk − g(z1, …, zk)‖2].

Ak vypustíme predpoklad normality (x0, wk, vk sú len nekorelované s rovnakými strednými hodnotami a kovarianciami), je x̂k najlepší v zmysle strednej kvadratickej chyby medzi odhadmi, ktoré sú afinnou (lineárnou plus konštanta) funkciou z1, …, zk.

Laicky povedané

Kalmanov filter je Bayesova veta aplikovaná znova a znova. Predpoveď je apriórne rozdelenie, meranie je vierohodnosť, oprava je aposteriórne rozdelenie. Normálne rozdelenie má tú vzácnu vlastnosť, že súčin normálnych je opäť normálny — a tak stačí pamätať si strednú hodnotu a kovarianciu namiesto celej funkcie. Je to dopredný algoritmus zo skrytých Markovových modelov pre spojitý stav.

p(xk | z1:k) ∝ p(zk | xk) · ∫ p(xk | xk−1) p(xk−1 | z1:k−1) dxk−1

∫ p(xk | xk−1) p(xk−1 | z1:k−1) dxk−1
predpoveď (apriórne rozdelenie): minulý stav nepoznáme presne, tak priemerujeme prechod cez všetky možné minulé stavy, vážené tým, čomu sme minule verili. Integrál je spojitá obdoba súčtu ∑i v doprednom algoritme HMM. Pre lineárny model a normálne rozdelenie vyjde N(Fx̂, FPFT + Q)
p(zk | xk)
vierohodnosť nového merania — ako dobre by ktoré miesto vysvetlilo, čo GPS ukázala; z modelu je to N(zk; Hxk, R)
p(xk | z1:k)
aposteriórne rozdelenie po všetkých meraniach; „∝“ preto, že normalizačnú konštantu p(zk | z1:k−1) nepotrebujeme — súčin dvoch normálnych hustôt dopočíta dôkaz vety zo začiatku dielu, a vyjde z neho presne krok opravy
Bayesova veta v čase: predpoveď krát vierohodnosť dáva nový odhad, ktorý je predpoveďou pre ďalší krok.

8. Keď svet nie je lineárny

  • Rozšírený Kalmanov filter (EKF) nelineárny model v každom kroku linearizuje deriváciou — tak to robila aj navigácia Apolla.
  • Unscented Kalmanov filter (UKF) namiesto derivácií preženie modelom pár starostlivo vybraných bodov a z nich vypočíta novú strednú hodnotu a kovarianciu.
  • Časticový filter sa vzdá normálneho rozdelenia úplne: odhad reprezentuje tisíckami vzoriek („častíc“), ktoré sa pohybujú podľa modelu a prevažujú podľa merania. Zvládne aj odhad s viacerými vrcholmi, napríklad „robot je buď v kuchyni, alebo v obývačke“.
  • Kde všade: spájanie GPS, akcelerometra a gyroskopu v mobiloch, navigácia lietadiel, dronov a rakiet, sledovanie objektov radarom, odhad polohy autonómnych áut, a dokonca vyhladzovanie ekonomických časových radov.
Definícia — rozšírený Kalmanov filter (EKF)

Nech f : ℝn → ℝn a h : ℝn → ℝm sú diferencovateľné funkcie (derivácie pozri diel Derivácie, gradient a reťazové pravidlo), Q, R ako v lineárnom modeli a model je nelineárny:

xk = f(xk−1) + wk,   zk = h(xk) + vk,   wk ~ N(0, Q),   vk ~ N(0, R), všetky šumy nezávislé.

Jacobiho matica funkcie f v bode a ∈ ℝn je matica parciálnych derivácií Jf(a) ∈ ℝn×n, (Jf(a))ij = ∂fi/∂xj(a); obdobne Jh(a) ∈ ℝm×n. Rozšírený Kalmanov filter má rovnaký vstup a výstup ako Kalmanov filter (s f, h namiesto F, H) a pre k = 1, 2, …, T vykoná:

  1. Predpoveď: Fk = Jf(x̂k−1),   x̂k− = f(x̂k−1),   Pk− = Fk Pk−1 FkT + Q.
  2. Zisk: Hk = Jh(x̂k−),   Kk = Pk− HkT (Hk Pk− HkT + R)−1.
  3. Oprava: x̂k = x̂k− + Kk (zk − h(x̂k−)),   Pk = (I − Kk Hk) Pk−.

Strednú hodnotu teda EKF počíta nelineárnymi funkciami, kovarianciu ich linearizáciou v aktuálnom odhade.

Príklad: radar meria vzdialenosť h(px, py) = √px2 + py2; potom Hk = (px/d, py/d) s d = √px2 + py2 — jednotkový vektor smerom k cieľu. Pre cieľ v (300, 400) m je d = 500 m a Hk = (0,6; 0,8). Výsledok už nie je presné aposteriórne rozdelenie, len jeho priblíženie; čím viac je model v rozsahu neistoty zakrivený, tým horšie.

9. Zhrnutie

  • Dve nezávislé normálne merania sa spoja váženým priemerom; presnosti sa sčítajú a váha K je Kalmanov zisk.
  • Kalmanov filter opakuje predpoveď podľa modelu a opravu podľa merania; pre nemennú veličinu je to priebežný priemer.
  • Pri aute znížil chybu polohy z 8,3 m (GPS) na 4,9 m a odhadol aj nemeranú rýchlosť s chybou 0,8 m/s; pás ±2σ pokryl skutočnosť v 95 % krokov.
  • Výsledok závisí od Q a R: príliš veľká dôvera v model reaguje neskoro, príliš malá kopíruje šum.
  • Pre lineárny model s normálnym šumom je filter presná Bayesova aktualizácia; nelineárny svet zvládajú EKF, UKF a časticové filtre.

Týmto dielom sa končí modul o pravdepodobnostných modeloch. Chcete si to vyskúšať na vlastnej koži? Nechajte AI agenta napísať Kalmanov filter pre dáta z akcelerometra vlastného telefónu a vyskúšajte, ako dobre z nich odhadne, o koľko ste telefón posunuli.

Máte na to iný názor? Napíšte na support@coden-app.com.

Agent na vašom počítači, ovládaný z telefónu