對於權重初始化的研究

2021-09-13 18:38:12 字數 898 閱讀 3137

權重初始化對於神經網路來說十分重要,乙個好的權重初始化的方法能夠幫助神經網路更快的找到最優解決方案。之前在tensorflow的基本使用(1)-建立簡單神經網路這篇筆記中提到使用截斷正態分佈的方法隨機初始化權重,在學習了weight initialization這門課後有了更直觀的理解。

按照一般思路和做法,會把權重全都初始化為1或0,這樣看似沒有問題,但在神經網路中卻會出現大問題。

當每層的權重全部初始化為0或1時,神經網路的每個單元計算z[l] = w[l]x + b[l]都為一樣的值。計算反向傳播時,每個梯度也都為一樣的值。所以最後更新得到的權重也是一樣的值。當所有的特徵輸入配與的權重都是一樣大小的的時候,神經網路就不能學到哪些特徵是重要的,哪些特徵是不重要的。也就不知道哪些權重需要更新。對於深層神經網路來說,這樣初始化的話,會造成深層並沒有意義,反而會比不上線性分類器的效果。

實驗初始化全為0或1時得到的結果如下圖所示,全0的情況下損失雖然低但驗證準確率也是很低的。全1的情況下損失很大驗證準確率也不高。

為了避免上述每個特徵配與相同的權重情況。現在為每個特徵配與獨一無二的權重,讓網路自己學習哪些特徵是重要的,哪些特徵是不重要的。用統計學上的均勻分布可以使產生的權重取值每個都不一樣。

上面嘗試的權重初始化方法都是在權重的取值要靠近0而不能太小的方向上進行著。正態分佈正好符合這個方向,其大部分取值靠近0。

下面是採用截斷正態分佈取值與採用正態分佈取值的結果對比,兩者的結果也很接近,截斷正態分佈方法略好一點。

在焦慮的時候 ,學習就對了。

2016 3 25 初始化權重

初始化權重 在網路的初始時刻,如果神經元的權重都是隨便初始化的,那麼啟用的下一層的神經元的均值尾 0,但是方差就是巨大的,這會導致 neural saturation 的情況,所以在初始化的時候就根據神經元的聯入的樹木來進行計算,使得最後基本上 w的求和之後的結果均值為 0,方差為1.所以初始化權重...

pytorch 關於權重(初始化 固定)

emb那種可以直接from pretrained 利用requires grad false,這樣只是不更新,但是還是會計算並占用視訊記憶體 class net nn.module def init self super net,self init self.conv1 nn.conv2d 1,6,...

keras之權重初始化方式

在神經網路訓練中,好的權重 初始化會加速訓練過程。下面說一下kernel initializer 權重初始化的方法。不同的層可能使用不同的關鍵字來傳遞初始化方法,一般來說指定初始化方法的關鍵字是kernel iniwcoyfwsjtializer 和 bias initializer model.a...