關於神經網路參數初始化為全0的思考
參考:為什麼神經網路參數不能全部初始化為全0?
以下內容是與憶臻討論得出。
現有神經網路表示如下:
討論的問題為,當 均賦值為0的時候,神經網路是否被訓練。下面先從公式角度思考。
首先 在前向計算時均為0,下面開始考慮反向傳播。
很容易求出來,根據矩陣求導術得出
,
,
,這裡設
為
的矩陣,
為
的向量。則由上可推出
,
,
。
當 均賦值為0的時候,
梯度不為0,故可被更新。由於
均為0,則
的梯度為0。由於
為0,則
的梯度為0。由於
的梯度為0,則
的梯度均為0,無法更新。
下面再來考慮反向傳播後的再一輪的前向計算。由上可知, 均未被更新,故全是0,
在前向計算時均為0。故反向傳播過程未被改變。所以網路僅能通過
學到一點知識。
總結一下,當 均賦值為0的時候,僅能
能被更新,
均不被更新,保持為0。
那麼如何避免這種情況?一是不將 均賦值為0,二是不使用
函數,因
為0,採用
函數。
根據上述推導,設計實驗,即使用MLP進行分詞任務。
1、激活函數使用 ,
均賦值為0。

當 均賦值為0的時候,
梯度不為0,故可被更新。由於
均為0,則
的梯度為0。由於
為0,則
的梯度為0。由於
的梯度為0,則
的梯度均為0,無法更新。
實驗代碼與結果如下:


註:由於 維度較高,故梯度sum後輸出,已驗證每一維均為0。
2、與1對比,激活函數使用 ,
不賦值為0。


3、激活函數使用 ,
賦值為0。


注意,這裡第一輪 梯度均為0,是因為
,因
為0,故前式等於0。所以
梯度均為0。由於因
有梯度,所以後一輪改變,所以以後
均有梯度。
4、與3對比,激活函數使用 ,
不賦值為0。

推薦閱讀:
※攻擊神經網路有多難?去掉一個像素就夠了
※從弱智能到強智能
※風險投資投什麼?
※透過產業AI的發展歷程,看阿里的「愚公移山」精神
※嚴肅化學
TAG:人工智慧 | 自然語言處理 | 深度學習DeepLearning |
