在實踐中如何實現神經網絡參數的先驗分佈?
我讀過一些論文,其中提到使用標準正態分佈作為深度神經網絡參數的先驗分佈或使用具有一些可配置方差的正態分佈。但到目前為止,我找不到有關如何在實踐中實際實施的信息。在我的幼稚理解中,對於 DNN 中的每個參數,我會以張量的形式從正態分佈中抽取樣本,其維度與 DNN 參數的維度相匹配。這是在實踐中通常是如何完成的,如果不是應該如何實現先驗 DNN 參數?
因為到目前為止我找不到任何示例實現樣本正態分佈來設置 DNN 參數。例如,本文提到“參數的先驗設置為 p(θ)=N(0,σ2I) “, 在哪裡 σ2 默認情況下設置為 1,在其中一個實驗場景中設置為 100。但是我在該論文的官方源代碼中的任何地方都找不到任何從正態分佈樣本來設置 DNN 參數的東西。
我還隱約記得閱讀過關於在 DNN 中以正則化項或權重衰減的形式實現的先驗,但找不到任何關於正則化或權重衰減如何映射到在參數上實現正態分佈的解釋,即正則化或權重衰減公式如何如果我事先增加正態分佈的方差,應該改變。
網絡權重的零均值、各向同性多元高斯先驗 θ 減少到對 L2 參數向量上的範數 θ .
找到後驗的MAP估計減少到最大化概率 p(y|x)=p(y|x,θ)p(θ) ,這相當於最小化相同的負對數: p(y|x)=p(y|x,θ)p(θ) −lnp(y|x)=L(y|x,θ)−lnp(θ) =L(y|x,θ)−ln[(2π)−k2det(Σ)−12exp(−12(θ−μ)TΣ−1(θ−μ))] =L(y|x,θ)+12θT(σ2I)−1θ+C =L(y|x,θ)+σ−22θTθ =L(y|x,θ)+λ2|θ|22
在哪裡 L(y|x,θ)=−lnp(y|x,θ) 是您的損失函數(例如均方誤差或分類交叉熵損失),給定模型的負對數似然,參數 θ , 和數據 (x,y) .關於這個推導的一些注意事項:
- 最後一行進行替換 σ−2=λ 並將懲罰寫為規範,以使與嶺回歸的聯繫更加明顯。
- 我們可以忽略常數加法項 C=−12(kln(2π)+ln|Σ|) 因為他們不依賴 θ ; 包括它們會改變極值的值,但不會改變它的位置。
- 這是作為關於任何損失的一般性陳述 L 可以表示為概率的負對數,因此如果您正在研究分類問題、回歸問題或任何被表述為概率模型的問題,您只需將適當的表達式替換為 L .
當然,如果您對貝葉斯方法感興趣,您可能不希望僅僅局限於模型的 MAP 估計。Radford Neal 研究了一些利用後驗分佈的方法 θ 在他的《*神經網絡的貝葉斯學習》*一書中,包括 MCMC 來估計神經網絡。自出版以來,可能還有更多的作品將這些概念推得更遠。
人們可以直接優化這種增強的損失函數。或者,它可以在訓練期間作為*權重衰減來實現;*例如,PyTorch 就是這樣做的。您可能希望將權重衰減作為優化器的一個組件來實現(而不是僅在正則化損失上使用 autograd)的原因是梯度更新看起來像
θi+1=θi−η∂∂θ[L+λ2|θ|22] =θi−η∂L∂θ−ηλθi =(1−ηλ)θi−η∂L∂θ
在哪裡 θi 是參數向量 i 優化步驟和 η 是學習率。但是當使用自適應優化器(例如 Adam)時,權重衰減的效果略有不同;請參閱 Ilya Loshchilov 和 Frank Hutter 的“解耦權重衰減正則化”。