到目前為止,我們已經(jīng)用小批量隨機(jī)梯度下降訓(xùn)練了我們的模型。然而,當(dāng)我們實(shí)現(xiàn)該算法時(shí),我們只擔(dān)心通過模型進(jìn)行前向傳播所涉及的計(jì)算。當(dāng)需要計(jì)算梯度時(shí),我們只是調(diào)用了深度學(xué)習(xí)框架提供的反向傳播函數(shù)。
梯度的自動(dòng)計(jì)算(自動(dòng)微分)大大簡(jiǎn)化了深度學(xué)習(xí)算法的實(shí)現(xiàn)。在自動(dòng)微分之前,即使是對(duì)復(fù)雜模型的微小改動(dòng)也需要手動(dòng)重新計(jì)算復(fù)雜的導(dǎo)數(shù)。令人驚訝的是,學(xué)術(shù)論文常常不得不分配大量頁(yè)面來推導(dǎo)更新規(guī)則。雖然我們必須繼續(xù)依賴自動(dòng)微分,以便我們可以專注于有趣的部分,但如果您想超越對(duì)深度學(xué)習(xí)的膚淺理解,您應(yīng)該知道這些梯度是如何在底層計(jì)算的。
在本節(jié)中,我們將深入探討反向傳播(通常稱為反向傳播)的細(xì)節(jié)。為了傳達(dá)對(duì)技術(shù)及其實(shí)現(xiàn)的一些見解,我們依賴于一些基本的數(shù)學(xué)和計(jì)算圖。首先,我們將重點(diǎn)放在具有權(quán)重衰減的單隱藏層 MLP 上(?2 正則化,將在后續(xù)章節(jié)中描述)。
5.3.1. 前向傳播
前向傳播(或forward pass)是指神經(jīng)網(wǎng)絡(luò)從輸入層到輸出層依次計(jì)算和存儲(chǔ)中間變量(包括輸出)。我們現(xiàn)在逐步了解具有一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)的機(jī)制。這可能看起來很乏味,但用放克演奏家詹姆斯布朗的永恒名言來說,你必須“付出代價(jià)才能成為老板”。
為了簡(jiǎn)單起見,我們假設(shè)輸入示例是 x∈Rd并且我們的隱藏層不包含偏差項(xiàng)。這里的中間變量是:
在哪里W(1)∈Rh×d是隱藏層的權(quán)重參數(shù)。運(yùn)行中間變量后 z∈Rh通過激活函數(shù) ?我們獲得了長(zhǎng)度的隱藏激活向量h,
隱藏層輸出h也是一個(gè)中間變量。假設(shè)輸出層的參數(shù)只具有權(quán)重W(2)∈Rq×h,我們可以獲得一個(gè)輸出層變量,其向量長(zhǎng)度為q:
假設(shè)損失函數(shù)是l示例標(biāo)簽是 y,然后我們可以計(jì)算單個(gè)數(shù)據(jù)示例的損失項(xiàng),
根據(jù)定義?2我們稍后將介紹的正則化,給定超參數(shù)λ,正則化項(xiàng)是
其中矩陣的 Frobenius 范數(shù)就是?2將矩陣展平為向量后應(yīng)用范數(shù)。最后,模型在給定數(shù)據(jù)示例上的正則化損失為:
我們指的是J作為下面討論中的目標(biāo)函數(shù)。
5.3.2. 前向傳播的計(jì)算圖
繪制計(jì)算圖有助于我們可視化計(jì)算中運(yùn)算符和變量的依賴關(guān)系。圖 5.3.1 包含與上述簡(jiǎn)單網(wǎng)絡(luò)相關(guān)的圖形,其中方塊表示變量,圓圈表示運(yùn)算符。左下角表示輸入,右上角表示輸出。請(qǐng)注意箭頭的方向(說明數(shù)據(jù)流)主要是向右和向上。
圖 5.3.1前向傳播計(jì)算圖。
5.3.3. 反向傳播
反向傳播是指計(jì)算神經(jīng)網(wǎng)絡(luò)參數(shù)梯度的方法。簡(jiǎn)而言之,該方法根據(jù)微 積分的鏈?zhǔn)椒▌t以相反的順序遍歷網(wǎng)絡(luò),從輸出層到輸入層。該算法存儲(chǔ)計(jì)算某些參數(shù)的梯度時(shí)所需的任何中間變量(偏導(dǎo)數(shù))。假設(shè)我們有函數(shù) Y=f(X)和Z=g(Y), 其中輸入和輸出 X,Y,Z是任意形狀的張量。通過使用鏈?zhǔn)椒▌t,我們可以計(jì)算導(dǎo)數(shù) Z關(guān)于X通過
評(píng)論