到目前為止,我們實現的每個模型都需要我們根據一些預先指定的分布來初始化它的參數。直到現在,我們都認為初始化方案是理所當然的,掩蓋了如何做出這些選擇的細節。您甚至可能覺得這些選擇并不是特別重要。相反,初始化方案的選擇在神經網絡學習中起著重要作用,對于保持數值穩定性至關重要。此外,這些選擇可以以有趣的方式與非線性激活函數的選擇聯系起來。我們選擇哪個函數以及我們如何初始化參數可以決定我們的優化算法收斂的速度。這里的錯誤選擇可能會導致我們在訓練時遇到梯度爆炸或消失的情況。在這個部分,
%matplotlib inline
import tensorflow as tf
from d2l import tensorflow as d2l
5.4.1. 消失和爆炸梯度
考慮一個深度網絡L圖層,輸入x 和輸出o. 每層l由轉換定義fl權重參數化 W(l), 隱藏層輸出為 h(l)(讓h(0)=x),我們的網絡可以表示為:
如果所有隱藏層的輸出和輸入都是向量,我們可以寫出梯度為o關于任何一組參數 W(l)如下:
換句話說,這個梯度是L?l矩陣 M(L)?…?M(l+1)和梯度向量v(l). 因此,當將太多概率相乘時,我們很容易遇到同樣的數值下溢問題。在處理概率時,一個常見的技巧是切換到對數空間,即將壓力從尾數轉移到數值表示的指數。不幸的是,我們上面的問題更嚴重:最初矩陣 M(l)可能有各種各樣的特征值。它們可能很小或很大,它們的產品可能很大或 很小。
不穩定梯度帶來的風險超出了數值表示。不可預測的梯度也會威脅到我們優化算法的穩定性。我們可能面臨以下參數更新:(i) 過大,破壞了我們的模型( 梯度爆炸問題);或 (ii) 過小(梯度消失問題),由于參數幾乎不會在每次更新時移動,因此無法進行學習。
評論