3.14 正向傳播、反向傳播和計(jì)算圖
前面幾節(jié)里我們使用了小批量隨機(jī)梯度下降的優(yōu)化算法來訓(xùn)練模型。在實(shí)現(xiàn)中,我們只提供了模型的正向傳播(forward propagation)的計(jì)算,即對(duì)輸入計(jì)算模型輸出,然后通過autograd
模塊來調(diào)用系統(tǒng)自動(dòng)生成的backward
函數(shù)計(jì)算梯度。基于反向傳播(back-propagation)算法的自動(dòng)求梯度極大簡化了深度學(xué)習(xí)模型訓(xùn)練算法的實(shí)現(xiàn)。本節(jié)我們將使用數(shù)學(xué)和計(jì)算圖(computational graph)兩個(gè)方式來描述正向傳播和反向傳播。具體來說,我們將以帶L2范數(shù)正則化的含單隱藏層的多層感知機(jī)為樣例模型解釋正向傳播和反向傳播。
3.14.1 正向傳播
3.14.2 正向傳播的計(jì)算圖
我們通常繪制計(jì)算圖來可視化運(yùn)算符和變量在計(jì)算中的依賴關(guān)系。圖3.6繪制了本節(jié)中樣例模型正向傳播的計(jì)算圖,其中左下角是輸入,右上角是輸出。可以看到,圖中箭頭方向大多是向右和向上,其中方框代表變量,圓圈代表運(yùn)算符,箭頭表示從輸入到輸出之間的依賴關(guān)系。
3.14.3 反向傳播
3.14.4 訓(xùn)練深度學(xué)習(xí)模型
在訓(xùn)練深度學(xué)習(xí)模型時(shí),正向傳播和反向傳播之間相互依賴。下面我們?nèi)匀灰员竟?jié)中的樣例模型分別闡述它們之間的依賴關(guān)系。
因此,在模型參數(shù)初始化完成后,我們交替地進(jìn)行正向傳播和反向傳播,并根據(jù)反向傳播計(jì)算的梯度迭代模型參數(shù)。既然我們?cè)诜聪騻鞑ブ惺褂昧苏騻鞑ブ杏?jì)算得到的中間變量來避免重復(fù)計(jì)算,那么這個(gè)復(fù)用也導(dǎo)致正向傳播結(jié)束后不能立即釋放中間變量內(nèi)存。這也是訓(xùn)練要比預(yù)測占用更多內(nèi)存的一個(gè)重要原因。另外需要指出的是,這些中間變量的個(gè)數(shù)大體上與網(wǎng)絡(luò)層數(shù)線性相關(guān),每個(gè)變量的大小跟批量大小和輸入個(gè)數(shù)也是線性相關(guān)的,它們是導(dǎo)致較深的神經(jīng)網(wǎng)絡(luò)使用較大批量訓(xùn)練時(shí)更容易超內(nèi)存的主要原因。
小結(jié)
- 正向傳播沿著從輸入層到輸出層的順序,依次計(jì)算并存儲(chǔ)神經(jīng)網(wǎng)絡(luò)的中間變量。
- 反向傳播沿著從輸出層到輸入層的順序,依次計(jì)算并存儲(chǔ)神經(jīng)網(wǎng)絡(luò)中間變量和參數(shù)的梯度。
- 在訓(xùn)練深度學(xué)習(xí)模型時(shí),正向傳播和反向傳播相互依賴。
注:本節(jié)與原書基本相同,原書傳送門