反向傳播算法( Backpropagation Algorithm )
藉由微積分中的鏈鎖律(Chain rule)使神經網路能更有效率地收斂
前言
之前文章提到梯度下降學習法(Gradient Descent Learning Rule),透過偏微分求得梯度之後,再對權重進行優化,使誤差盡可能地縮小。這個方法只要搭配上 Sigmoid Function,即便面對的是非線性可分的數據,仍能收斂在誤差很小的地方。
但其中有個缺點,倘若一個神經網路結構很複雜、神經元數量很多時,運算Gradient 的過程會有非常大量的重複計算。
反向傳播算法(Backpropagation Algorithm)
為了解決這問題,David E. Rumelhart, Geoffrey E. Hinton & Ronald J. Williams 在 1986 年提出《 Learning representations by back-propagating errors 》,文中闡述藉由微積分上的鏈鎖率(Chain rule)可以從神經網路的末端開始計算誤差與各權重的關係,藉此減少運算量。
這個問題如果用僅有單一隱藏層的神經網路當做例子,看不太出端倪,這邊舉個 2 層隱藏層的神經網路當例子,示意圖如下:
因為權重與變數的狀態比之前複雜,稍微對註釋解釋一下:
這邊如果要更新權重 W¹11 就必須利用鏈鎖律(Chain rule)做偏微分,再將其 Gradient 展開來看才能清楚理解重複的部分,在繼續往下看展開公式之前,我先用個簡單的例子說明一下 Chain rule。
鏈鎖率(Chain rule)
鏈鎖率通常應用在複合函數,可節省求導數的時間。在平常簡單的一次、二次的公式可能沒感覺,我們舉一個誇張一點的例子:
這個如果你不知道 Chain rule 大概只能把它全部展開,然後把每一項的次方數字拿下來與係數相乘,再把次方減 1,最後再整理成比較精簡的寫法。
那我們來看看 Chain rule 公式:
藉著這公式,可以把原本例子括弧內的東西想成 u ,那 u(x) 和 y 就可寫成:
再來把這兩個式子代入上面的公式:
反向傳播算法(Backpropagation Algorithm)
有了 Chain rule 的概念,我們就可以開始觀察對 W¹11 做偏微分有影響的變數有哪些:
這邊看起來有點複雜,但就只是從網路的末端往回逐一展開,如果用sigma可以寫成:
讓我們從 output 往回慢慢將每個項展開來看,首先是 Loss 和 z³1:
再來是看 z³ 1 與 a² i 的關係:
接著是看 a² i 與 z² i 的關係:
因為 a 其實是 z 經過 sigmoid 之後的值,那其實只要對 sigmoid function 做微分即可,為了讓下一步驟更好理解,這邊先提一下 sigmoid 微分後的樣子。
S型函數(Sigmoid function)微分
了解 sigmoid function 微分之後的樣子之後,我們回到 Backpropagation 的算法上,繼續看 a² i 與 z² i 的關係:
再往回推一層就會發現開始出現類似 w³ i 那段的算法:
再來是 a¹ 1 與 z¹ 1:
最後是 z¹ 1 與 w¹ 11:
到這邊就是神經網絡反向傳播到 w¹ 11 的過程,為甚麼說這個算法比較有效率呢?我們拿 w¹ 12 與 w¹ 11 來比較一下:
這邊套用上面的展開公式會長這樣:
會發現只差在最後乘上 x 的地方,那同一層的 w 基本上能共享後面網路回傳的值,就可以減少計算量。
雖然這樣使得神經網路在加深之後,仍在可接受的運算時間內完成訓練,但因為使用了 Sigmoid function,造成神經網路出現梯度消失問題(Vanishing gradient problem),這問題我就之後的文章再繼續往下說明~
Ref:
https://www.brilliantcode.net/1326/backpropagation-1-gradient-descent-chain-rule/
https://www.youtube.com/watch?v=Ilg3gGewQ5U
https://medium.com/ai-academy-taiwan/back-propagation-3946e8ed8c55
http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html
https://allen108108.github.io/blog/2020/06/01/%E7%82%BA%E4%BB%80%E9%BA%BC%E9%9C%80%E8%A6%81%E5%8F%8D%E5%90%91%E5%82%B3%E6%92%AD%20_%20Why%20Backpropagation%20_/
https://medium.com/%E4%B8%89%E5%8D%81%E4%B8%8D%E5%93%AD/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92%E8%87%AA%E5%AD%B8%E7%AD%86%E8%A8%9808-backpropagation-94e66e40a09c