カルマンフィルタの導出 †カルマンフィルタを、簡単に説明したい。
最小二乗法:y=ax+b の場合 †入力xと出力yの関数関係を想定し(これをモデルと呼ぶ)観測データy1;t=(y1,...,yt)とx1;t=(x1,...,xt)から、パラメータを推定する問題を考える。 推定の規範として、下記の二乗誤差を最小にするものとしよう。そして、xとyの関係(モデル)をy*=ax+bと想定する。y*は推定値である。 SE=Σ(yt-y*t)^2 =Σ(yt-axt-b)^2 この時、二乗誤差を最小にする(a,b)の推定値(a*,b*)は、次式で求められる。 このとき誤差をri=yi-(axi+b) i = 1, ..., tで表わすと、 SE=∑ ri^2 --->Min(a,b) SEをそれぞれの係数aとbで、微分すれば0となる必要がある。この条件は Σ2ri・xi=0 Σ2ri=0 ri=yi-(axi+b) これを正規方程式とよぶ。この線形連立式の解が求めるパラメータ(a*,b*)である。
最尤推定法:y=ax+u †これは、uが確率変数であるので、確率モデルと呼ばれる。 観測値yをm次元ベクトル、入力 xをn(n>m)次元ベクトルとする。データセット{xt, yt t= 1,..., T} から、パラメータa を求める問題を考える。ただしu は分平均0、分散σ^2のガウスノイズである。このとき、y は中心位置ax、分散σ^2の正規分布N(y|ax,σ^2) にしたがう。 P(y|x,a)=N(y|ax,σ^2)=SQRT(2πσ^2)^(-m/2)EXP[-||y-ax||^2/)2σ^2)] 中心位置が入力x に依存しているため上式で与えられるy の分布はx の条件付きである。対数尤度を取ると LogP(y|x,a)=(-1/2σ^2)||y-ax||^2 + aに無関係な定数 で表わされる。観測データy1;t=(y1,y2,...yt) x1;t=(x1,x2,...,xt)の生起確率は、独立なガウス分布に従うことから、y1;tの正規確率は上記の確率密度関数ので表わされるので、対数尤度関数は和の形になり P(y1,y2,...,yt|a)=P(y1|a)P(y2|a)....P(yt|a) であることから、観測データ所与のもとでの尤度関数は L(a)=(-1/2σ^2) Σ||yt-axt||^2 + aに無関係な定数 このことから、L(a) をa について最大化することと、二乗誤差E=Σ||yt-axt||^2を最小化することは等価である。したがってこの場合の最尤推定法は最小二乗法と等価である。 線形1次離散型確率モデルのカルマンフィルタ †目標は、状態xtの推定について、推定誤差が最小分散を与える不偏推定量として、カルマンフィルタの式を求めることにある。
X*t+1=Ltx*t+Ktyt+1 の形で毎期の状態を推定する。
不偏推定量の条件:カルマンゲインに基づく修正(update式) †不偏性の条件は、 E(εXt)=E(X*t-xt)=0 である。 この条件から、LとKはどのような条件を満たすべきかを調べる。 εXt+1=X*t+1-xt+1=Ltx*t+Ktyt+1 -xt+1 である。上式に観測式を代入し、Ltxtを加えて引く εXt+1=X*t+1-xt+1=Ltx*t+Kt(hxt+1+vt+1) -xt+1 -Ltxt+Ltxt Xt+1にシステム推移式を代入 εXt+1=Lt(x*t-xt)+Kt{h(fxt+wt)+vt+1}-(fxt+wt)+Ltxt Xt,ut,vt,wtについて整理 εXt+1=Lt(x*t-xt)+(Kthf-f+L)xt+(Kth-1)wt+Ktvt+1 誤差項のVt,Wtの期待値は0である。 不偏性の条件は上式の期待値が0であるので E(εXt+1)=(Kthf-f+L)E(xt)=0 以上より、不偏性の条件式は、次式で表わされる。 Lt=(1-Kth)f :不偏性の条件式 これを、推定式に代入すれば X*t+1=Ltx*t+Ktyt+1 =fx*t-Kthfx*t+Ktyt+1 =fx*t+Kt(yt+1-hfx*t) 不偏性から、次期の状態推定は、1期の予測値fX*tを、観測誤差yt-hfxtにあるゲイン定数Kを掛けて修正することが導かれた。 ここで、求められたupdateの式を整理しておく。 X*t+1=X~t+1+Kt(yt+1-y~t+1) ;状態のupdate式 X~t+1=fx*t :状態の1期予測式 y~t+1=hx~t+1 :出力の1期予測式
最小分散推定:カルマンゲインの漸化式 †いまだカルマンゲインをどのように決めるかが判っていないので、調べてみよう。 カルマンゲインは、予測誤差を最小になるように、最小分散を与える最適化を行うことで求められる。 そのために、まず予測誤差X~t+1-xt+1の分散を計算してみる。 X~t+1-xt+1=fx*t-(fxt+wt)=f(x*t-xt)-wt x*t-xtの分散がPt、wtの分散がσwwであるので、左辺の予測誤差の分散は次式で与えられる。 P~t+1=fPtf+σww :予測誤差分散の推移式 これが、予測誤差の分散の漸化式である。 次に、状態推定誤差を計算する。yとX*の項をupdateの式を使って消去していく。 εXt=x*t-xt =X~t+Kt(yt-y~t)-Xt =(X~t-xt)+Kt(hxt+vt-hx~t) =(1-Kth)(x~t-xt)+Ktvt この推定誤差は εXt=(1-Kth)εX~t+Ktvt で表わされるので、この状態推定誤差分散Ptを1期予測の分散P~tとVtの分散σvvを使って表わすことができる。 Pt=(1-Kth)P~t(1-Kth)+KtσvvKt これが、分散のupdate式である。 最終ステップは、Kt(カルマンゲイン)の決め方である。カルマンゲインは、推定誤差共分散Pkを最小にするように決めるのが最適である。 そこで、上式をKtで微分して0とおく。 -2P~th(1-Kth)+2σvvKt=0 -P~th + P~tKth+σvvKt=0 整理すれば、最適ゲインの式が求められる。 Kt=P~th/[σvv+hPth] :カルマンゲインの計算式 このKtをPtの式に代入すれば Pt=(1-Kth)P~t :状態推定誤差のupdate式 を得られる。これが分散のupdate式である。 Kalman Filterのアルゴリズム:以上の整理 †
Kalman Filterのアルゴリズム:以上の整理 †
多入力多出力多状態の場合:一般の確率差分モデル †下記の確率差分方程式を考える。 yt=Hxt+vt 観測式 Xt+1=Fxt+Gut+wt 状態推移式 (F,G,H)は、次元に対応したサイズのマトリックスである。次の仮定を置く。 E(X0)=μ(x0) E(vt)=0,E(vkvj)=Qδkj E(wt)=0,E(wkwj)=Rδkj Wk,Vj,x0は互いに無相関。共分散が0。
εXt=x*t-xt Pt=Cov(εXt) Pk=|σ1^2 | | ・ | | ・ | | σn^2| tracePk=σ1^2+.....+σn^2
一般のKalman Filterのアルゴリズム:以上の整理 †
一般型の場合のカルマンゲインの求め方 †1次元と同様に次の推定誤差ベクトルεxtが得られるまでは容易に進められます。 εxt=X*t-Xt=(I-KtH)εx~t+Ktvt そこで、誤差共分散行列は Pt=Cov(εxt)=E(εxtεxt') =[I-KtH]P~t[I-KtH]'+KtRKt' ここで、面倒なのでサフィックスtを省略して表示し、P~t=Pとすれば Pt=[I-KH]P[I-KH]'+KRK' =P-KHP-PH'K'+KHPH'K'+KRK' tracePtをtrPtで表示して trPt=trP-2trKHP+trK(HPH')K'+trKRK' ここで、次の恒等式を使う。 (PH'K')'=KHP tr(PH'K')=tr(KHP) ∂trABA'/∂A=2AB where B is symmetric ∂trAC/∂A=C' これらを使うと、PtのトレースをカルマンゲインKで偏微分して0となるKを求める。 ∂trPt/∂K=-2PH'+2KHPH'+2K=0 よって、カルマンゲインKの計算式は K=PH'(HPH'+R)^(-1) で与えられる。 (QED) きちんとサフィックスを付けて表示すれば Kt=PtHt'(HtP~tHt'+R)^(-1) KtをPtの次の表示式に代入して整理すると Pt=[I-KtH]P~t[I-KtH]'+KtRKt' 次のPtのupdate式を得る。 Pt=(I-KtHt)P~t もう一つのカルマンゲインの表現 †Pt=[(p~t)^(-1)+H'R^(-1)H]^(-1) Kt=PtH'R^(-1)
非線形系への拡張カルマンフィルタ †非線形の場合も、線形化を行って、時変パラメータ行列を持つ線形差分確率モデルとみなすことで拡張できる。詳細は、参考文献を参照のこと。 力学系の多くは、この方法で状態推定が可能である。 参考 † |