Přeskočit na obsah
coden

Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede

Spojení dvou měření a Kalmanův zisk, filtr jako průběžný průměr, stavový model, předpověď a oprava, sledování auta podle GPS s odhadem neměřené rychlosti, ladění šumů Q a R, optimalita a nelineární rozšíření.

14 minut Matěj Žalmánek 2026-10-15

Série Základy AI Díl 41 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Celá osnova série 83 z 83 témat hotovo

Co si odnesete
  • Jak se spojí dvě nepřesná měření a co je Kalmanův zisk.
  • Jak filtr střídá předpověď podle modelu a opravu podle měření — a odhadne i to, co nikdo neměří.
  • Proč na nastavení šumů Q a R tolik záleží a jak si filtr poradí s nelineárním světem.

Co se hodí znát předem: Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino, Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální

Loď Apollo 11 letěla k Měsíci s palubním počítačem, který měl méně paměti než dnešní grafická kalkulačka. Navigace přitom musela z nepřesných měření hvězd, radaru a setrvačných čidel průběžně odhadovat, kde loď je a jak rychle letí. Pomohla jí metoda, kterou v roce 1960 publikoval Rudolf Kálmán a kterou pro NASA dotáhl do praxe Stanley Schmidt. Kalmanův filtr je dnes v každém mobilu, který spojuje GPS s akcelerometrem, v každém dronu a v každém autě, které samo udrží jízdní pruh. Tímhle dílem končí modul o pravděpodobnostních modelech.

Navazuje na díly Skryté Markovovy modely a Přehled pravděpodobnostních rozdělení.

1. Dvě nepřesná měření jsou lepší než jedno

Začneme jednoduše. Vzdálenost k majáku změříme dvakrát: jednou přesným přístrojem — 100 m s nejistotou (směrodatnou odchylkou) 5 m —, podruhé hrubým — 110 m s nejistotou 10 m. Co je nejlepší odhad?

Věta — spojení dvou normálních odhadů

Nechť x ∈ ℝ je neznámá veličina, m1, m2 ∈ ℝ a σ12, σ22 > 0. Nechť první odhad říká x ~ N(m1, σ12) (apriorní rozdělení) a druhý odhad je pozorování m2 = x + ε, kde šum ε ~ N(0, σ22) je nezávislý na x (normální rozdělení viz díl Přehled pravděpodobnostních rozdělení). Označme

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

Pak spojený odhad — podmíněné (aposteriorní) rozdělení x při pozorování m2 — je normální N(m, σ2) s

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

Ekvivalentně 1/σ2 = 1/σ12 + 1/σ22: přesnosti (převrácené rozptyly) se sčítají.

Důkaz. Podle Bayesovy věty je aposteriorní hustota úměrná součinu apriorní hustoty a věrohodnosti, tj. obou normálních hustot. V exponentu se sčítají dvě kvadratické funkce x:

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

Hustota s exponentem −1/2 ax2 + bx + konst. (a > 0) je po doplnění na čtverec normální s rozptylem 1/a a střední hodnotou b/a. Odtud 1/σ2 = 1/σ12 + 1/σ22, tedy

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

Laicky řečeno

Vezměte první odhad a posuňte ho směrem k druhému — tím víc, čím víc druhému věříte. Číslo K říká, jak velký kus rozdílu převzít. Výsledek je přesnější než každé z měření samo; i hrubé měření přidá informaci.

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

m1, σ12
první odhad (v obrázku modrý) je výchozí bod — od něj se posouváme; jeho rozptyl v čitateli K říká: čím méně věříme prvnímu odhadu, tím dál od něj se smíme pohnout
m2, σ22
druhý odhad (jantarový); do vzorce vstupuje jen rozdílem m2 − m1 — kdyby se oba shodovaly, není co opravovat. Jeho rozptyl ve jmenovateli K zisk zmenšuje: hrubému měření věříme málo
K
Kalmanův zisk, číslo mezi 0 a 1 — jaký podíl rozdílu převzít. Je to podíl nejistoty prvního odhadu na celkové nejistotě, takže přesnější odhad „táhne“ výsledek k sobě
m, σ2
spojený odhad (zelený); činitel 1 − K < 1 zaručuje, že nová nejistota je menší než ta první — každé měření, i hrubé, něco přidá
Posuň se od prvního odhadu k druhému o podíl daný tím, komu víc věříš.
8090100110120130 vzdálenost (m) hustota pravděp. (1/m)
Spojení dvou měření vzdálenosti přesné: 100 ± 5 mhrubé: 110 ± 10 mspojené: 102 ± 4,5 m

Tady K = 25/25 + 100 = 0,2 (barvy podle vzorce výše): převezmeme pětinu rozdílu a dostaneme 102 m s nejistotou √20 ≈ 4,5 m — méně než 5 m přesného přístroje. Tohle číslo K je Kalmanův zisk a celý filtr není nic jiného než tenhle krok, opakovaný v čase.

Příklad — spojení měření 100 ± 5 m a 110 ± 10 m krok za krokem

Barvy podle rozboru vzorce výše.

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

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

Střední hodnota: m = 100 + 0,2 · (110 − 100) = 102 m — totéž jako vážený průměr 0,8 · 100 + 0,2 · 110.

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

Kontrola přes přesnosti: 1/25 + 1/100 = 0,04 + 0,01 = 0,05 = 1/20. ✓

2. Opakované měření jedné veličiny

Teplotu v místnosti měříme teploměrem s nejistotou 2 °C, padesátkrát po sobě, a po každém měření spojíme nový údaj s dosavadním odhadem. Po padesáti měřeních je odhad 19,895 °C — přesně aritmetický průměr všech měření — a nejistota 0,283 °C = 2/√50. Kalmanův filtr pro veličinu, která se nemění, je tedy obyčejný průběžný průměr. Zajímavý začne být, když se veličina v čase mění.

Věta — filtr pro neměnnou veličinu je průběžný průměr

Nechť σ2 > 0 je rozptyl měřidla a z1, z2, … ∈ ℝ jsou měření neměnné veličiny. Filtr začne odhadem m0 ∈ ℝ s rozptylem v0 > 0 a pro k = 1, 2, … spojí dosavadní odhad N(mk−1, vk−1) s měřením zk podle předchozí věty:

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

Pak v limitě v0 → ∞ (počáteční odhad je tak nejistý, že ho první měření úplně přebije) platí pro každé k ≥ 1

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

Důkaz indukcí podle k. Pro 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 tvrzení platí pro k − 1, tj. vk−1 = σ2/k − 1 a mk−1 je průměr z1, …, zk−1. Pak

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 průměr všech k měření, protože (k − 1) mk−1 = z1 + … + zk−1. ∎

Laicky řečeno

Desáté měření má v průměru deseti čísel váhu jedna desetina — a přesně tolik mu dá i filtr. Čím víc toho už víme, tím méně nás jedno nové měření pohne. Nejistota klesá jako 1/√k: pro poloviční chybu potřebujete čtyřikrát víc měření.

Příklad — první tři měření teploty

Náš filtr začíná odhadem 0 °C s rozptylem 106 (nejistota 1 000 °C — „nevím nic“), rozptyl měření je 22 = 4.

Každý krok je spojení dvou odhadů z první kapitoly: dosavadní odhad hraje roli prvního, měření druhého (barvy podle rozboru vzorce pro spojení výše).

1. měření 23,098 °C: K1 = 106/106 + 4 ≈ 1, odhad 23,098 °C, rozptyl 4,00.

2. měření 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. měření 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čejný průměr. Po padesáti měřeních je rozptyl 4/50 = 0,08 a nejistota √0,08 ≈ 0,283 °C.

3. Stavový model

Definice — lineární stavový model

Nechť n, m ≥ 1 jsou rozměry stavu a měření a

  1. F ∈ ℝn×n je přechodová matice,
  2. H ∈ ℝm×n je matice měření,
  3. Q ∈ ℝn×n je symetrická pozitivně semidefinitní matice — kovariance procesního šumu,
  4. R ∈ ℝm×m je symetrická pozitivně definitní matice — kovariance šumu měření,
  5. x̂0 ∈ ℝn a symetrická pozitivně semidefinitní P0 ∈ ℝn×n popisují počáteční stav x0 ~ N(x̂0, P0).

Lineární stavový model je posloupnost náhodných vektorů — skrytých stavů xk ∈ ℝn a měření zk ∈ ℝm, k = 1, 2, … — pro které platí

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

kde x0, w1, w2, …, v1, v2, … jsou navzájem nezávislé. (Vícerozměrné normální rozdělení N(μ, Σ) a kovarianční matici definujeme níže.) Stav se tedy vyvíjí podle F s náhodnými nárazy wk a měření ho zachycuje přes H se šumem vk.

Laicky řečeno

Je to skrytý Markovův model z minulého dílu, jen stav není „poctivá nebo falešná kostka“, ale vektor čísel — třeba poloha a rychlost. Fyzika říká, jak se stav zhruba vyvíjí (F), náhodné nárazy a nepřesnost modelu shrnuje Q. Měřidlo vidí jen část stavu (H) a plete se o R.

Náš příklad: auto jede po silnici zhruba stálou rychlostí 15 m/s, ale řidič občas přibrzdí nebo přidá — náhodné zrychlení se směrodatnou odchylkou 0,5 m/s². Stav je (poloha, rychlost), krok 1 s, takže F = [[1, 1], [0, 1]]: nová poloha je stará plus rychlost. GPS měří jen polohu, s nejistotou 8 m: H = [1, 0], R = 64.

Definice — kovarianční matice a vícerozměrné normální rozdělení

Nechť n ≥ 1 a X = (X1, …, Xn)T je náhodný vektor, jehož složky jsou náhodné veličiny s konečným rozptylem. Jeho střední hodnota je vektor μ = E[X] = (E[X1], …, E[Xn])T ∈ ℝn (střední hodnota a kovariance viz díl Střední hodnota, rozptyl a kovariance). Jeho kovarianční matice je Σ ∈ ℝn×n,

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

Na diagonále jsou rozptyly složek (Σii = var Xi), mimo ni kovariance. Matice je symetrická (Σ = ΣT) a pozitivně semidefinitní: pro každé a ∈ ℝn je aTΣa = var(aTX) ≥ 0.

Nechť μ ∈ ℝn a Σ ∈ ℝn×n je symetrická pozitivně definitní matice. Náhodný vektor X má vícerozměrné normální rozdělení, píšeme X ~ N(μ, Σ), právě když má hustotu

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

Pak E[X] = μ a kovarianční matice X je Σ. Díl používá dvě vlastnosti:

  1. Je-li X ~ N(μ, Σ), A ∈ ℝp×n a c ∈ ℝp, pak AX + c ~ N(Aμ + c, A Σ AT) (je-li AΣAT singulární, jde o tzv. degenerované normální rozdělení bez hustoty).
  2. Jsou-li X ~ N(μ1, Σ1) a Y ~ N(μ2, Σ2) nezávislé vektory v ℝn, pak X + Y ~ N(μ1 + μ2, Σ1 + Σ2).
Laicky řečeno

Kovarianční matice je „nejistota pro víc čísel najednou“. Na diagonále stojí, jak moc si nejsme jistí polohou a jak moc rychlostí. Mimo diagonálu je, jestli se chyby drží spolu: kladná kovariance polohy a rychlosti znamená „když jsme auto odhadli moc vpředu, nejspíš jsme mu přisoudili i moc velkou rychlost“.

Příklad — odkud se vezme matice Q

Během kroku délky Δt působí na auto stálé náhodné zrychlení a ~ N(0, q2). Ze vzorců pro rovnoměrně zrychlený 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 vektorem g = (½ Δt2, Δt), a podle pravidla AΣAT výše

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

Pro Δ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 tedy náhodné zrychlení přidá nejistotu √0,0625 = 0,25 m v poloze a 0,5 m/s v rychlosti — a obě chyby mají stejné znaménko, proto je kovariance kladná. Přesně tahle matice je v kódu níže.

4. Předpověď a oprava

Algoritmus — Kalmanův filtr

Vstup: matice F, H, Q, R lineárního stavového modelu (definice výše), počáteční odhad x̂0 ∈ ℝn s kovariancí P0 ∈ ℝn×n (symetrická, pozitivně semidefinitní) a měření z1, …, zT ∈ ℝm.

Výstup: pro každé k = 1, …, T odhad x̂k ∈ ℝn a jeho kovariance Pk ∈ ℝn×n — střední hodnota a kovariance normálního rozdělení, kterým filtr popisuje stav xk po měřeních z1, …, zk. I je jednotková matice n × n.

Kroky: pro k = 1, 2, …, T postupně:

  1. Předpověď: x̂k− = F x̂k−1,   Pk− = F Pk−1 FT + Q.
  2. Inovace a její kovariance: yk = zk − H x̂k−,   Sk = H Pk− HT + R (je pozitivně definitní, protože R je, a tedy 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 zpracování posledního měření zT (při průběžném běhu pokračuje s každým novým měřením). V rozborech níže index k vynecháváme: x̂, P vpravo jsou hodnoty z minulého kroku, vlevo nové.

Laicky řečeno

Předpověď: „podle fyziky by auto teď mělo být tady“ — a protože fyzika není dokonalá, nejistota trochu vzroste. Oprava: přijde měření; rozdíl mezi měřením a předpovědí (inovace) se převezme jen z části K, podle toho, komu víc věříme. Je to spojení dvou měření z první kapitoly — jedním „měřením“ je předpověď z minula, druhým GPS. Kovariance P si navíc pamatuje, jak spolu souvisí chyba polohy a rychlosti, a díky tomu filtr opravuje i rychlost, kterou nikdo neměří.

Barvy v rozborech níže sedí s obrázky: předpověď (dřív „první odhad“) modře, měření jantarově, výsledek zeleně, zisk fialově.

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

x̂−, P−
předpověď na tento krok, než přijde měření — hraje roli „prvního odhadu“ ze spojení dvou měření
F … FT
model posune odhad dopředu; nejistota se přenáší pravidlem AΣAT (u auta: nejistá rychlost se za sekundu promítne do nejistoty polohy). Nestačí FP, protože kovariance je kvadratická veličina — násobí se zleva i zprava
Q
model není dokonalý (řidič přibrzdí), takže se nejistota přičítá v každém kroku — bez Q by P klesla k nule a filtr by přestal měření poslouchat
Předpověď: kam podle fyziky stav dojde a o kolik se tím zvětší nejistota.

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

H P− HT
nejistota předpovědi přepočtená do řeči měřidla (u auta jen rozptyl polohy) — odpovídá σ12
R
rozptyl měření, odpovídá σ22; součet v závorce je rozptyl inovace S — o kolik se měření a předpověď mohou rozcházet čistě náhodou
P− HT
kovariance celého stavu s měřenou veličinou; díky ní dostane nenulový zisk i rychlost, kterou nikdo neměří — chyba polohy a rychlosti spolu souvisí
K
Kalmanův zisk, pro každou složku stavu jedno číslo; inverze místo dělení jen proto, že měření může být vektor
V jedné dimenzi s H = 1 je P−HT = HP−HT = σ12 a vzorec je přesně K = σ12/σ12 + σ22 z první kapitoly.

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

x̂−, P−
předpověď — výchozí bod, od kterého se posouváme
z
nové měření (v obrázku jantarové body GPS); jediné místo, kudy do odhadu vstupují data
H
převede předpověď stavu na to, co by měřidlo mělo ukázat; měření a stav se nedají odečíst přímo, protože GPS vidí jen polohu, ne rychlost
K
jaký podíl inovace z − Hx̂− převzít do každé složky stavu
x̂, P
opravený odhad (v obrázku zelený); činitel I − KH nejistotu zmenší — tím víc, čím větší díl měření jsme převzali
Oprava: totéž „posuň se k měření o podíl K“, jen pro vektory.
import numpy as np

F = np.array([[1, 1], [0, 1]])                    # poloha += rychlost
H = np.array([[1, 0]])                            # měříme jen polohu
Q = 0.5**2 * np.array([[1/4, 1/2], [1/2, 1]])     # náhodné zrychlení
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             # předpověď
        K = P @ H.T @ np.linalg.inv(H @ P @ H.T + R)
        x = x + K @ (z - H @ x)                   # oprava podle inovace
        P = (np.eye(2) - K @ H) @ P
        yield x, P
Příklad — první dva kroky filtru na datech auta

Start. První měření GPS je z1 = 8,44 m. Filtr začne polohou 8,44 m, rychlostí 0 a velkou nejistotou P0 = [[100; 0], [0; 100]] (10 m a 10 m/s). Oprava týmž měřením polohu nezmění (inovace je 0), jen zmenší její rozptyl (barvy podle rozborů výše): K = 100/100 + 64 = 0,610, P11 = (1 − 0,610) · 100 = 39,02.

Předpověď na 2. sekundu. x̂− = (8,44 + 0; 0) = (8,44; 0,00). Kovariance FPFT přičte k rozptylu polohy rozptyl rychlosti (poloha += rychlost) a k tomu se přičte 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. Měření z2 = 23,23 m, inovace 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 dvou měřeních filtr „ví“, že se auto hýbe, přestože rychlost nikdo neměřil: odhadl 7,3 m/s (skutečnost 13,9 m/s). Zisk pro rychlost je nenulový jen díky kovarianci 100,13 mimo diagonálu. Proč jen polovina? Měření jsou zašuměná o 8 m, takže filtr rozdíl 15 m ještě nebere úplně vážně — za další sekundy se rychlost doladí.

5. Filtr sleduje auto

Minuta jízdy, jedno měření GPS za sekundu. Za tu dobu auto ujede necelý kilometr, takže by se šum v grafu polohy ztratil. Kreslíme proto, o kolik je auto napřed nebo pozadu oproti jízdě přesně 15 m/s:

−25025 01020 0102030405060 odchylka od jízdy 15 m/s (m) rychlost (m/s) čas (s)
Sledování auta: nahoře odchylka polohy, dole rychlost skutečnost měření GPS odhad filtru ± 2σ

Měření GPS se od skutečné polohy odchylují v průměru o 8,3 m (od desáté sekundy, kdy se filtr rozběhne). Odhad filtru jen o 4,9 m — o 41 % méně. A rychlost, kterou žádné čidlo neměří, odhadne s chybou 0,8 m/s: filtr ji odvodí z toho, jak se mění poloha. Na začátku rychlost nezná (začíná od nuly), za pár sekund se ale chytí. Pás ±2σ je filtrova poctivá nejistota — skutečná poloha leží uvnitř v 95 % kroků, přesně jak má.

Definice — průměrná chyba (RMSE) a pás ±2σ

Nechť 𝒦 je konečná neprázdná množina kroků, N = |𝒦|, a pro každé k ∈ 𝒦 je pk ∈ ℝ skutečná poloha a p̂k ∈ ℝ její odhad (první složka odhadu filtru x̂k, nebo samotné měření). Odmocnina ze střední kvadratické chyby (RMSE) je číslo

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

„Průměrná chyba“ v tomto dílu je RMSE přes kroky 𝒦 = {10, …, 59}, tedy N = 50. Čtverce trestají velké chyby víc než malé a odmocnina vrací výsledek do metrů. Pro samotnou GPS by RMSE mělo vyjít kolem σ = 8 m — a vyšlo 8,3 m. Pro rychlost se RMSE definuje stejně s druhou složkou stavu.

Nechť Pk ∈ ℝ2×2 je kovariance odhadu filtru v kroku k a Pk,11 její prvek vlevo nahoře (rozptyl polohy). Pás ±2σ v kroku k je interval

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

Pro X ~ N(μ, σ2) je P(|X − μ| ≤ 2σ) ≈ 0,9545; má-li filtr nejistotu Pk spočítanou správně, musí skutečnost padnout do pásu asi v 95 % kroků.

Kalmanův zisk se po pár krocích ustálí na K ≈ (0,30; 0,05): z každé inovace převezme filtr 30 % do polohy a 5 % (na metr inovace 0,05 m/s) do rychlosti. Přes 50 simulovaných jízd je chyba filtru v průměru 55 % chyby samotné GPS.

Věta — ustálený zisk

Ve vzorcích pro P−, K a P nejsou měření z — kovariance i zisk se dají spočítat předem. Spojením předpovědi a opravy vznikne rekurence (diskrétní Riccatiho rovnice)

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

Nechť F ∈ ℝn×n, H ∈ ℝm×n, R pozitivně definitní a Q = GGT pro nějaké G ∈ ℝn×r jsou pevné (nezávislé na k) a platí

  1. dvojice (F, H) je pozorovatelná: matice složená pod sebe z H, HF, …, HFn−1 má hodnost n (z řady měření se dá zjistit celý stav);
  2. dvojice (F, G) je řiditelná: matice složená vedle sebe z G, FG, …, Fn−1G má hodnost n (šum se časem dostane do všech složek stavu).

Pak pro každou symetrickou pozitivně semidefinitní počáteční matici posloupnost P−k konverguje k matici P∞, která nezávisí na počáteční matici a je jediným symetrickým pozitivně semidefinitním pevným bodem rekurence; zisk Kk konverguje k ustálené hodnotě K∞ = P∞HT (HP∞HT + R)−1. U auta obě podmínky platí: [H; HF] = [[1, 0], [1, 1]] i [g, Fg] = [[0,5; 1,5], [1; 1]] mají hodnost 2.

U auta: po 60 krocích je K = (0,297; 0,052) a P = [[19,04; 3,35], [3,35; 1,29]], tedy filtr si věří na √19,04 ≈ 4,4 m v poloze a √1,29 ≈ 1,1 m/s v rychlosti.

Laicky řečeno

Na začátku filtr neví skoro nic a hltá každé měření (zisk 0,61, pak 0,68). Jak se odhad zpřesňuje, zisk klesá — až se ustálí tam, kde nejistota přidaná za krok šumem Q je stejně velká jako ta, kterou ubere měření. Dál už se nic nemění, a proto se v jednoduchých zařízeních zisk často spočítá jednou předem a filtr pak jen násobí pevnými čísly.

6. Komu věřit: Q a R

Filtr potřebuje znát Q a R. GPS výrobce obvykle udává, ale procesní šum se odhaduje hůř. Co když filtru dáme jiné hodnoty, než jaké mají data?

Procesní šum, kterému filtr věří (m/s²)0,010,10,5 (pravda)210
chyba polohy (m)9,295,884,865,677,08
chyba rychlosti (m/s)1,190,860,791,535,19

Když filtr věří, že auto jede skoro přesně stálou rychlostí (malé Q), drží se svého modelu a na skutečné zrychlení reaguje pozdě — chyba polohy je dokonce větší než u samotné GPS. Když naopak čeká divoké změny (velké Q), nevěří modelu a kopíruje zašuměná měření. Nejlépe dopadne se skutečnou hodnotou 0,5. Totéž platí pro R: s nejistotou GPS 2, 8 a 30 m vyjde chyba polohy 5,66; 4,86 a 5,39 m.

7. Proč zrovna takhle

Věta — optimalita Kalmanova filtru

Nechť xk, zk splňují lineární stavový model (definice výše) s počátečním stavem x0 ~ N(x̂0, P0) a nechť x̂k, Pk jsou výstupy Kalmanova filtru spuštěného se stejnými F, H, Q, R, x̂0, P0. Pak pro každé k ≥ 1:

  1. podmíněné (aposteriorní) rozdělení stavu xk při měřeních z1, …, zk je přesně N(x̂k, Pk);
  2. zejména x̂k = E[xk | z1, …, zk], a ze všech odhadů g(z1, …, zk) má nejmenší střední kvadratickou chybu E[‖xk − g(z1, …, zk)‖2].

Vypustíme-li předpoklad normality (x0, wk, vk jsou jen nekorelované se stejnými středními hodnotami a kovariancemi), je x̂k nejlepší ve smyslu střední kvadratické chyby mezi odhady, které jsou afinní (lineární plus konstanta) funkcí z1, …, zk.

Laicky řečeno

Kalmanův filtr je Bayesova věta aplikovaná znovu a znovu. Předpověď je apriorní rozdělení, měření je věrohodnost, oprava je aposteriorní rozdělení. Normální rozdělení má tu vzácnou vlastnost, že součin normálních je zase normální — a tak stačí pamatovat si střední hodnotu a kovarianci místo celé funkce. Je to dopředný algoritmus ze skrytých Markovových modelů pro 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
předpověď (apriorní rozdělení): minulý stav neznáme přesně, tak průměrujeme přechod přes všechny možné minulé stavy, vážené tím, čemu jsme minule věřili. Integrál je spojitá obdoba součtu ∑i v dopředném algoritmu HMM. Pro lineární model a normální rozdělení vyjde N(Fx̂, FPFT + Q)
p(zk | xk)
věrohodnost nového měření — jak dobře by které místo vysvětlilo, co GPS ukázala; z modelu je to N(zk; Hxk, R)
p(xk | z1:k)
aposteriorní rozdělení po všech měřeních; „∝“ proto, že normalizační konstantu p(zk | z1:k−1) nepotřebujeme — součin dvou normálních hustot dopočítá důkaz věty ze začátku dílu, a vyjde z něj přesně krok opravy
Bayesova věta v čase: předpověď krát věrohodnost dává nový odhad, který je předpovědí pro příští krok.

8. Když svět není lineární

  • Rozšířený Kalmanův filtr (EKF) nelineární model v každém kroku linearizuje derivací — tak to dělala i navigace Apolla.
  • Unscented Kalmanův filtr (UKF) místo derivací prožene modelem pár pečlivě vybraných bodů a z nich spočítá novou střední hodnotu a kovarianci.
  • Částicový filtr se vzdá normálního rozdělení úplně: odhad reprezentuje tisíci vzorků („částic“), které se pohybují podle modelu a převažují podle měření. Zvládne i odhad s více vrcholy, třeba „robot je buď v kuchyni, nebo v obýváku“.
  • Kde všude: spojování GPS, akcelerometru a gyroskopu v mobilech, navigace letadel, dronů a raket, sledování objektů radarem, odhad polohy autonomních aut, a dokonce vyhlazování ekonomických časových řad.
Definice — rozšířený Kalmanův filtr (EKF)

Nechť f : ℝn → ℝn a h : ℝn → ℝm jsou diferencovatelné funkce (derivace viz díl Derivace, gradient a řetízkové pravidlo), Q, R jako v lineárním modelu a model je nelineární:

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

Jacobiho matice funkce f v bodě a ∈ ℝn je matice parciálních derivací Jf(a) ∈ ℝn×n, (Jf(a))ij = ∂fi/∂xj(a); obdobně Jh(a) ∈ ℝm×n. Rozšířený Kalmanův filtr má stejný vstup a výstup jako Kalmanův filtr (s f, h místo F, H) a pro k = 1, 2, …, T provede:

  1. Předpověď: 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−.

Střední hodnotu tedy EKF počítá nelineárními funkcemi, kovarianci jejich linearizací v aktuálním odhadu.

Příklad: radar měří vzdálenost h(px, py) = √px2 + py2; pak Hk = (px/d, py/d) s d = √px2 + py2 — jednotkový vektor směrem k cíli. Pro cíl v (300, 400) m je d = 500 m a Hk = (0,6; 0,8). Výsledek už není přesné aposteriorní rozdělení, jen jeho přiblížení; čím víc je model v rozsahu nejistoty zakřivený, tím horší.

9. Shrnutí

  • Dvě nezávislá normální měření se spojí váženým průměrem; přesnosti se sčítají a váha K je Kalmanův zisk.
  • Kalmanův filtr opakuje předpověď podle modelu a opravu podle měření; pro neměnnou veličinu je to průběžný průměr.
  • U auta snížil chybu polohy z 8,3 m (GPS) na 4,9 m a odhadl i neměřenou rychlost s chybou 0,8 m/s; pás ±2σ pokryl skutečnost v 95 % kroků.
  • Výsledek záleží na Q a R: příliš velká důvěra v model reaguje pozdě, příliš malá kopíruje šum.
  • Pro lineární model s normálním šumem je filtr přesná Bayesova aktualizace; nelineární svět zvládají EKF, UKF a částicové filtry.

Tímhle dílem končí modul o pravděpodobnostních modelech. Chcete si to osahat? Nechte AI agenta napsat Kalmanův filtr pro data z akcelerometru vlastního telefonu a zkuste, jak dobře z nich odhadne, o kolik jste telefon posunuli.

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu