1. 程式人生 > >[keras] 初始化/檢驗每層初始化權重

[keras] 初始化/檢驗每層初始化權重

如果引數初始化不正確,那整個訓練過程會越來越慢,甚至直接停掉。不過我們可以很容易發現這個問題。表現最明顯的資料是每一層的激勵和梯度的方差(波動狀況)。舉個例子說,如果初始化不正確,很有可能從前到後逐層的激勵(激勵函式的輸入部分)方差變化是如下的狀況: 我們用標準差為0.01均值為0的高斯分佈值來初始化權重(這不合理)

Layer 0: Variance: 1.005315e+00
Layer 1: Variance: 3.123429e-04
Layer 2: Variance: 1.159213e-06
Layer 3: Variance: 5.467721e-10
Layer 4: Variance: 2.757210e-13
Layer 5: Variance: 3.316570e-16 Layer 6: Variance: 3.123025e-19 Layer 7: Variance: 6.199031e-22 Layer 8: Variance: 6.623673e-25

大家看一眼上述的數值,就會發現,從前往後,激勵值波動逐層降得非常厲害,這也就意味著反向演算法中,計算回傳梯度的時候,梯度都要接近0了,因此引數的迭代更新幾乎就要衰減沒了,顯然不太靠譜。我們按照上一講中提到的方式正確初始化權重,再逐層看激勵/梯度值的方差,會發現它們的方差衰減沒那麼厲害,近似在一個級別: 重新正確設定權重:

Layer 0: Variance
: 1.002860e+00 Layer 1: Variance: 7.015103e-01 Layer 2: Variance: 6.048625e-01 Layer 3: Variance: 8.517882e-01 Layer 4: Variance: 6.362898e-01 Layer 5: Variance: 4.329555e-01 Layer 6: Variance: 3.539950e-01 Layer 7: Variance: 3.809120e-01 Layer 8: Variance: 2.497737e-01

輸出權重方差

如何輸出keras每層權重的方差。 預設初始化又是怎麼實現的?