狀態共變異數矩陣
當機器人同時估計好幾樣東西時——比如它向東的位置、向北的位置,以及它朝向哪個方向——它持有的並不只是對每一樣的一個最佳猜測;它還持有一份度量,衡量自己對每一樣有多沒把握,而且至關重要的是,衡量這些不確定性彼此之間有怎樣的關聯。狀態共變異數矩陣就是把這一切打包在一起的那張俐落的小表格。在它的對角線上,坐著每一個單獨量的不確定性(我向東的位置有多模糊?我的朝向呢?),而對角線之外,坐著的是相關性——在一件事上判斷錯了,往往會和在另一件事上也判斷錯相伴而行的那種方式。
把機器人對自己所在位置的判斷想像成一團模糊的雲,而不是一個清晰的點。一團又小又圓的雲,意味著機器人很自信,且在每個方向上同樣篤定。一團又長又細、還歪斜著的雲,則意味著某種更微妙的情形:機器人沿某一條線把位置摸得相當清楚,沿另一條線卻含含糊糊,而那份歪斜則說明這兩份不確定性是相互關聯的——比方說,它也許知道自己在某面牆邊的某處,卻不知道沿著牆走了多遠。共變異數矩陣恰恰就是描述那團雲的大小、形狀和歪斜的配方。對角線上的數字沿每條軸把它拉伸或壓縮;對角線外的數字則把它扭斜、壓扁,從而刻畫出那些相關性。
正是這張矩陣,讓機器人能夠誠實地推理自己知道什麼、不知道什麼,它也是卡爾曼濾波器這類濾波器背後的引擎。每做一次預測,那團雲就會脹大,因為移動會增添不確定性;每收到一次好的感測器讀數,那團雲就會縮小,因為新鮮的證據讓畫面更銳利。這個形狀甚至會告訴機器人,哪個感測器最能幫上忙——如果雲在南北方向上拉得很長,那麼一次能把「北」釘死的測量,就遠比一次把「東」釘死的測量更有價值。要是沒有這套對不確定性的記帳,機器人就會把一個胡亂的猜測和一個幾乎確定的事實當成同樣可信,它的估計很快就會土崩瓦解。
一台機器人沿著一條又長又沒什麼特徵的走廊行駛,它精確地知道自己離兩側牆壁各有多遠,卻只能含糊地知道自己沿走廊走了多遠。它的不確定性之雲是一根又長又細、順著走廊指過去的香腸——而共變異數矩陣記錄的,正是這種被拉長、且偏向一側的形狀。
共變異數矩陣編碼了機器人不確定性之雲的大小與歪斜——在它沒把握的方向上拉長,在它篤定的方向上收窄。
對角線上的項是變異數(每個變量自身的不確定性);對角線外的項是共變異數(兩個變量的誤差如何一同變動)。某個對角線外的項接近零,意味著那兩個估計大致彼此獨立。