偷偷在取樣的 SGD
變分方法近似後驗;馬可夫鏈方法取樣後驗,而完整貝氏的主力——MCMC——對深度網路通常慢得不切實際。隨機梯度朗之萬動力學(SGLD)是那道橋:照常走一步 SGD,但每次更新都加上一劑精確縮放的高斯雜訊。配上遞減的步長,那條帶雜訊的軌跡就不再像「收斂到一點的最佳化器」,而開始像一個取樣器,它走訪過的權重就是後驗的抽樣。
for batch in data: # SGLD update
g = grad_log_posterior(w, batch) # gradient of log p(w|D), minibatch-scaled
noise = sqrt(2 * lr) * randn_like(w)
w = w + lr * g + noise # SGD step + Langevin noise
if past_burnin: samples.append(w.clone()) # collect posterior draws交互式马尔可夫链按转移概率在状态间跳转。
美在於你保住了 SGD 的小批次可擴展性,同時得到一條後驗樣本鏈;頭痛在於混合——深度後驗是多峰的,單一條鏈只探索鄰近的幾個盆地。現代隨機梯度 MCMC 加入動量、用循環步長在峰之間跳躍、以及預條件化,但對一個深度網路做誠實的多峰取樣,仍然是真正的難題。
你真正要的:模型平均
不論你的權重樣本來自流、集成、拉普拉斯,還是 SGLD,回報都是同一個動作:貝氏模型平均。別挑單一個最好的網路——把所有後驗樣本的預測平均起來,各依其後驗機率加權。這就是貝氏對「過度擬合到單一解」的回答:預測在資料留下的每一個合理模型之間做避險,而避險本身、樣本之間的分歧,就是你的知識不確定性。
贝叶斯模型平均在后验上对预测做积分,用权重样本的预测取平均来近似。
躍向函數空間
權重空間貝氏有個不出聲的醜聞:我們為「權重上的先驗」苦惱不已,但沒有人對「權重上的高斯先驗,對網路能表示的函數意味著什麼」有任何直覺。兩個截然不同的權重向量可以編碼同一個函數;一個整齊的權重先驗,可能蘊含一個古怪的函數先驗。函數空間推論繞過這點:把先驗放在、並把推論做在,直接的函數上——也就是你真正在乎的那個預測對象。
標準的函數空間先驗是高斯過程:一個函數上的先驗,其行為由核函數設定,並給出精確的後驗不確定性,會在你離開資料時平滑地增長——正是權重空間平均場難以產出的性質。那道深刻的連結,神經正切核,證明了一個無限寬、用梯度下降訓練的網路就是一個帶特定核的高斯過程,使高斯過程不是深度網路的對手,而是它在寬極限下的影子。
高斯过程把先验直接放在函数空间:任意有限点集都服从以核函数为协方差的联合高斯分布。
深度核:兩邊的精華
高斯過程有有原則的不確定性、卻特徵薄弱;深度網路有豐富特徵、卻不確定性搖晃。深度核學習把兩者聯姻:把你的輸入餵過一個神經網路,然後在學到的表示之上放一個高斯過程核。網路學「哪些點相似」;高斯過程在那個學到的幾何上供應校準過的不確定性。它在精神上,就是指南 3 那個最後一層線性的想法,被升級成一個完整的非參數頭部。
冷後驗之謎
現在來一個令人不安的經驗事實。在深度網路裡,真正的貝氏後驗往往不是最佳預測器:把後驗升到大於一的次方——把它銳化、讓質量集中在峰附近——你反而得到更好的準確率。這個冷後驗效應很尷尬,因為若貝氏被完美設定,溫度為一的後驗才應該是最佳的。它不是,這就告訴我們有什麼被設定錯了。
对后验取 1/T 次幂得到的回火后验;冷后验效应指温度小于一时往往预测更好。
主要的嫌疑犯:在權重上模糊、又與好函數嚴重不匹配的先驗;資料增強與標籤雜訊實質上改變了概似的溫度;以及取樣後驗的方式中,小批次/曲率所引入的人為偽影。冷後驗是一個健康的提醒:貝氏深度學習是一個近似的堆疊——先驗、概似、推論全都不完美,而溫度那個旋鈕,正悄悄地一次吸收了這三重不匹配。