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