一個你早就訓練好的後驗
進入貝氏深度學習最不痛的方法,幾乎不花額外成本。如果你的網路已經用 dropout 做正則化,蒙地卡羅 dropout做的就只是在測試時把 dropout 留著開,然後把網路跑好幾次。每一次都隨機把不同的一組單元歸零,所以每一次實際上都是一個不同的子網路——把它們的預測平均起來、用散布當作你的不確定性,結果竟然就近似了在權重上的變分推論。
MC-dropout 的预测分布只是对开启 dropout 的 T 次随机前向传播取平均。
繞著 MAP 的高斯
拉普拉斯近似採取相反的事後立場:照常把你的網路訓練到一個 MAP 解,然後用損失的局部曲率——海森矩陣,實務上用費雪資訊或高斯-牛頓矩陣近似——在它周圍配一個高斯後驗。曲率陡,代表那個權重被良好決定(低變異數);曲率平,代表它約束不足(高變異數)。你幾乎是免費地從一個你已經有的模型上得到不確定性。
拉普拉斯近似在 MAP 处拟合一个高斯分布,其协方差等于负对数后验的海森矩阵之逆。
整場賽局就是讓那個海森矩陣負擔得起。完整矩陣的大小是權重數的平方,所以大家限制它:對角、每層 Kronecker 分解(KFAC)區塊,或——最實用的——只對最後一層做拉普拉斯。最後一層拉普拉斯之所以成為首選配方,正因為它便宜、事後、且在加上真正的不確定性的同時,完全不動你訓練好模型的預測。
強得讓人尷尬的基線
深度集成看起來幾乎不像貝氏:把同一個架構用不同隨機種子訓練好幾次,然後平均。因為損失地景佈滿了不同的盆地,不同種子會落在真正不同的函數上;它們同意之處你就信任預測,它們分歧之處變異數就把它標記出來。在一個又一個基準上,少數幾個獨立訓練的網路,在準確率與校準上都勝過遠為精巧的單模型貝氏方法。
交互式梯度下降沿损失曲面滚向盆地的极小值。
它「真的」是貝氏嗎?一種誠實的讀法是:集成的那些種子,是後驗在函數上的粗糙樣本——是一個單一平均場高斯永遠到不了的不同峰。這層與集成學習的連結,正是為何集成設定了知識方法必須跨過的門檻。它的成本是顯而易見的缺點:N 倍的訓練與 N 倍的記憶體——這也催生了下面那些更便宜的把戲。
只在關鍵處做貝氏
一個反覆出現的洞見:網路的表達力大半在它的特徵裡,但它的不確定性大半能在頭部被捕捉。最後一層線性模型就照這個做——把深度網路當特徵抽取器訓練好,然後只在最後一層上放一個正規的貝氏線性模型(或一個高斯)。貝氏線性回歸有封閉形式,於是你在學到的深度特徵上得到快速、有根據的不確定性,而完全不必對底下數百萬權重做積分。
神经线性模型固定特征,只在最后一层权重上做精确的贝叶斯线性回归。
證據式深度學習是其中最激進的捷徑:訓練網路在單一次前向傳遞中,輸出一個高階分布的參數(類別機率上的 Dirichlet,或回歸目標上的 normal-inverse-gamma)。那個分布的寬度就直接回報不確定性——不取樣、不集成。它快得漂亮,但這份優雅藏著陷阱:它回報的不確定性在分布外可能根基薄弱、且對正則化項敏感,所以在你倚賴它之前,務必狠狠地驗證它。
實務上的取捨
- 需要一個強預設、又付得起算力?5 成員深度集成就是參照;要在準確率與校準上同時打敗它並不容易。
- 已經訓練好一個模型、想事後加上不確定性?加最後一層拉普拉斯或最後一層線性——不必重訓,預測不變。
- 已經用了 dropout、想要免費基線?把 MC-dropout 打開——但只相對地信任它的不確定性,並檢查它在離資料很遠時不會壓平。
- 延遲或記憶體預算很緊、只能一次前向傳遞?試試證據式模型——然後在上線前,對抗性地驗證校準與分布外行為。