天天看點

從貝葉斯濾波到卡爾曼濾波(一)

這要從随機試驗開始談起,畢竟這是基于機率論和數理統計的

首先,什麼是随機試驗,有哪些特點?

随機試驗(random experiment)是在相同條件下對某随機現象進行的大量重複觀測。機率統計需要對某随機現象進行大量的重複觀測,或在相同條件下重複試驗,觀察其結果,才能獲得統計規律性的認識。任何随機試驗都包含試驗條件和試驗結果兩個方面。試驗條件必須相同,而試驗結果具有随機性。是以,随機試驗具有以下特點:

1.可重複性:試驗在相同條件下可重複進行;

2.可知性:每次試驗的可能結果不止一個,并且事先能明确試驗所有可能的結果;

3.不确定性:進行一次試驗之前不能确定哪一個結果會出現,但必然會出現結果中的一個。

具有以上三個特點的試驗稱為随機試驗,一般用E來表示。

 說白了就是:能重複進行、結果随機且位于已知範圍内

其次,什麼是随機過程?

随機過程,是依賴于參數的一組随機變量的全體,參數通常是時間。随機變量是随機現象的數量表現,其取值随着偶然因素的影響而改變。例如,某商店在從時間t0到時間tK這段時間内接待顧客的人數,就是依賴于時間t的一組随機變量,即随機過程。一般來說,把一組随機變量定義為随機過程

這裡我們一般選擇時間t作為這個參數,那麼每個時刻的值都是不确定的但又應該大概會處于某個範圍内(基于猜測和數學模型方程之類的),是以可以看做是随機過程,每個時刻出現的結果都可以看做是随機變量,即X0,X1,X2,X3...Xn

最後,這些随機變量怎麼統計他的值以及确定期望?

既然每個時刻的值都屬于随機變量,那每個時刻的随機變量要符合某個分布律吧,要不然很難有研究的價值(一般既然是研究的某個運動過程,表面看似沒有規律,但都可以通過模組化讓其符合某種規律的)。這樣一來,我們就有了X1 ~ f1,X2 ~ f2,...,Xn ~ fn,共n個分布律。那這些分布律怎麼知道呢?或許你會說不就是通過模組化近似的嗎,但這個顯然不是我們想要的,因為模組化有時候很難很符合,除非是那種預先對每個時刻都做了很多次實驗然後歸納分布律,或許會相對準确。但是,這個是實時動态的,沒辦法讓你先做無數次實驗統計規律——這裡恰恰展現出貝葉斯濾波的優勢:屬于實時濾波的,而不是要先提前做出很多實驗再統計出規律的。貝葉斯濾波是這樣做的:模組化還是要模組化的,隻不過要求沒有那麼高——隻需要結合你的以往經驗、知識等做一個簡單“猜測”,後面還要結合觀測到的資料進行修正呢。

從貝葉斯濾波到卡爾曼濾波(一)

 這樣:橫向看,是随機過程中的各個時刻的随機變量X0,X1,...,Xn,是代表而非具體取值。縱向看,使我們假設的能夠對各個随機變量做的随機試驗,每個随機變量對應的實驗都重複了m次,進而希望能統計出它對應的分布律(但實際上是無法進行的)(注意:這裡,X0,X1...表示的是随機變量,而X00,X01...這種格式的表示的是具體的取值,這個在單個點的貝葉斯和多個點的貝葉斯中要格外留意)。假設現在我們想知道X0随機變量的最可能的分布律,用貝葉斯濾波該怎麼做?通常我們是這樣做的:

1.單個點、離散随機變量的貝葉斯濾波

我們可以以測溫度為例,先隻針對某一個時刻點的溫度,比如說,現在是0時刻,那麼0時刻的溫度是一個随機變量——它的值是在已知範圍内的且随機(至于重複性,我們認為隻要能保證周圍的環境不變就算能夠重複試驗,千萬别糾結“它已經不是0時刻了,是以不能重複”)。貝葉斯濾波核心:主觀機率+外部觀測=相對客觀的機率。對于0時刻的溫度,其實,我們可以現根據自身的經驗、感覺、分析等做一個主觀猜測(模組化),猜一下他可能的溫度,比如,我們認為:溫度是10度的機率是0.8,溫度是11度的機率是0.2,即P(T=10)=0.8,P(T=11)=0.2。注意,這裡的T表示的真值!!因為我們是在猜測真實溫度:T猜測 = T真實。——這個機率分布就是我們根據自身經驗做的一個模組化(猜測),相當于我們的主觀機率,也就是我們在做實驗(正式測量)得到的機率,是以也叫先驗機率(先于實驗之前的)。但是我們知道,靠主觀猜測難免不準,是以我們就需要借助溫度計測一下實際溫度,評估一下我們的主觀機率的準确度到底如何。比如,溫度計測得Tm=10.3度,和10是比較接近的。但是,我們要知道溫度計測量是有誤差的,要是沒誤差的話我們也就沒必要折騰這些濾波了。這時候,我們就面臨了選擇:模型(猜測)和測量(溫度計)相信哪一個?——兩者進行融合,按方差大小配置設定在最終值中所占的比重。融合後的結果或者說對主觀機率修正後的結果就是“相對客觀的機率”即後驗機率(實驗之後得到的機率),對機率分布求均值,我們就用後驗的均值來正式表示真值。後驗機率的計算:

從貝葉斯濾波到卡爾曼濾波(一)

這裡引出了貝葉斯濾波中的三個機率:

後驗機率:即P(T=10 | Tm=10.3)—— 在測量值為10.3度(測過了,實驗過了)的前提下,真值T=10的機率。也就是說在做過試驗後,還有多大機率确定真值是10度。或者從因果角度說:綜合考慮下測量值Tm=10.3有多大機率是因為目前真值T=10而導緻的(或者T=10對Tm=10.3這個結果貢獻了多大程度)。總之就是,做過試驗後,你還有多大把握相信你之前做的猜測(主觀機率)

先驗機率:即P(T=10)—— 在做實驗之前你憑借經驗做的猜測

似然機率:即P(Tm=10.3 | T=10)—— 在真值為10的情況下,溫度計測出的值Tm=10.3的機率 —— 是不是反應的是溫度計的測量精度?(這個似乎不太适合因果解釋)當真值T=10時,如果溫度計有很大的機率(把握)測出來的值是10.3度,那麼顯然,這個溫度計在側很多次溫度時,和真實值之間的差距大概就是0.3度了,也就是說他的精度是0-0.3度。是以說,這個似然機率其實就是表示的溫度計的測量精度,是溫度計的固有屬性,是個常數。至于這個似然機率的分布律是什麼樣的(即溫度計的測量誤差分布情況),我們可以有不同的模型對其進行刻畫,不過一般大多數情況認為他是正态分布,即測量誤差是正态分布的,其中的均值和方差參數則根據溫度計性質進行确定(這個是可以事先确定的)。這樣的話我們就能借助似然機率的正态分布模型來求解似然機率了(顯然,正态分布适用于連續型随機變量的似然機率模型的求解,這個地方的是離散型的,應該是用不了正态分布的,能用的也隻能是離散型的似然機率分布模型——由經驗以及傳感器精度決定的)。

分母用全機率公式求:

從貝葉斯濾波到卡爾曼濾波(一)

可以看到,P(Tm=10.3|T=10)表示的是溫度計精度,是常數;P(T=10)是主觀機率中的,是确定好的,也是常數。這樣一來的話,這個P(Tm=10.3)就是一個常數

于是,令

從貝葉斯濾波到卡爾曼濾波(一)

則貝葉斯濾波公式為:

從貝葉斯濾波到卡爾曼濾波(一)
從貝葉斯濾波到卡爾曼濾波(一)

後驗機率 = 系數 * 似然機率 * 先驗機率  (其中系數就用全機率公式求即可)

這個就是貝葉斯進行融合、修正單個随機變量的具體過程

2.多個點、離散随機變量的貝葉斯濾波(實際上是連續型随機變量的簡化版)

這裡針對的就不再是單個點溫度(單個點相當于靜态的),而是各個時刻點的溫度了(相當于動态過程了),如果按照上面的操作,我們需要對每個時刻對應的随機變量X0,X1,X2,...,Xn進行上述的操作:先分别猜測各個随機變量的主觀機率分布(即要猜n個主觀機率),然後再分别計算各自對應的系數、似然機率,最後得到後驗機率(即對主觀機率修正後的結果)。例如:

對0時刻的X0随機變量進行貝葉斯濾波以使其接近真值(即上述):

先猜測得到主觀機率,然後根據溫度計測得的值以及溫度計精度得到似然機率,再求系數,最後得到随機變量X0的後驗機率分布,再求其均值即可

接着對1時刻的随機變量X1進行貝葉斯濾波以使其接近自己的真值:

同樣是測溫,例如:猜測:1時刻T=10的機率是0.6,T=9的機率是0.4,即P(T=10)=0.6,P(T=9)=0.4;外部觀測是Tm=9.8,溫度計精度保持不變;把主觀機率和外部觀測用貝葉斯濾波結合起來就得到了後驗機率分布:

從貝葉斯濾波到卡爾曼濾波(一)
從貝葉斯濾波到卡爾曼濾波(一)

選擇合适的似然機率模型來描述傳感器精度,得到似然機率的值;用全機率公求出P(Tm=9.8);

後面時刻對應的随機變量都按照這個流程來:要先主觀猜測,再結合溫度計的測量值、溫度計精度、全機率公式對其進行修正以得到後驗機率分布,進而更接近真實值

但是,對每個時刻都要先進行猜測(n個時刻就要猜測n次),這也太麻煩了吧。而且每個時刻的都猜,修正也就隻用對應時刻測得的一個資料修正,精度很欠缺的,基本上就是依靠測量值了。難道各個随機變量之間就沒有某種關系式?這裡就涉及到了對:獨立、無關、沒有影響這些說法的區分了。不過,我們要明确的一點是:兩個變量之間存在函數關系式,但這兩個變量仍舊可能是獨立的。其中一個例子是:

設N(u,p^2),從此分布中抽取n個獨立樣本X1,X2,...,Xn,獨立同分布,則随機變量
從貝葉斯濾波到卡爾曼濾波(一)
  與 
從貝葉斯濾波到卡爾曼濾波(一)
是互相獨立的(來自數理統計課本,這隻是舉個例子,不代表隻有這種情況才符合)

我們可以認為這些随機變量之間存在函數關系式并且是互相獨立的——其實,可以這樣想,假設你得到了每個時刻的真值,是不是很明顯就可以通過函數關系式把他們拟合出來,這不就表示着實際上這些量是存在關系的;而互相獨立則是一種前提假設,實際上随機變量之間似乎的确沒啥影響,關系式固然可以基于前面的資料做一定的預測,預測就是針對“不确定、随機的事件”。(這一部分有點欠缺,解釋的不夠好,後續我再查查資料補上來)總之,先接受:各個随機變量之間是互相獨立的并且具備一定的函數關系式。(至于為什麼需要獨立,以及為什麼獨立了還具備函數關系式,後續再做詳細的解釋)

馬爾科夫過程,視需要看看吧,

随機過程中,有一類具有“無後效性質”,即當随機過程在某一時刻 t0 所處的狀态已知的條件下,過程在時刻 t>t0 時所處的狀态隻和 t0 時刻有關,而與 t0 以前的狀态無關,則這種随機過程稱為馬爾科夫過程。

 當有了這個結論後,會發生什麼?

我們可以這樣描述這個結論:

從貝葉斯濾波到卡爾曼濾波(一)

這裡X(k)和X(k-1)表示的是随機變量而非具體取值(雖然到實際應用中,其實就是具體取值),Q是存在的噪聲,一般是根據你對自己所找的這個關系式(或者說法則f)的把握程度來确定的,把握大的話,這個Q噪聲就小點;反之就大一點,Q反應的是對這個關系式的信任程度

然後,通過這個關系式,我們就可以根據前一個的值來推測目前時刻的值了!!!——這個推測不就是我們的主觀機率嗎,隻不過之前是我們根據其他的經驗甚至說沒啥經驗就“随便猜測”,作為主觀機率;現在我們是根據前一個時刻的值進行“有依據的猜測了”,猜出目前時刻的主觀機率,接着在目前時刻,我們還能從傳感器那裡觀測到資料即得到外部觀測,傳感器精度也知道,這樣一來,就可以用貝葉斯濾波作用于目前時刻了,得到目前時刻的後驗機率分布,進而得到後驗值即最優值。然後呢,目前時刻這個最優值正好作為下一個時刻的“猜測依據”——根據關系式,用目前時刻的最優值(後驗值)可以預測下一時刻的即得到了下一時刻的先驗機率(畢竟下一時刻的實驗還沒做),然後結合下一時刻的實驗觀測,用貝葉斯濾波得到下一時刻的後驗機率分布,進一步得到後驗值,如此不斷的遞推疊代下去就行了。

發現沒,這樣一來,後面随機變量的先驗機率分布都是靠前面的資料來推測出的,而不再是之前的挨個的“猜測了”。既減少了工作量,同時也“猜測”的比之前更有理有據了。是以說,隻有随機變量X0的先驗機率分布是猜測的,後面的随機變量X1,X2,X3,...,Xn的先驗機率分布都是遞推的。

有個問題:X0的分布律是猜測的,随即變量之間的關系式也是猜測的,是以是有兩部分是明顯猜測的?(而單個點的時候顯然隻有一個猜測的部分)

的确是有兩部分是明顯是猜測的,每個猜測都會有對應的方差用于衡量其猜測的可信程度:Q用于衡量關系式,X0的方內插補點用于衡量自身猜測的可信度。

另外,注意一點,我們上面一直隻是在說“機率分布”,要是到了連續型的随機變量中,這個“機率分布”就主要展現在了“均值和方差上面了”,是以到那邊公式也主要是在計算、預測、觀測、濾波這兩個值了。

上面這些闡述中,如果不小心哪個地方涉及到了連續型分布的,可能是我和連續型随機變量的貝葉斯濾波搞混了,應該調整為離散型的就行了(或許可以)

3.小結:簡單給出濾波流程

1.預測步:上一時刻的後驗值+狀态方程   可以預測出 這一時刻的先驗值

2.更新步:這一時刻的先驗值 + 觀測方程  可以修正先驗值以得到後驗值

3.疊代:這一時刻得到的後驗值作為下一時刻先驗值的得到依據

狀态方程:其實就是上面那個反應各個随即變量之間關系的式子

觀測方程:反應狀态是如何引起傳感器的讀數(後續再解釋吧)

以上内容大多是我根據看的教程再加上自己的了解寫的,可能有些地方還不太準确或者有錯誤,請大家多多指正

繼續閱讀