機器學習入門(10)— 淺顯易懂的計算圖、鏈式法則講解

1. 計算圖概念

計算圖將計算過程用圖形表示出來。這裏說的圖形是數據結構圖,通過多個節點和邊表示(連接節點的直線稱爲“邊”)。

2. 計算圖求解

問題 1:小明在超市買了 2 個 100 日元一個的蘋果,消費稅是 10%,請計算支付金額。

計算圖通過節點和箭頭表示計算過程。節點用○表示,○中是計算的內容。將計算的中間結果寫在箭頭的上方,表示各個節點的計算結果從左向右傳遞。用計算圖解問題1,求解過程如圖5-1 所示。
計算圖求解
雖然圖 5-1 中把“× 2”“× 1.1”等作爲一個運算整體用○括起來了,不過只用○表示乘法運算“×”也是可行的。此時,如圖5-2 所示,可以將“2”和“1.1”分別作爲變量“蘋果的個數”和“消費稅”標在○外面。

圖 5-2
問題 2:小明在超市買了2 個蘋果、3 個橘子。其中,蘋果每個100 日元,橘子每個150 日元。消費稅是10%,請計算支付金額。

使用計算圖求解過程如下:
計算圖求解
綜上,用計算圖解題的情況下,需要按如下流程進行。
1. 構建計算圖。
2. 在計算圖上,從左向右進行計算。

這裏的第 2 歩“從左向右進行計算”是一種正方向上的傳播,簡稱爲正向傳播(forward propagation。正向傳播是從計算圖出發點到結束點的傳播。

既然有正向傳播這個名稱,當然也可以考慮反向(從圖上看的話,就是從右向左)的傳播。實際上,這種傳播稱爲反向傳播(backward propagation。反向傳播將在接下來的導數計算中發揮重要作用。

3. 計算圖特點

計算圖的特徵是可以通過傳遞“局部計算”獲得最終結果。“局部”這個詞的意思是“與自己相關的某個小範圍”。局部計算是指,無論全局發生了什麼,都能只根據與自己相關的信息輸出接下來的結果。

用一個具體的例子來說明局部計算。比如,在超市買了 2 個蘋果和其他很多東西。此時,可以畫出如圖5-4 所示的計算圖。
複雜計算
如圖 5-4 所示,假設(經過複雜的計算)購買的其他很多東西總共花費 4000 日元。這裏的重點是,各個節點處的計算都是局部計算。這意味着,例如蘋果和其他很多東西的求和運算(4000 + 200→4200)並不關心4000 這個數字是如何計算而來的,只要把兩個數字相加就可以了。換言之,各個節點處只需進行與自己有關的計算(在這個例子中是對輸入的兩個數字進行加法運算),不用考慮全局。

綜上,計算圖可以集中精力於局部計算。無論全局的計算有多麼複雜,各個步驟所要做的就是對象節點的局部計算。雖然局部計算非常簡單,但是通過傳遞它的計算結果,可以獲得全局的複雜計算的結果。

4. 計算圖最大優點

使用計算圖最大的原因是,可以通過反向傳播高效計算導數。

問題 1 中,我們計算了購買 2 個蘋果時加上消費稅最終需要支付的金額。這裏,假設我們想知道蘋果價格的上漲會在多大程度上影響最終的支付金額,即求“支付金額關於蘋果的價格的導數”。設蘋果的價格爲x,支付金額爲L,則相當於求。這個導數的值表示當蘋果的價格稍微上漲時,支付金額會增加多少。

反向傳播的導數傳遞
如圖 5-5 所示,反向傳播使用與正方向相反的箭頭(粗線)表示。反向傳播傳遞“局部導數”,將導數的值寫在箭頭的下方。在這個例子中,反向傳播從右向左傳遞導數的值(1→1.1→2.2)。

從這個結果中可知,“支付金額關於蘋果的價格的導數”的值是 2.2。這意味着,如果蘋果的價格上漲 1 日元,最終的支付金額會增加 2.2 日元(嚴格地講,如果蘋果的價格增加某個微小值,則最終的支付金額將增加那個微小值的 2.2 倍)

綜上,計算圖的優點是,可以通過正向傳播和反向傳播高效地計算各個變量的導數值。

5. 計算圖的反向傳播

假設存在 y = f(x) 的計算,這個計算的反向傳播如圖 5-6 所示。
反向傳播
如圖所示,反向傳播的計算順序是,將信號 E 乘以節點的局部導(yx\frac{\partial y}{\partial x}),然後將結果傳遞給下一個節點。這裏所說的局部導數是指正向傳播中 y = f(x) 的導數,也就是 y 關於 x 的導數(yx\frac{\partial y}{\partial x} )。

比如,假設 y = f(x) = x2,則局部導數爲 yx\frac{\partial y}{\partial x}= 2x。把這個局部導數乘以上游傳過來的值(本例中爲E),然後傳遞給前面的節點。

這就是反向傳播的計算順序。通過這樣的計算,可以高效地求出導數的值,這是反向傳播的要點。

6. 鏈式法則

複合函數是由多個函數構成的函數。比如,z = (x + y)2 是由式(5.1)所示的兩個式子構成的。

複合函數
鏈式法則是關於複合函數的導數的性質,定義如下。

如果某個函數由複合函數表示,則該複合函數的導數可以用構成複合函數的各個函數的導數的乘積表示。

鏈式求導
總結一句話:大學課本中的多元函數求導過程。

7. 鏈式法則和計算圖

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

計算圖
如圖所示,計算圖的反向傳播從右到左傳播信號。反向傳播的計算順序是,先將節點的輸入信號乘以節點的局部導數(偏導數),然後再傳遞給下一個節點。

比如,反向傳播時,“**2”節點的輸入是 zx\frac{\partial z}{\partial x},將其乘以局部導數 zt\frac{\partial z}{\partial t}(因爲正向傳播時輸入是 t、輸出是 z,所以這個節點的局部導數是 zt\frac{\partial z}{\partial t}),然後傳遞給下一個節點。

另外,圖5-7 中反向傳播最開始的信號 zz\frac{\partial z}{\partial z} 在前面的數學式中沒有出現,這是因爲 zz\frac{\partial z}{\partial z}=1,所以在剛纔的式子中被省略了。

圖 5-7 中需要注意的是最左邊的反向傳播的結果。根據鏈式法則 zz\frac{\partial z}{\partial z}zt\frac{\partial z}{\partial t}tx\frac{\partial t}{\partial x} = zt\frac{\partial z}{\partial t}tx\frac{\partial t}{\partial x} = zx\frac{\partial z}{\partial x},成立,對應 “ z 關於 x 的導數”。也就是說,反向傳播是基於鏈式法則的。

把式(5.3)的結果代入到圖 5-7 中,結果如圖 5-8 所示, 的結果爲2(x + y)。

圖 5-8

數學表達式參考:https://www.cnblogs.com/jngwl/articles/10096017.html

參考:《深度學習入門:基於Python的理論與實現》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章