1. 程式人生 > 其它 >隨機初始化(Random+Initialization)

隨機初始化(Random+Initialization)

隨機初始化(Random+Initialization

當你訓練神經網路時,權重隨機初始化是很重要的,如果你把權重或者引數都初始化為 0,那麼梯度下降將不會起作用,是如果你這樣初始化這個神經網路,那麼這兩個隱含單元就會完全一樣,因此他們完全對稱,也就意味著計算同樣的函式,並且肯定的是最終經過每次訓練的迭代,這兩個隱含單元仍然是同一個函式,令人困惑。因此,應該這麼做:w[1] np.random.randn(2,2)(生成高斯分佈),通常再乘上一個小的數,比如 0.01,這樣把它初始化為很小的隨機數。然後b沒有這個對稱的問題(叫做 symmetry breaking problem),所以可以把

b 初始化為 0,因為只要隨機初始化w你就有不同的隱含單元計算不同的東西,因此不會有 symmetry breaking 問題了。相似的,對於w[2]你可以隨機初始化,b[2]可以初始化為 0

這個常數從哪裡來,為什麼是 0.01,而不是 100 或者 1000,我們通常傾向於初始化為很小的隨機數,事實上有時有比 0.01 更好的常數,當你訓練一個只有一層隱藏層的網路時(這是相對淺的神經網路,沒有太多的隱藏層),設為 0.01 可能也可以,但當你訓練一個非常非常深的神經網路,你可能會選擇一個不同於的常數而不是 0.01

本文來自部落格園,作者:zhang-X,轉載請註明原文連結:https://www.cnblogs.com/YY-zhang/p/15057971.html