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