深度学习 | 误差反向传播法
1. 計算圖
①可以進行局部計算。
②計算圖可以將中間的計算結果全部保存起來。
③可以通過反向傳播高效計算導數(shù)。
綜上,計算圖的優(yōu)點是,可以通過正向傳播和反向傳播高效地計算各個變量的導數(shù)值。
2. 鏈式法則
如果某個函數(shù)由復合函數(shù)表示,則該復合函數(shù)的導數(shù)可以用構成復合函數(shù)的各個函數(shù)的導數(shù)的乘積表示。
最左邊是反向傳播的結果。
3. 反向傳播
3.1 加法節(jié)點的反向傳播
加法節(jié)點的反向傳播只乘以1,所以輸入的值會原封不動地流向下一個節(jié)點。
3.2 乘法節(jié)點的反向傳播
考慮z=xy:
乘法的反向傳播會將上游的值乘以正向傳播時的輸入信號的“翻轉值”后傳遞給下游。翻轉值表示一種翻轉關系,如圖所示,正向傳播時信號是x的話,反向傳播時則是y;正向傳播時信號是y的話,反向傳播時則是x。
加法的反向傳播只是將上游的值傳給下游,
并不需要正向傳播的輸入信號。但是,乘法的反向傳播需要正向傳播時的輸入信號值。因此,實現(xiàn)乘法節(jié)點的反向傳播時,要保存正向傳播的輸入信號。
4. 簡單層的實現(xiàn)
我們把要實現(xiàn)的計算圖的乘法節(jié)點稱為“乘法層”(MulLayer),加法節(jié)點稱為“加法層”(AddLayer)。
5. 激活函數(shù)層的實現(xiàn)
5.1 ReLU層
激活函數(shù)ReLU(Rectified Linear Unit)由下式表示:
求出y關于x的導數(shù):
如果正向傳播時的輸入x大于0,則反向傳播會將上游的值原封不動地傳給下游。反過來,如果正向傳播時的x小于等于0,則反向
傳播中傳給下游的信號將停在此處。
ReLU層的作用就像電路中的開關一樣。正向傳播時,有電流通過的話,就將開關設為 ON;沒有電流通過的話,就將開關設為 OFF。
反向傳播時,開關為ON的話,電流會直接通過;開關為OFF的話,則不會有電流通過。
5.2 Sigmoid層
sigmoid函數(shù)式:
除了“×”和“+”節(jié)點外,還出現(xiàn)了新的“exp”和“/”節(jié)點?!癳xp”節(jié)點會進行y = exp(x)的計算,“/”節(jié)點會進行y=1/x的計算。
反向傳播的流程:
反向傳播的輸出為 ,這個值會傳播給下游的節(jié)點。
因此,Sigmoid層的反向傳播,只根據(jù)正向傳播的輸出就能計算出來:
6. Affine/Softmax層的實現(xiàn)
6.1 Affine層
幾何中,仿射變換包括一次線性變換和一次平移,分別對應神經(jīng)網(wǎng)絡的加權和運算與加偏置運算。
6.2 批版本的Affine層
前面介紹的Affine層的輸入X是以單個數(shù)據(jù)為對象的。現(xiàn)在我們考慮N個數(shù)據(jù)一起進行正向傳播的情況,也就是批版本的Affine層。
6.3 Softmax-with-Loss 層
神經(jīng)網(wǎng)絡的推理通常不使用 Softmax層。
神經(jīng)網(wǎng)絡的學習階段則需要 Softmax層。
softmax函數(shù)記為Softmax層,交叉熵誤差記為Cross Entropy Error層。這里假設要進行3類分類,從前面的層接收3個輸入(得分)。如圖5-30所示,Softmax層將輸入(a1, a2, a3)正規(guī)化,輸出(y1, y2,y3)。Cross Entropy Error層接收Softmax的輸出(y1, y2, y3)和教師標簽(t1, t2, t3),從這些數(shù)據(jù)中輸出損失L。
Softmax層的反向傳播得到了(y1 ? t1, y2 ? t2, y3 ? t3)這樣“漂亮”的結果。由于(y1, y2, y3)是Softmax層的輸出,(t1, t2, t3)是監(jiān)督數(shù)據(jù),所以(y1 ? t1, y2 ? t2, y3 ? t3)是Softmax層的輸出和教師標簽的差分。神經(jīng)網(wǎng)絡的反向傳播會把這個差分表示的誤差傳遞給前面的層,這是神經(jīng)網(wǎng)絡學習中的重要性質。
7. 誤差反向傳播法的實現(xiàn)
神經(jīng)網(wǎng)絡學習的步驟:
前提
神經(jīng)網(wǎng)絡中有合適的權重和偏置,調(diào)整權重和偏置以便擬合訓練數(shù)據(jù)的
過程稱為學習。神經(jīng)網(wǎng)絡的學習分為下面4個步驟。
步驟1(mini-batch)
從訓練數(shù)據(jù)中隨機選擇一部分數(shù)據(jù)。
步驟2(計算梯度)
計算損失函數(shù)關于各個權重參數(shù)的梯度。
步驟3(更新參數(shù))
將權重參數(shù)沿梯度方向進行微小的更新。
步驟4(重復)
重復步驟1、步驟2、步驟3。
計算梯度的兩種方法:一種是基于數(shù)值微分的方法,另一種是解析性地求解數(shù)學式的方法。
數(shù)值微分雖然實現(xiàn)簡單,但是計算要耗費較多的時間。和需要花費較多時間的數(shù)值微分不同,誤差反向傳播法可以快速高效地計算梯度。
數(shù)值微分的優(yōu)點是實現(xiàn)簡單,因此,一般情況下不太容易出錯。而誤差反向傳播法的實現(xiàn)很復雜,容易出錯。所以,經(jīng)常會比較數(shù)值微分的結果和誤差反向傳播法的結果,以確認誤差反向傳播法的實現(xiàn)是否正確。確認數(shù)值微分求出的梯度結果和誤差反向傳播法求出的結果是否一致(嚴格地講,是非常相近)的操作稱為梯度確認(gradient check)。
小結
? 通過使用計算圖,可以直觀地把握計算過程 ?計算圖的節(jié)點是由局部計算構成的。局部計算構成全局計算。 ?計算圖的正向傳播進行一般的計算。通過計算圖的反向傳播,可以計算各個節(jié)點的導數(shù)。 ?通過將神經(jīng)網(wǎng)絡的組成元素實現(xiàn)為層,可以高效地計算梯度*(反向傳播法)。 ?通過比較數(shù)值微分和誤差反向傳播的結果,可以確認誤差反向傳播的實現(xiàn)是否正確(梯度確認)。總結
以上是生活随笔為你收集整理的深度学习 | 误差反向传播法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦三国游戏
- 下一篇: 机器学习(Machine Learnin