神經網絡的權重初始化( Weight Initialization for Deep NetworksVanishing / Exploding gradients)
理想的權重矩陣既不會增長過快,也不會太快下降到 0,從而訓練出一個權重或梯度不會增長或消失過快的深度網絡。
有一個神經元的情況 :
暫時忽略b:
$z = {w_1}{x_1} + {w_2}{x_2} + ... + {w_n}{x_n}$為了預防 z值過大或過小,你可以看到 n越大,你希望${w_i}$越小,因為 z是${w_i}{x_i}$的和如果你把很多此類項相加,希望每項值更小,最合理的方法就是設置 ${w_i} = \frac{1}{n}$,n表示神經元的輸入特征數量,實際上,你要做的就是設置某層權重矩陣:
${n^{[l - 1]}}$就是我喂給第l層神經單元的數量(即第l-1層神經元數量)。
如果激活函數的輸入特征被零均值和標准方差化,方差是 1, z也會調整到相似范圍,這就沒解決問題(梯度消失和爆炸問題)。 因為它給權重矩陣 w設置了合理值,你也知道,它不能比 1 大很多,也不能比 1 小很多,所以梯度沒有爆炸或消失過快。
如果你想用 Relu 激活函數,使用如下公式:
如果使用 tanh 函數 ,使用如下公式:
所有這些公式只是給你一個起點,它們給出初始化權重矩陣的方差的默認值,如果你想添加方差,方差參數則是另一個你需要調整的超級參數 ,例如給公式
增加一個乘性系數,進行調優。
有時調優該超級參數效果一般,這並不是我想調優的首要超級參數,但我發現調優過程中產生的問題,雖然調優該參數能起到一定作用,但考慮到相比調優,其它超級參數的重要性,我通常把它的優先級放得比較低。