「強基固本,行穩致遠」,科學研究離不開理論基礎,人工智慧學科更是需要數學、物理、神經科學等基礎學科提供有力支撐,為了緊扣時代脈搏,我們推出「強基固本」專欄,講解AI領域的基礎知識,為你的科研學習提供助力,夯實理論基礎,提升原始創新能力,敬請關注。
轉載來源:https://longaspire.github.io/blog/卡爾曼濾波/Kalman Filter (KF) 是一個高效的遞歸濾波器,它可以實現從一系列的噪聲觀測中,估計動態系統的狀態。
01
卡爾曼濾波器以它的發明者Rudolf. Emil. Kalman先生(2016年去世,向這位傳奇的科學家致敬)而命名。在控制領域,Kalman濾波被稱為
線性二次型估計 。其也可以認為是一個最優化自回歸數據處理算法(optimal recursive data processing algorithm)。目前,卡爾曼濾波已經有很多不同的實現,有施密特擴展濾波器、信息濾波器以及一系列的Bierman和Thornton發明的平方根濾波器等,而卡爾曼最初提出的形式現在稱為簡單卡爾曼濾波器。也許最常見的卡爾曼濾波器應用是鎖相環,它在收音機、計算機和幾乎全部視頻或通訊設備中廣泛存在。一個簡單的應用是估計物體的位置和速度。簡要描述如下:假設我們可以獲取一個物體的包含噪聲的一系列位置觀測數據,我們可以獲得此物體的精確速度和位置連續更新信息。例如,對於雷達來說,我們關心的是跟蹤目標,而目標的位置、速度、加速度的觀測值是時刻含有誤差的,卡爾曼濾波器利用目標的動態信息,去掉噪聲影響,獲取目標此刻好的位置估計(即
濾波 過程),將來的位置估計(即
預測 過程),也可以是過去位置估計的(即
插值 或
平滑 過程)。
02
假設我們要研究的對象是一個房間的溫度。根據你的經驗判斷,這個房間的溫度是恆定的,也就是下一分鐘的溫度等於現在這一分鐘的溫度(假設我們用一分鐘來做時間單位)。假設你對你的經驗不是絕對相信,可能會有上下偏差幾度。我們把這些偏差看成是高斯白噪聲(White Gaussian Noise,理想情況下我們以高斯噪聲來進行假設估計),也就是這些偏差跟前後時間是沒有關係的而且符合高斯分布(Gaussian Distribution)。另外,我們在房間裡放一個溫度計,但是這個溫度計也不準確的,觀測值會比實際值偏差。我們也把這些偏差看成是高斯白噪聲。好了,現在對於某一分鐘我們有兩個有關於該房間的溫度值:你根據經驗的預測值(系統的預測值)和溫度計的值(觀測值)。下面我們要用這兩個值結合它們各自的噪聲來估算出房間的實際溫度值。假如我們要估算
時刻的實際溫度值。首先你要根據 時刻的溫度值,來預測 時刻的溫度。因為你相信溫度是恆定的,所以你會得到 時刻的溫度預測值是跟 時刻一樣的,假設是23度,同時該值的高斯噪聲的偏差是5度(5是這樣得到的:如果 時刻估算出的最優溫度值的偏差是3,你對自己預測的不確定度是4度,它們平方相加再開方就是5)。然後,你從溫度計那裡得到了 時刻的溫度值,假設是25度,同時該值的偏差是4度。由於我們用於估算 時刻的實際溫度有兩個溫度值,分別是23度和25度。究竟實際溫度是多少呢?相信自己還是相信溫度計呢?究竟相信誰多一點,我們可以用它們的協方差(covariance)來判斷。因為 ,所以 ,我們可以估算出 時刻的實際溫度值是: 度。可以看出,因為溫度計的協方差比較小(比較相信溫度計),所以估算出的最優溫度值偏向溫度計的值。現在我們已經得到 時刻的最優溫度值了,下一步就是要進入 時刻,進行新的最優估算。在進入 時刻之前,我們還要算出 時刻那個最優值(24.56度)的偏差。算法如下: 。這裡的5就是上面的 時刻你預測的那個23度溫度值的偏差,得出的2.35就是進入 時刻以後 時刻估算出的最優溫度值的偏差(對應於上面的3)。就是這樣,卡爾曼濾波器就不斷的把協方差遞歸,從而估算出最優的溫度值。它運行的很快,而且它只保留了上一時刻的協方差。上面的 ,就是卡爾曼增益(Kalman Gain),可以隨不同的時刻而改變自己的值,後續會進一步說明其計算方法和數學意義。
03
卡爾曼濾波基於時域描述的線性動態系統,它的模型是馬爾科夫鏈(Markov Chain),而馬爾科夫鏈建立在一個被高斯噪聲幹擾的線性算子 之上。系統的狀態可以用一個元素為實數的向量表示。隨著離散時間的增加,這個線性算子就會作用到當前狀態之上,產生一個新的狀態,並且會帶入一定的噪聲,同時一些已知的控制信息也會加入。同時,另外一個受噪聲幹擾的線性算子將產生這些隱含狀態的可見輸出 。卡爾曼濾波器可以被看作為類隱馬爾科夫模型,它們的顯著不同點在於:隱狀態變量的取值空間是一個連續的空間,而不是離散的狀態空間;另外,隱馬爾科夫模型可以描述下一個狀態的一個任意分布,這也與應用於卡爾曼濾波器中的高斯噪聲模型相反。
首先,我們先要引入一個離散控制過程的系統。該系統的過程模型可用一個線性隨機微分方程(Linear Stochastic Difference Equation)來描述:上兩式子中, 是 時刻的系統狀態, 是 時刻對系統的控制量。 和 是系統參數,對於多模型系統,它們為轉移矩陣。 是 時刻的觀測值, 是觀測系統的參數,對於多觀測系統, 為矩陣。 和 分別表示過程和觀測的噪聲。它們被假設成高斯白噪聲(White Gaussian Noise),它們的協方差分別是 , (這裡我們假設它們不隨系統狀態變化而變化)。卡爾曼濾波是一種遞歸的估計,即只要獲知上一時刻狀態的估計值以及當前狀態的觀測值就可以計算出當前狀態的估計值,因此不需要記錄觀測或者估計的歷史信息。卡爾曼濾波器與大多數濾波器不同之處在於:它是一種純粹的時域濾波器,它不需要像低通濾波器等頻域濾波器那樣,需要在頻域設計再轉換到時域實現。在預測階段,濾波器使用上一狀態的估計,做出對當前狀態的估計。在更新階段,濾波器利用對當前狀態的觀測值優化在預測階段獲得的預測值,以獲得一個更精確的新估計值。3.1 預測階段 對於滿足上面的條件(線性隨機微分系統,過程和觀測都是高斯白噪聲),卡爾曼濾波器是最優的信息處理器。下面我們來用它們結合它們的協方差來估算系統的最優化輸出(類似上一節那個溫度的例子)。首先,我們要利用系統的過程模型,來預測下一狀態的系統。假設現在的系統狀態是 ,根據系統的模型,可以基於系統的上一狀態而預測出現在狀態:上述公式稱為預測的狀態估計方程,其中, 是利用上一狀態預測的結果, 是上一狀態最優的結果, 為現在狀態的控制量,如果沒有控制量,它可以為0。到現在為止,我們的系統結果已經更新了,可是,對應於 的協方差(covariance)還沒更新。我們用 表示協方差,它實際上描述了預測值的準確程度:上述公式稱為預測的協方差矩陣估計方程,其中, 是 對應的協方差, 是 對應的協方差, 表示 的轉置矩陣,是系統過程的協方差。3.2 更新階段 首先是觀測餘量(measurement residual):因為觀測過程中存在一個觀測誤差的協方差矩陣,我們可以給出一個觀測餘量的協方差:接下來給出一個卡爾曼增益(Kalman Gain): 現在我們有了現在狀態的預測結果,然後我們再收集現在狀態的觀測值。結合預測值和觀測值,我們可以得到現在狀態 的最優化估算值 :到現在為止,我們已經得到了 狀態下最優的估算值 。但是為了要使得卡爾曼濾波器不斷的運行下去直到系統過程結束,我們還要更新k狀態下 的covariance:上述方程成為更新的協方差矩陣估計方程,其中 為單位矩陣,對於單模型單觀測, 。當系統進入k+1狀態時, 就是預測方程中的 。這樣,算法就可以自回歸的運算下去。
04
以上一直提到卡爾曼增益,那麼其實際意義如何理解呢?我們結合一些數學知識來對其進行解釋。我們知道,卡爾曼濾波器對於隨機變量的噪聲,加入了高斯分布的假設,而這,也是能夠對連續動態信息進行濾波的基礎。那麼先從高斯分布開始:符合高斯分布的一個隨機變量 具有一個平均值 和一個方差 。平均值 即數學期望 ,而方差 ,衡量隨機變量或一組數據時離散程度的度量。 即標準差或者均方差。正態分布的公式:高斯分布的一個重要性質是:互不相關的兩個高斯分布相乘(相互疊加)後,仍然是一個正態分布!
並且新的正態分布的均值和方差滿足:
以上是單變量概率密度函數的計算結果,如果是多變量的,那麼,就變成了協方差矩陣 的形式:
再結合第三部分我們結合的卡爾曼濾波器算法,可以知道,此處卡爾曼增益正是此處的K。它正是用來計算當前兩個高斯噪聲疊加後的系統情況的。而為什麼要進行疊加呢?
我們知道,兩個事件的發生都是概率性的,不能完全相信其中的任何一個。如果具有兩個事件,都發生的話,從直覺或者是理性思維上講,兩個事件同時發生的可能性越大,我們越相信它!要想考察它們同時發生的可能性,就是將兩個事件單獨發生的概率相乘。但是究竟是相信自己預測還是相信觀測呢?我們可以用卡爾曼的方法來加權,即利用他們的方差 來判斷——求出綠色分布均值位置在紅藍均值間的比例,即卡爾曼增益。
紅色分布為預測,藍色分布為觀測,綠色分布為二者的相乘卡爾曼濾波器的理論基礎,正是假定觀測值和預測值的噪聲都符合正態分布,且兩個正態分布的融合仍是正態分布這一特性進行迭代的。05
5.1 物體運動狀態估計 在算法模型的基礎上,我們再進一步給出一個幫助理解的例子,是從[3]的頁面上直接搬過來的:考慮在無摩擦、無限長的直軌道上的一輛車。該車最初停在位置0處,但時不時受到隨機的衝擊。注意這裡我們考慮沒有外力的影響,因此忽略掉 和 。同時考慮 為常數(此處不用下標)。我們每 秒即測量車的位置,但是這個測量是非精確的;我們想建立一個關於其位置以及速度的模型。車的位置以及速度(或者更加一般的,一個粒子的運動狀態)可以被線性狀態空間描述如下:假設在 時刻和 時刻之間,車受到 的加速度,且符合均值為0,標準差為 的正態分布。根據牛頓第一定理,我們推出:每一個時刻我們都會對其進行一個測量過程,測量受到噪聲幹擾,我們依然假設噪聲服從正態分布,均值為0,標準差為 。我們先要提出一個假設初始值,假設車最初的位置和速度是足夠準確的:並且,告訴濾波器初始的測量是準確的,給出一個協方差矩陣:如果我們不確切知道最初的位置與速度,協方差矩陣可以初始化為一個對角線元素為B的矩陣,B取一個比較大的數上個公式中的 也就是 時刻的位移和速度的估計。注意這個時候預測的估計協方差矩陣 相比 就大一些,這主要是由於預測過程帶來的誤差。有了上述的兩個預測值,假設我們得到了 時刻的估計值,因為假設 ,我們在觀測值上有:也就是說只能觀測到車的位置,不能觀測到車的速度 。上述我們就做出了一個更新階段的狀態的估計,看到上述方程中只涉及到預測的變量和當前階段的觀測值,接下來是更新階段的協方差矩陣估計:5.2 算法流程抽象 公式是不是很複雜,但是只要你跟著流程來一趟,應該能夠明白KF的整個過程。跑完這個例子之後,我們把整個流程抽象出來:先決定當前系統的初始狀態,並根據預測方程(過程模型)得到一個下一個時刻預測的狀態;根據預測方程中過程的誤差,得到當前預測的協方差估計;進入更新階段,我們根據目前系統的觀測值和上一個時刻預測的狀態,從轉換方程(觀測模型)入手,得到一個測量餘量;根據轉換方程和上個時刻預測的協方差估計,也可以得到一個測量餘量的協方差估計;根據1)測量餘量的協方差 、2)轉換方程 和3)上個時刻的預測協方差估計 ,我們得到卡爾曼增益 ;根據卡爾曼增益和測量餘量,我們從預測的狀態中更新優化當前的狀態的值,而這個值可以用來預測下一個時刻的狀態;同樣,我們根據1)卡爾曼增益 和2)上個時刻的預測協方差估計 ,我們把當前更新階段的協方差 估計也得到,幫助下一時刻的卡爾曼增益計算。
最後我們應該回過頭來看看以上講的房間溫度的例子,來對比下這個過程。
06
給出一個matlab版本的小程序。
N=200;w(1)=0;w=randn(1,N) % White Gaussian Noise of Prediction x(1)=25;a=1; % prediction parameterfor k=2:N; x(k)=a*x(k-1)+w(k-1);end V=randn(1,N); % White Gaussian Noise of Measurementq1=std(V);Rvv=q1.^2; % covariance of Measurementq2=std(x);Rxx=q2.^2;q3=std(w);Rww=q3.^2; % covariance of predictionc=0.2; % measurement parameterY=c*x+V; p(1)=10; % initial prediction results(1)=26; % initial optimal resultfor t=2:N; p1(t)=a.^2*p(t-1)+Rww; % covariance of t-1 b(t)=c*p1(t)/(c.^2*p1(t)+Rvv); % kalman gain s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1)); % optimal result p(t)=p1(t)-c*b(t)*p1(t); % covariance of tend t=1:N;plot(t,s,'r',t,Y,'g',t,x,'b');07
可以查看[4]一個關於卡爾曼濾波器的教程,它對應的一個中文版本可見[5]。
引用 1.http://carpa.bokee.com/4725695.html.
2.http://internetbuff.blog.163.com/blog/static/9425110720091501413932/.
3.http://en.wikipedia.org/wiki/Kalman_filtering.
4.http://www.cl.cam.ac.uk/~rmf25/papers/Understanding the Basis of the Kalman Filter.pdf
5.https://segmentfault.com/a/1190000000514987
本文目的在於學術交流,並不代表本公眾號贊同其觀點或對其內容真實性負責,版權歸原作者所有,如有侵權請告知刪除。
分享、點讚、在看,給個三連擊唄!