天天看點

為什麼很難訓練深度神經網絡?

在這篇文章中,我将解釋在深度神經網絡訓練中一個常見的誤解。似乎大家都認為,訓練深度神經網絡很難的原因主要是因為梯度消失(或爆炸)的問題。“梯度消失”是指通過隐藏層從後向前看,梯度會變的越來越小。這也意味着,前面層的學習會顯著慢于後面層的學習,是以學習會卡住,除非梯度變大。這個想法至少可以追溯到Bengio等人(1994年),如今這仍然被用于解釋為什麼很難訓練深度神經網絡。

我們首先考慮一個簡單的情景:訓練一個深度線性網絡學習一個線性映射。從計算的角度來看,深度線性網絡并不令人感興趣,但是Saxe等人 (2013)認為,線上性網絡學習仍然可以提供有關非線性網絡學習的資訊。是以,我們從這個簡單的場景開始。下圖是30層網絡的學習曲線和初始梯度範數。

為什麼很難訓練深度神經網絡?

這些結果在圖中标記為“Fold 0”。這裡的梯度是關于層激活值的,網絡權重通過 進行初始化。訓練損失開始時迅速下降,但不會消失(或爆炸),随後達到一個穩定的次優值。随着訓練的進展,他們變得越來越小,但是這是可以預料的,而且從某種意義上說,這裡的梯度“太小”并不清楚:

為什麼很難訓練深度神經網絡?

為了說明收斂到局部最優解的現象和梯度範數的大小本身沒有任何關系,現在我将介紹一個會增加梯度範數的方法,但會惡化性能。如下圖(藍色):

為什麼很難訓練深度神經網絡?

那麼,我做了什麼?我隻是簡單地改變了初始化。原始網絡中的每個初始權重矩陣是一個64X64的矩陣(使用标準 初始化進行初始化)。在以藍色顯示的網絡中,我将每個初始權重矩陣的前半部分複制到後半部分(初始權重矩陣被“Fold”一次,是以我将它們表示為“Fold 1”網絡)。這降低了初始權重矩陣的秩,并使其更加退化。請注意,這種運算僅應用于初始權重矩陣,并沒有加上其它對學習過程的限制,訓練過程将保持不變。以下是梯度範數經過訓練之後的效果:

為什麼很難訓練深度神經網絡?

這個方法總體上增大了梯度範數,但是性能明顯變差了。接下來我将介紹另一種縮小梯度範數,但會大大提高性能的方法。這裡是(綠色):

為什麼很難訓練深度神經網絡?

這種新的方法将權重矩陣初始化為正交。正交矩陣是固定(Frobenius)範數的矩陣中退化程度最低的,其中退化度可以用不同的方式來衡量,例如奇異值小于給定常數的比例。以下是梯度範數經過訓練之後的效果:

為什麼很難訓練深度神經網絡?

如果梯度範數的大小不是訓練困難的原因,那原因是什麼呢?答案是模型的退化總體上決定了訓練性能。為什麼退化會損害訓練性能?因為參數空間中學習的退化速度大大減慢,導緻減少了模型的有效維數,就像上面的例子一樣。是以,上面的“Fold 0”網絡和“Fold 1”網絡雖然梯度範數值很好,但網絡的可用自由度對這些梯度範數的貢獻極其不均衡:絕大多數(退化的)自由度根本沒有任何貢獻。正如 Saxe 等人的論文表明,随着相乘矩陣的數量(即網絡深度)的增加,這種矩陣的乘積變得越來越退化。這裡分别是1層,10層和100層網絡的一個例子:

為什麼很難訓練深度神經網絡?

随着深度的增加,積矩陣的奇異值變得越來越集中0。這個結果不僅與線性網絡有關,類似的事情也發生在非線性網絡中:随着深度的增加,給定層中隐藏單元的次元變得越來越低維化,即越來越退化。事實上,在有硬飽和邊界的非線性網絡中(例如 ReLU 網絡),随着深度增加,退化過程會變得越來越快。Duvenaud 等人 2014 年的論文裡展示了關于該退化過程的可視化:

為什麼很難訓練深度神經網絡?

随着深度的增加,輸入空間(左上角所示)會在輸入空間中的每個點處被扭曲成越來越細的單絲,隻有一個與細絲正交的方向影響網絡的響應。沿着這個方向,網絡實際上對變化變得非常敏感。

以上為譯文。

**

文章原标題《Why is it hard to train deep neural networks? Degeneracy, not vanishing gradients, is the key》,譯者:黃小凡,審校:袁虎。

繼續閱讀