關於神經網路參數初始化為全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 |