什么時候可以將神經網絡的參數全部初始化為0?


用SGD訓練神經網絡時, 怎樣決定初始化參數的方式? 主要有兩個考慮點: 一: 最終是否能得到想要的學習結果, 即是否能得到一個符合預期目標的分類器;二: 訓練時間, 好的參數初始化可以有效縮短訓練時間, 如預訓練.

不加思考時, 將所有參數都初始化為0是最省力的做法. 有些情況下可行, 但大部分情況下會導致學習失敗, 得不到可用的模型.

先看最簡單的例子: 用邏輯回歸算法識別手寫數字MNIST. 邏輯回歸模型可以算作為一個Single-Layer Perceptron(SLP):

  • \(28\times 28 = 784\)個輸入單元, 激活函數為\(identity\)
  • 10個輸出單元, 激活函數為\(softmax\)
    它由兩組參數組成: \(W\)\(b\), 前者是一個\(10 \times 784\)維的權值矩陣, 后者是長度為\(10\)的bias 列向量.
    現將它們全部初始化為0,分析一下學習過程:
  • 第一次forward過程中, 輸出層的所有輸出為0.5. 反向時, 如之前描述輸出層神經元的敏感度為輸出值與目標值的差值: \(\delta = a - y\). 假如\(y_i = 1\), 即輸入\(x\)對應的數字為\(i\), 那么除了第\(i\)個神經元的敏感度為\(-0.5\), 其它神經元都為\(0.5\). \(w_{ij}\)的梯度值\(\Delta w_{ij} = \delta_i x_j\), 由於輸入向量\(x\)的元素之間的不同, 最終得到的10個梯度值有很大概率是不同且非0的, 所以第一次BP過程可以取得成效並將一些\(w\)和所有的\(b\)變成非0值.
  • 於是, 后面的訓練顯然也可以順利進行.

可以看出, 沒有隱層時, 可以將所有的參數初始化為0.

如果有隱層呢?

對於隱層使用了ReLU: \(f(net) = max(0, net)\)為激活函數的MLP, 除了輸入層的輸出值為\(x\)本身, 不為0, 其余的所有層的輸出都為0. BP時所有梯度也都為0, 包括輸出層. 這意味着所有的非輸入神經元都是dead neurons. 學習失敗.

假如為使用了sigmoid激活函數呢? 可以推測:

  • 第一個BP過程

    • 輸出層的第\(i\)個神經元的敏感度與其他9個不同
    • 隱層所有的神經元的敏感度和權值梯度都相同, 但權值梯度為0
  • 然后第二次BP時:

    • 隱層所有的神經元的敏感度仍然相同, 所有權值的梯度仍然相等但非0.
  • 最后學習得到的模型中, 所有的隱單元都是相同的. 學習失敗.

其他的激活函數如tanh應該也是類似的情況.
所以, 最后的結論是, 一般只在訓練SLP/邏輯回歸模型時才使用0初始化所有參數., 更實用的結論是, 深度模型都不會使用0初始化所有參數.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM