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