誤差反向傳播法
前言
此為本人學習《深度學習入門》的學習筆記,詳情請閱讀原書
數值微分雖然簡單,也容易實現,但是缺點是計算上比較費時間,本章介紹一個高效計算權重參數的梯度的方法--誤差反向傳播法
一、計算圖
計算圖將計算過程用圖形表示出來。這里說的圖形是數據結構圖,通過多個節點和邊表示(連接節點的直線稱為“邊”)。
1、用計算圖求解
實例:太郎在超市買了 2 個蘋果、3 個橘子。其中,蘋果每個 100 日元,橘子每個 150 日元。消費稅是 10%,請計算支付金額。

圖 5-3 基於計算圖求解的答案
用計算圖解題的情況下,需要按如下流程進行。
- 構建計算圖。
- 在計算圖上,從左向右進行計算。
這里的第 2 歩“從左向右進行計算”是一種正方向上的傳播,簡稱為正向傳播(forward propagation)。正向傳播是從計算圖出發點到結束點的傳播。考慮反向(從圖上看的話,就是從右向左)的傳播。實際上,這種傳播稱為反向傳播(backward propagation)。反向傳播將在接下來的導數計算中發揮重要作用。
2、局部計算
計算圖的特征是可以通過傳遞“局部計算”獲得最終結果。“局部”這個詞的意思是“與自己相關的某個小范圍”。局部計算是指,無論全局發生了什么,都能只根據與自己相關的信息輸出接下來的結果。
計算圖可以集中精力於局部計算。無論全局的計算有多么復雜,各個步驟所要做的就是對象節點的局部計算。雖然局部計算非常簡單,但是通過傳遞它的計算結果,可以獲得全局的復雜計算的結果。
3、為何用計算圖的解題
優點:1、局部計算,無論全局多么復雜,都可以通過局部計算使各個節點致力於簡單計算,從而簡化問題
2、利用計算圖可以將中間的計算結果全部保存起來
3、可以通過反向傳播高效計算導數(最大優點)

圖 5-5 基於反向傳播的導數的傳遞
如圖 5-5 所示,反向傳播使用與正方向相反的箭頭(粗線)表示。反向傳播傳遞“局部導數”,將導數的值寫在箭頭的下方。在這個例子中,反向傳播從右向左傳遞導數的值(1 → 1.1 → 2.2)。
二、鏈式法則
1、計算圖的反向傳播
從實例出發

圖 5-6 計算圖的反向傳播:沿着與正方向相反的方向,乘上局部導數
如圖,反向傳播的計算順序是,將信號E乘以結點的局部導數
,然后將結果傳遞給下一個結點。這里所說的局部導數是指正向傳播中y=f(x)的導數,也就是y關於x的導數
。比如,假設 y=f(x)=x2,則局部導數為
。把這個局部導數乘以上游傳過來的值(本例中為 E),然后傳遞給前面的節點。
這就是反向傳播的計算順序。通過這樣的計算,可以高效的求出導數的值,這是反向傳播的要點。
2、什么是鏈式法則
介紹鏈式法則時,需要先從復合函數說起。比如,z=(x+y)2 是由式(5.1)所示的兩個式子構成的。
z = t2
t = x + y (5.1)
鏈式法則時關於復合函數的導數的性質,定義如下
如果某各個函數由復合函數表示,則該復合函數的導數可以用構成復合函數的各個函數的導數的乘積表示
以式(5.1)為例,
(z 關於 x 的導數)可以用
(z 關於 t 的導數)和
(t 關於 x 的導數)的乘積表示。用數學式表示的話,可以寫成式(5.2)。
![]()
式(5.2)中的
可以互相抵消
![]()
使用鏈式法則實例:使用式子(5.2)的導數
。為此先求式子(5.1)中的局部導數(偏導數)

如式(5.3),
等於 2t,
等於 1。這是基於導數公式的解析解。然后,最后要計算的
可由式(5.3)求得的導數的乘積計算出來。

3、鏈式法則和計算圖
嘗試將式(5.4)的鏈式法則的計算用計算圖表示出來。如果用“**2”節點表示平方運算的話,則計算圖如圖 5-7 所示。

圖 5-7 式(5.4)的計算圖:沿着與正方向相反的方向,乘上局部導數后傳遞
如圖所示,計算圖的反向傳播從右到左傳播信號。反向傳播的計算順序是,先將節點的輸入信號乘以節點的局部導數(偏導數),然后再傳遞給下一個節點。比如,反向傳播時,“**2”節點的輸入是
,將其乘以局部導數
(因為正向傳播時輸入是 t、輸出是 z,所以這個節點的局部導數是
),然后傳遞給下一個節點。另外,圖 5-7 中反向傳播最開始的信號
在前面的數學式中沒有出現,這是因為
,所以在剛才的式子中被省略了。
圖 5-7 中需要注意的是最左邊的反向傳播的結果。根據鏈式法則,
成立,對應“z 關於 x 的導數”。也就是說,反向傳播是基於鏈式法則的。
把式(5.3)的結果代入到圖 5-7 中,結果如圖 5-8 所示,
的結果為 2(x + y)。

圖 5-8 根據計算圖的反向傳播的結果,
等於 2(x + y)
三、反向傳播
本節將以“+”和“×”等運算為例,介紹反向傳播的結構。
1、加法結點的反向傳播
以 z = x + y 為對象,觀察它的反向傳播。z= x + y 的導數可由下式(解析性地)計算出來。

如式(5.5)所示,
和
同時都等於 1。因此,用計算圖表示的話,如圖 5-9 所示。
在圖 5-9 中,反向傳播將從上游傳過來的導數(本例中是
)乘以 1,然后傳向下游。也就是說,因為加法節點的反向傳播只乘以 1,所以輸入的值會原封不動地流向下一個節點。

圖 5-9 加法節點的反向傳播:左圖是正向傳播,右圖是反向傳播。如右圖的反向傳播所示,加法節點的反向傳播將上游的值原封不動地輸出到下游
2、乘法結點的反向傳播
考慮 z = xy。這個式子的導數用式(5.6)表示。

根據式(5.6),可以像圖 5-12 那樣畫計算圖。

圖 5-12 乘法的反向傳播:左圖是正向傳播,右圖是反向傳播
乘法的反向傳播會將上游的值乘以正向傳播時的輸入信號的“翻轉值”后傳遞給下游。翻轉值表示一種翻轉關系,如圖 5-12 所示,正向傳播時信號是 x 的話,反向傳播時則是 y;正向傳播時信號是 y 的話,反向傳播時則是 x。
具體的例子。比如,假設有“10 × 5 = 50”這一計算,反向傳播時,從上游會傳來值 1.3。用計算圖表示的話,如圖 5-13 所示。

圖 5-13 乘法節點的反向傳播的具體例子
