1. 摘要
本文嘗試解釋為什么在深度的神經網絡中隨機初始化會讓梯度下降表現很差,并且在此基礎上來幫助設計更好的算法。
作者發現 sigmoid 函數不適合深度網絡,在這種情況下,隨機初始化參數會讓較深的隱藏層陷入到飽和區域。
作者提出了一個新的參數初始化方法,稱之為 Xavier 初始化,來幫助深度網絡更快地收斂。
2. 激活函數的作用以及訓練過程中的飽和現象
2.1. 三種激活函數
2.2. Sigmoid 函數
通過觀察訓練過程中每一個隱藏層激活值的均值和方差,我們可以發現第 4 層的激活值很快就進入到了飽和區域,非常接近于 0。由于 Sigmoid 函數在接近于 0 的時候梯度很小,這樣的話反向傳播過程就會學習得很慢,雖然最終網絡會慢慢離開飽和區域,但往往學到的解也不是最優的。
2.3. Tanh 函數和 Softsign 函數
由于 Tanh 函數和 Softsign 函數接近于 0 的時候梯度近似線性,所以它們不會遇到像 Sigmoid 上面的情況。但是,采用 Tanh 作為激活函數時,從第一層到第四層的激活值卻也會在訓練過程中依次進入飽和區域。而采用 Softsign 的話,所有層都逐漸進入飽和區域,但這個過程會更慢一點。
在訓練完成后,我們可以發現以 Tanh 作為激活函數,最終每層的激活值大多落在飽和區域和 0 附近;以 Softsign 作為激活函數,最終每層的激活值大多落在 (-0.6, -0.8) 和 (0.6, 0.8) 區間。
3. 梯度以及它們的傳播
3.1. 損失函數
作者發現采用似然損失比用二次的均方誤差要好,因為采用似然損失不容易陷入到平緩區域,不會讓訓練過程變得很慢。如下圖所示,可以看到采用二次損失的損失函數有很多平緩區域。
3.2. Xavier 初始化
針對一個對稱的激活函數,并且其在原點處的導數為 1,那么我們有:
根據以上定義,可以得到:
假設初始時我們位于線性區域,權重之間互相獨立,并且輸入的特征具有一樣的方差 ,第
層具有
個神經元,那么有:
可參考 Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification 對比進行分析。
在前向過程中,為了保持信息,讓每一層都具有一樣的方差,即:
那么我們可以得到:
同樣,考慮梯度的反向傳播,我們可以得到:
為了保證每一層梯度的方差一致,也即:
我們有:
若同時考慮到前向傳播的反向傳播的約束,我們想要:
對此,我們用下面的方法來初始化參數
其中, 代表均勻分布,其方差為
正好符合我們的預期。
可以看到,在前向傳播過程中,舊的初始化方法,越靠后的層激活值越容易陷入到 0 區域,而采用新的初始化方法后,每一層的激活值分布基本相同。
在反向傳播過程中,舊的初始化方法,越靠前的層梯度值越容易陷入到 0 區域,而采用新的初始化方法后,每一層的梯度分布基本相同。