本文的出發點是一篇期刊論文,但集中探討的是這篇文章中不確定度估計的原理與過程,行文將與之前的文獻報告不同。
原文
Bhattacharyya A , Fritz M , Schiele B . Long-Term On-Board Prediction of People in Traffic Scenes under Uncertainty[J]. 2017.
原文的一篇重要引用文獻
Kendall A , Gal Y . What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?[J]. 2017.
關鍵詞與基礎概念:
車載視角、行人框預測、認知不確定性、偶然不確定性、采樣、伯努利分布與dropout變分推斷、蒙特卡洛積分、貝葉斯定理與貝葉斯推斷、貝葉斯網絡
近日在閱讀“Long-Term On-Board Prediction of People in Traffic Scenes Under Uncertainty”,文章所提出的模型功能是基於車載移動視角對行人框位置做出預測,並能夠同時評估兩類不確定度(模型不確定度,數據不確定度)。
對神經網絡的不確定度估計涉及較多概率論的知識,而且從理論到應用的轉化也涉及到使用近似量估計的問題,因此初次接觸這部分知識該我帶來了不小的挑戰。經過幾天的探究,還是走了不少彎路,雖說很多細節的理論推理還沒有深究,但摸清了借助貝葉斯神經網絡估計不確定度的原理和過程。你會發現,在原有神經網絡上增加不確定度估計功能,從結構上的變化看似非常簡單(只是損失函數,dropout層,輸出等已有部分的修改),但背后有很嚴密的數理邏輯驅動着。

原理簡述
不確定度雖分為兩類,一類是模型不確定性,另一類是數據不確定性,兩種不確定性所在的對象不同。利用模型預測結果的分布特點(注意是分布),可以成為測量不確定度的一種手段。
模型預測由模型生成,在給定訓練數據情況下,模型自身有后驗分布(因此用不確定度衡量)。為了得到模型預測的分布特點,由貝葉斯定理,需要邊緣化(marginalizing,旨在消除條件分布中某個變量的影響)模型的后驗分布。
從理想層面,邊緣化就是以積分形式窮盡所有模型的分布最后得到模型預測的分布,但現實層面由於深度網絡的復雜性,有兩方面不現實 - 模型表示的抽象性 & 積分操作,為了落地,在應用時,理想的“積分操作”由離散的采樣操作代替(因為我們最終不需要預測分布的完整描述,只需方差即可,而基於dropout的采樣方式被證明可以求出方差)。
理想的模型分布是無法滿足采樣需求的,因此需引入近似模型分布的可采樣的分布,新引入的分布由諸多參數決定着,要想近似原模型分布必須要進行參數調整,一種方法是最小化近似分布和原分布的KL散度指標,而這恰好是一個帶有明確目標函數的優化任務。至此,對預測分布求解實現了從理論的邊緣化操作到實際的優化操作(可通過反向傳播)+采樣的轉換。
模型規范
該部分簡單介紹期刊文章的模型框架,旨在為后文不確定性公式推理建立規范和基礎。
模型介紹
車載視角的行人軌跡預測需要考慮兩個重要方面,一是行人的軌跡,二是車輛的里程計(速度和轉向角)。為此模型專門設計了兩條序列流負責這兩個方面特征:
- 里程計預測流:圖中下部分模型,整體很常規,是一個seq2seq結構。由視覺信息和已知里程計信息進過編碼形成特征向量\([v_{vis},v_{odo}]\),再由解碼器解碼,形成對里程計信息的預測。
- 行人框預測流:圖中上部分模型,從整體框架上也是seq2seq結構,但很多細節上的改動使其成為了貝葉斯神經網絡。編碼器編碼經過嵌入的行人框信息和里程計信息形成\(v_{bbox}\)特征向量,解碼器每步輸入[特征向量,由里程計流預測的里程計],得到行人框預測和數據不確定度的方差(注意數據不確定度只是我們要求的不確定度的一部分)。

規范
-
里程計:\(o^t = (s^t,d^t)\)表示速度和轉向角,\(O_p=[o^{t-m},...,o^{t}]\)表示已知里程計信息,\(O_f=[o^{t+1},...,o^{t+n}]\)表示里程計流預測的里程計。
-
行人框:\(b_i^t = \{(x_{tl},y_{tl}),(x_{br},y_{br})\}\),\(B_p = [b_i^{t-m},...,b_i^{t}]\)表示已知行人框信息,\(B_f=[b_i^{t+1},...,b_i^{t+n}]\)表示預測的行人框。除此之外,還有\(\sigma_x,\sigma_y\),這些是在假設模型觀測噪音為高斯分布后所設立的(后文會介紹)
-
預測分布:最終所求不確定性所依賴的預測分布具體指的就是\(B_f\)的后驗分布。
-
\(B_f\)是行人框預測流輸入\(B_p,O_p,O_f\)所產生的,因此\(B_f\)的后驗分布可以寫成:
\[p(B_f|B_p,O_p,O_f) \] -
當然,若考慮由數據庫真值\(\{X,Y\}\)推斷出模型的概率分布\(p(f|X,Y)\)(f是模型),\(B_f\)的后驗分布更准確地寫成:
\[p(B_f|B_p,O_p,O_f,X,Y) \]
-
不確定性估計
不確定性分類
在貝葉斯模型中,有兩類主要的不確定性:模型不確定性和數據不確定性。
- 模型不確定性(又稱認知不確定性,epistemic uncertainty):
- 主要代表模型參數的不確定性,這種不確定常常來自於我們對收集的用於訓練數據的無知(Ignorance),例如當數據集中缺乏某類數據時,模型中對應處理這種場景的參數的不確定性就變大了,結果就是,如果測試時給一個這類的數據,模型表現可能很差。
- 模型不確定性在現有諸多的深度神經網絡中都沒有被考慮,因為推理預測的后驗分布過於困難,變分推理(Variational Inference)是一種流行的方法,其目的在於使用已有的數據樣本,驅動簡化版的分布去擬合真實的后驗分布,而這個擬合指標通過變換某些無法求出的分布,從而變得可以計算。Gal等人發表的論文顯示,在神經網絡上的帶dropout訓練過程可被理解為以Bernoulli為假設分布的變分分布擬合過程。(當然,若要達到擬合效果,損失函數等結構都要調整,這篇文章也正是基於此。)
- 模型不確定性可以被消除:通過增大數據集。
- 數據不確定性(又稱偶然不確定性,aleatoric uncertainty):
- 數據不確定性主要是觀測噪音,如傳感器噪音或者動作噪音。數據不確定相較模型不確定性在神經網絡運用更多,通過分析輸出的分布,可以評估該類不確定性。例如之前提到的Social LSTM模型,輸出是二維位置高斯分布的五個參數\((\mu_1, \mu_2,\sigma_1,\sigma_2,\rho)\),通過預測這五個參數就反映了數據不確定性。
- 數據不確定性不可以被消除。
- 文章的一篇重要引文用了”formalize“來表示對於這兩類不確定性的定義:模型不確定制定在參數的分布上,通過先驗分布預設模型,在給予一些訓練數據后觀察這個分布的變化;數據不確定性制定在輸出的分布上,通過分析不同輸入對應輸出的方差。根據筆者來看,文章最終在估計這兩類不確定性時,只有數據不確定性按定義來的,模型不確定性的估計文章通過Gal. 等人的結論成功轉移到了估計輸出分布上。
下圖是一個逐像素級別的不確定度估計,應用場景是CV常見的semantic segmentation。

不確定性估計的過程(結合本文情景)
根據之前不確定性的分類介紹,我們也可以大致感受到需要重點考慮的模型不確定性,因此文章中也花大篇幅來講這個方面。
模型不確定性
Part1 - 用簡化分布擬合真實模型分布
模型不確定性可通過模型的預測分布來求得,具體來說就是預測分布的方差。要得到預測結果的后驗分布,由貝葉斯定理,我們可以這樣求出:
這其實就是考慮模型\(f\)的所有情況,而后將\(f\)的每種情況經\(\{X,Y\}\)推理出的后效概率乘以在該情況下預測的分布,將所有情況累加起來就是預測分布。
但是,理論很豐滿,現實很骨感,看看這個式子就知道實際操作是不現實的,主要有\(f\)代表的模型表述抽象和積分操作難達成兩個方面的問題。因此,在實際操作時模型做了簡化:
-
簡化一 - 將抽象的模型\(f\)用模型中有限的參數\(w\)表示:
\[p(B_f|B_p,O_p,O_f,X,Y)=\int p(B_f|B_p,O_f,O_p,w)p(w|X,Y)dw \] -
簡化二(基於簡化一) - 將不可求的\(p(w|X,Y)\)分布用簡化的伯努利分布\(q(w)\)代替,使得dropout采樣操作能夠順利進行(采樣稍后要用到,本質是用離散的數據點去近似求積分):
\[p(B_f|B_p,O_p,O_f)=\int p(B_f|B_p,O_p,O_f,w)q(w)dw \]*由於\(\{X,Y\}\)實際上是籠統指代,在實際問題中\(X={B_p,O_p,O_f},Y={B_f}\),因此最后寫成的條件概率表達式也省略了這個部分。
- 注1:簡化一的結果中,$p(w|X,Y)={p(Y|X,w)p(w) \over p(Y|X)} $,但是p(Y|X)是不能得到的,因此須用簡單分布擬合。
- 注2:伯努利變換分布的定義式為\(q(W_k)=M_k \centerdot diag([z_{i,j}]^{C_k}_{j=1})\),左邊是近似分布\(q(w)\)的所有可變參數形成的矩陣,右邊是個僅有0,1的對角陣(由伯努利二元分布生成)。兩者做矩陣乘法,相當於以伯努利分布的將矩陣中的某些列置零。
Question - 為什么采用伯努利分布?
如果再仔細觀察一下\(q(W_k)=M_k \centerdot diag([z_{i,j}]^{C_k}_{j=1})\)這個定義的簡單分布,若將\(M_k\)等價於模型中原有的權重矩陣,那么這個分布在采樣(sample,在連續的分布上采樣,從而產生樣本點)實際上和機器學習中流行的dropout層概念是一致的,將某列指令表示將該神經元失活。
事實上,當把這個分布落實到本文中RNN的Encoder和Decoder上時,這是這樣操作的。
Part2 - 僅需預測分布的方差?用采樣替代積分吧!
Part1中的預測分布經多次簡化后最后得到式子如下:
可以看到,公式中還是存在積分運算,要實際使用還是有困難。不過,我們獲取預測分布的目的是用分布方差代表模型不確定,要估計方差不需要大費周章地用積分把整個分布求出來,僅需采樣一定規模的樣本點就可以估計。
\(p(B_f|B_p,O_p,O_f)\)的具體采樣過程:在伯努利分布的\(q(w)\)采樣得到\(w\)的樣本\(w^t\),再用\(w^t\)所代表的模型生成預測\(b^t\),\(b^t\)即為預測分布的一個采樣樣本點。因此對預測分布的采樣是通過對\(q(w)\)采樣間接實現的。(合理性在總結部分有說明原因)
假設采樣了T次,最終預測分布的方差:
用方差代表不確定度對模型進行評估已經屬於訓練后的測試階段,是\(q(w)\)中參數已經優化好后的行為(因為這樣才能代表原始的\(p(f|X,Y)\))。
而在伯努利分布上采樣其實就是dropout操作,但此時dropout是在測試階段使用的,並且目的與傳統的防止過擬合也不同了。
Part3 - 簡化分布中參數的優化
Part1中定義的伯努利變換\(q(w)\)是具有參數的,參數恰當,\(q( w)\)才能是\(p(w|X,Y)\)的恰當估計。因此我們還需要根據評價指標對其中的可變參數\(M_k\)進行優化,KL散度是評價真實分布和擬合分布相關性的指標,當完全擬合時為零。
文章中對KL散度進行了演算,最后得到的右邊部分(演算過程我沒有深究):
*\(\propto\)代表成比例,演算將原KL散度轉換成了兩部分:\(q(w)\)與先驗分布的散度、與數據有關的負似然部分。
如果我們將KL散度推導式作為目標函數進行神經網絡訓練,那么在右邊部分我們還是可以看到有對\(w\)的積分,在實現時,我們使用蒙特卡洛積分替代原有積分,其本質也就是以一定策略根據多次對\(w\)采樣估計出積分的大小。同時我們假設模型預測噪音呈現4-D的高斯分布,\(N(b_i^t,\Sigma_i^t)\)(其中\(\Sigma_i^t\)是\(diag(\sigma_x^t,\sigma_y^t,\sigma_x^t,\sigma_y^t)\)的對角矩陣)。
-
KL推導式負似然對數部分:通過解析模型輸出得到高斯分布的參數\((b_i^t,\Sigma_i^t)\),使用PDF算法就可以求出(log和PDF公式中的e指數抵消了)。
-
KL推導式函數的KL散度部分:當權重參數的先驗分布是均值為0的高斯分布時,KL散度恰好對應就是L2正則化。
-
相比KL推導式,目標函數新增的:\(log(\hat \sigma_i^2)\)這部分是新提出的,為了防止模型把方差\(\Sigma_i\)弄得巨大以至於負似然對數部分的損失變為0了。
針對本文的實際場景,最終模型的優化目標就是:
\[Loss = {1 \over 4N}\Sigma^N_i \Sigma^n_j||\hat b_i^{t+j}-b_i^{t+j}||^2_2(\hat \Sigma _i^{t+j})^{-2}+\lambda \Sigma_W||W_k||_2+log(\hat \sigma_i^2) \]
參數優化屬於訓練部分,而估計積分大小時對\(w\)進行了采樣,采樣操作其實又dropout操作,但此時dropout的目的不在於防止過擬合,而是采樣。
Question - Dropout 辨析
至此,本文模型中對於dropout操作的辨析有兩個方面:
- 測試階段和訓練階段dropout均要使用,目的是對模型參數的伯努利分布進行采樣,但是訓練是為了蒙特卡洛積分以估計連續積分,而測試是估計模型不確定性。
- 本文兩處使用dropout的目的與傳統避免過擬合的目的是不同的。
數據不確定性
相比模型,數據不確定性的估計在神經網絡中見得更多(例如Social LSTM的二維高斯分布假設),本文也沿用這樣的方式,假設RNN解碼器輸出的數據滿足4-D高斯分布,通過解析這些數據得到高斯分布的參數\(N(b_i^t,\Sigma_i^t)\)(和上文所假設的一致),那么數據不確定性就可被視作:
*T是在估測模型不確定性時的采樣次數
與模型不確定性的評估方式不同,我們是直接讓模型輸出數據不確定性,而不是分析同一組輸入經多個模型樣本得到的輸出的統計性質。
Question - 方差預測並沒有對應的label進行監督,在訓練時又是如何引導模型正確估計方差的呢?
請看上文中的Loss函數定義,與輸出方差有關的有:\((\hat \Sigma_i^{i+j})^{-2}\)和\(log(\hat \sigma_i^2)\)。現在不妨將其方差的意義抹去,只看做輸出的一個參數:
- 首先,上述該參數有關的兩部分互相牽制,限制參數在一個合理區間上(不會過大或過小)。
- 其次,\((\hat \Sigma_i^{i+j})^{-2}\)要實現的功能是令Loss函數加重對某些性質數據的關注,同時減小對某些性質數據的關注,從認知角度上來說,置信度高(噪音低)的更應該被關注,因為這樣使得Loss函數對噪音更優抵抗力,因此該參數被訓練成表示噪音高低,這恰好與方差的意義對應上了。
*上述這些在論文中都是在實驗完成后基於概率論理論進行的后驗解釋。
不確定性合計
由不確定性的計算:通過輸入含有觀測噪音的數據,透過在模型分布上多次采樣得到的模型樣本,得到輸出的樣本,這些樣本所在的分布主要由數據和模型分布所決定的,通過分析樣本分布的特點,就綜合得到了數據和模型的分布特點,進而得到兩類不確定性。
總結與心得體會
閱讀了部分參考文獻,看了許多與貝葉斯網絡和概率論相關的博客,感覺對文章中一些理論理解還是比較模糊,主要還是由於這個方面的基礎知識比較欠缺,許多概念和約定意義都不了解。不過,現階段對“不確定性”估計還是有些體會(也許是錯誤的),寫在這里:
-
不確定性-犯罪者?受害者?傷害評定?:
- 造成兩種不確定性的根本來源都是數據,一種靠大數據可以被消除,另一種不可被消除。
- 兩種不確定性所存在的對象(受害者)是不同的,偶然不確定性存在對象是數據本身(由觀察限制導致的噪音),認知不確定性存在的對象是模型的參數。
- 要得到最准確不確定性的方式就是評估不確定性所在的對象本身(模型/輸入數據),但從現實情況看,這種理想方式是不可行的,因此,選擇從其他方面進行評定:Gal and Ghahramani 在2016年證明如果在推理時(也就是訓練之后)打開dropout並進行相關操作,就可以充當認知不確定性測量工具;對於偶然不確定性,我們通過觀察不同輸入對應的輸出分布進行判斷,令模型自主習得方差的估計。
-
貝葉斯神經網絡:傳統意義上的神經網絡中,我們研究的是權重的值,並根據訓練數據\(\{X,Y\}\)進行優化;而在貝葉斯神經網絡中,我們研究的是權重的分布,一個貝葉斯網絡可以被等價視為無限個同結構的傳統神經網絡,並且伴隨着由\(\{X,Y\}\)所決定的概率分布。
-
本文行人框流模型的實質:一個帶有dropout層的貝葉斯神經網絡框架,實現從輸入數據到行人框、方差(偶然不確定性)的映射功能,並完成認知不確定性的近似。
-
神經網絡的兩類優化目標:根據是否了解神經網絡參數有的先驗概率,我們將神經網絡優化策略分為Maximize Likelihood Estimation(最大化似然估計)和Maximize Aposteriori Estimation(最大化后驗概率估計)。可以形象地理解為,在優化參數時,MLS將力求做到對於訓練數據中的\(\{X,Y\}\),輸入X模型將力求輸出為Y的概率為最大,而MAP除了考慮數據以外,其還要考慮參數的先驗分布;MLS純粹地數據依賴性使得在你不清楚模型在做什么的情況下都能做出預測結果,但是弊端很明顯在於數據的質量,例如小樣本的投硬幣實驗很可能使得模型對投硬幣概率做出錯誤的估計。
-
\(KL(q(w)||p(w|X,Y))\)通用化簡過程:
友情鏈接:重要的學習資料。同時,在學習過程中走了不少彎路,但覺得有些彎路還是值得記下來以備后續使用的。
- 不確定性類別介紹 - 評估方法 - 推薦系統應用 Taboola工程師博客三連發:
- 概率論基礎概念博客系列 - “極大似然估計” :鏈接
- 概率論基礎概念博客系列 - “貝葉斯推理”:鏈接
- 概率論基礎概念博客系列 - “邊緣化”:鏈接
- SegNet——一個用dropout采樣模型分布計算語義分割不確定度的經典模型:鏈接
- 如何使用dropout預測不確定的實操過程:鏈接
- 變分推斷(Variational Inference)——用簡單分布逼近真實分布的數學推導:鏈接
說在最后,本文是筆者第一次接觸貝葉斯網絡與相關的概率論知識,縱使查閱諸多資料,但短時間內對該部分內容掌握通透還是不現實,文中也可能存在一些錯誤和理解偏差,敬請讀者閱讀時多加留意和思考,也歡迎指出文章中的問題。