什么是反向傳播
作者:韓小雨
類別:①反向傳播算法 ②反向傳播模型
反向傳播算法(英:Backpropagation algorithm,簡稱:BP算法)
算法簡介:是一種監督學習算法,常被用來訓練多層感知機。 於1974年,Paul Werbos[1]首次給出了如何訓練一般網絡的學習算法,而人工神經網絡只是其中的特例。不巧的,在當時整個人工神經網絡社群中卻無人知曉Paul所提出的學習算法。直到80年代中期,BP算法才重新被David Rumelhart、Geoffrey Hinton及Ronald Williams[2][3]、David Parker[4]和Yann LeCun[5]獨立發現,並獲得了廣泛的注意,引起了人工神經網絡領域研究的第二次熱潮。
適用范圍:BP算法是Delta規則的推廣,要求每個人工神經元(節點)所使用的激勵函數必須是可微的。BP算法特別適合用來訓練前向神經網絡。
算法過程:反向傳播算法(BP算法)主要由兩個環節(激勵傳播、權重更新)反復循環迭代,直到網絡的對輸入的響應達到預定的目標范圍為止。
每次迭代中的傳播環節包含兩步:
(前向傳播階段)將訓練輸入送入網絡以獲得激勵響應;
(反向傳播階段)將激勵響應同訓練輸入對應的目標輸出求差,從而獲得隱層和輸出層的響應誤差。對於每個突觸上的權重,按照以下步驟進行更新:
將輸入激勵和響應誤差相乘,從而獲得權重的梯度;
將這個梯度乘上一個比例並取反后加到權重上。
這個比例將會影響到訓練過程的速度和效果,因此稱為“訓練因子”。梯度的方向指明了誤差擴大的方向,因此在更新權重的時候需要對其取反,從而減小權重引起的誤差。
具體算法:反向傳播算法(Backpropagation)已經是神經網絡模型進行學習的標配。但是有很多問題值得思考一下:
反向傳播算法的作用是什么? 神經網絡模型的學習算法一般是SGD。SGD需要用到損失函數C關於各個權重參數w_{jk},b_j的偏導數\frac{ \partial C }{ \partial w_{jk} } , \frac{ \partial C }{ \partial b_j} 。一個模型的參數w,b是非常多的,故而需要反向傳播算法快速計算\frac{ \partial C }{ \partial w_{jk} } , \frac{ \partial C }{ \partial b_j} 。也就是說反向傳播算法是一種計算偏導數的方法。
為什么要提出反向傳播算法? 在反向傳播算法提出之前人們應該想到了使用SGD學習模型,也想到了一些辦法求解網絡模型的偏導數,但這些算法求解效率比較低,所以提出反向傳播算法來更高效的計算偏導數。(那時的網絡模型還比較淺只有2-3層,參數少。估計即便不適用反向傳播這種高效的算法也能很好的學習。一旦有人想使用更深的網絡自然會遇到這個偏導數無法高效計算的問題,提出反向傳播也就勢在必行了)
反向傳播怎么樣實現高效計算偏導數的? 請先回顧一下當初我們學習微積分時是如何計算偏導數的? (鏈式法則,具體看下面)
式子 e=(a+b)*(b+1) 可以用如下計算圖表達:
令a=2,b=1則有:
當我們訓練神經網絡時,把“損失“ 看作 ”權重參數“ 的函數,需要計算”損失“關於每一個”權重參數“的偏導數(然后用梯度下降法學習)。 神經網絡的權重參數可以是百萬甚至過億級別。因此 反向求導模式(反向傳播算法)可以極大的加速學習。
神經網絡計算圖
對應計算圖如下:(只展開了最后兩層的計算圖)
綠色代表權重參數w_{jk},橙色代表基底參數b_j。可見雖然網絡圖上只是簡單幾條線,計算圖還是蠻復雜的。
現在我們在計算圖箭頭上標出對應的偏導數(只標出了一部分)。

反向傳播四公式

具體流程
BP(反向傳播)算法了。事實上,如果不是要做理論研究而只是想快速應用神經網絡來干活的話,了解如何使用 tensorflow 等幫你處理梯度的成熟的框架可能會比了解算法細節要更好一些。但即使如此,了解神經網絡背后的原理總是不虧的,在某種意義上它也能告訴我們應該選擇怎樣的神經網絡結構來進行具體的訓練
要想知道 BP 算法的推導,我們需要且僅需要知道兩點知識:求導及其鏈式法則;如果想知道原理的話,還需要知道梯度相關的一些理論。同時我們可以從名字上知道,BP 算法和前向傳導算法的“方向”剛好相反:前向傳導是由后往前一路傳導,反向傳播則是由前往后一路傳播
先從直觀上理解一下 BP 的原理。總體上來說,BP 的目的是利用梯度來更新結構中的變量以使得損失函數最小化。
總結:腦皮層中的反向傳播
(1)放電信號不是大問題
★The fact that neurons send spikes rather than real numbers is not a problem-Spikes are a great regularizer.
分析: 生物神經元放電, 而不是以實數計算. 並且電信號本身就是個很好的Weight調整約束器(regularizer).
(2) 時間導數
★Error derivatives can be represented as temporal derivatives.
-This allows a neuron to represent both its activity and its error derivative in the same axon.
分析: 誤差導數可以被分解為線性時間導數, 這樣, 一個神經元就無須准備傳遞兩種Signal了.
(temporal__derivatives∝activity=y)
(3) 放電時刻即是反向傳播的時刻
★Spike-time dependent plasticity is the signature of backpropagation learning.
(4) 雙向權值不是大問題
★The problem that each bottom-up connection needs to have a corresponding top-down connection is a non-problem.
-Random top-down weights work just fine.
分析:生物神經網絡中,逆向權值應該是存在的。即便逆向權值不能反向傳播自適應調整,問題也不大。
本文主要參考:Neural networks and deep learni 百度
