反向傳播算法
反向傳播(英語:Backpropagation,縮寫為BP)是「誤差反向傳播」的簡稱,是一種與最優化方法(如梯度下降法)結合使用的,用來訓練人工神經網絡的常見方法。該方法對網絡中所有權重計算損失函數的梯度。這個梯度會反饋給最優化方法,用來更新權值以最小化損失函數。
反向傳播要求有對每個輸入值想得到的已知輸出,來計算損失函數梯度。因此,它通常被認為是一種監督式學習方法,雖然它也用在一些無監督網絡(如自動編碼器)中。它是多層前饋網絡的Delta規則的推廣,可以用鏈式法則對每層疊代計算梯度。反向傳播要求人工神經元(或「節點」)的激勵函數可微。
動機編輯
任何監督式學習算法的目標是找到一個能把一組輸入最好地映射到其正確的輸出的函數。例如一個簡單的分類任務,其中輸入是動物的圖像,正確的輸出將是動物的名稱。一些輸入和輸出模式可以很容易地通過單層神經網絡(如感知器)學習。但是這些單層的感知機只能學習一些比較簡單的模式,例如那些非線性可分的模式。例如,人可以通過識別動物的圖像的某些特徵進行分類,例如肢的數目,皮膚的紋理(無論是毛皮,羽毛,鱗片等),該動物的體型,以及種種其他特徵。但是,單層神經網絡必須僅僅使用圖像中的像素的強度來學習一個輸出一個標籤函數。因為它被限制為僅具有一個層,所以沒有辦法從輸入中學習到任何抽象特徵。多層的網絡克服了這一限制,因為它可以創建內部表示,並在每一層學習不同的特徵。[1] 第一層可能負責從圖像的單個像素的輸入學習線條的走向。第二層可能就會結合第一層所學並學習識別簡單形狀(如圓形)。每升高一層就學習越來越多的抽象特徵,如上文提到的用來圖像分類。每一層都是從它下方的層中找到模式,就是這種能力創建了獨立於為多層網絡提供能量的外界輸入的內部表達形式。 反向傳播算法的發展的目標和動機是找到一種訓練的多層神經網絡的方法,於是它可以學習合適的內部表達來讓它學習任意的輸入到輸出的映射。[1]
概括編輯
反向傳播算法(BP 算法)主要由兩個階段組成:激勵傳播與權重更新。
第1階段:激勵傳播編輯
每次疊代中的傳播環節包含兩步:
- (前向傳播階段)將訓練輸入送入網絡以獲得激勵響應;
- (反向傳播階段)將激勵響應同訓練輸入對應的目標輸出求差,從而獲得輸出層和隱藏層的響應誤差。
第2階段:權重更新編輯
對於每個突觸上的權重,按照以下步驟進行更新:
- 將輸入激勵和響應誤差相乘,從而獲得權重的梯度;
- 將這個梯度乘上一個比例並取反後加到權重上。
這個比例(百分比)將會影響到訓練過程的速度和效果,因此成為「訓練因子」。梯度的方向指明了誤差擴大的方向,因此在更新權重的時候需要對其取反,從而減小權重引起的誤差。
第 1 和第 2 階段可以反覆循環疊代,直到網絡對輸入的響應達到滿意的預定的目標範圍為止。
算法編輯
三層網絡算法(只有一個隱藏層):
初始化网络权值(通常是小的随机值)
do
forEach 训练样本 ex
prediction = neural-net-output(network, ex) // 正向传递
actual = teacher-output(ex)
计算输出单元的误差 (prediction - actual)
计算 对于所有隐藏层到输出层的权值 // 反向传递
计算 对于所有输入层到隐藏层的权值 // 继续反向传递
更新网络权值 // 输入层不会被误差估计改变
until 所有样本正确分类或满足其他停止标准
return 该网络
這個算法的名稱意味着誤差會從輸出結點反向傳播到輸入結點。嚴格地講,反向傳播算法對網絡的可修改權值計算了網絡誤差的梯度。[2] 這個梯度會在簡單隨機梯度下降法中經常用來求最小化誤差的權重。通常「反向傳播」這個詞使用更一般的含義,用來指涵蓋了計算梯度以及在隨機梯度下降法中使用的整個過程。在適用反向傳播算法的網絡中,它通常可以快速收斂到令人滿意的極小值。
BP網絡都是多層感知機(通常都會有一個輸入層、一個隱藏層及一個輸出層)。為了使隱藏層能夠適合所有有用的函數,多層網絡必須具有用於多個層的非線性激活函數:僅用線性激活函數的多層網絡會與相當於單層線性網絡。常用的非線性激活函數有邏輯函數、柔性最大函數和高斯函數。
用反向傳播算法求梯度已被重新發現多次,是更加一般的自動微分技術在反向積累模式的特例。
直觀理解編輯
學習作為一個優化問題編輯
在給出反向傳播算法的數學推導之前,培養關於神經元的真實輸出與特定的訓練情況的正確輸出間的直觀感受是很有幫助的。考慮一個有兩個輸入單元、一個輸出單元、沒有隱藏單元的簡單神經網絡。每個神經元都使用輸入的加權和作為線性輸出[note 1]。
最初在訓練之前,會隨機分配權重。之後神經元根據訓練實例進行學習,在此情況下包含元組 ( , , ) 的集合,其中 與 是網絡的輸入, 為正確輸出(在給定相同的輸入時網絡最終應當產生的輸出)。網絡在給定 和 時,會計算一個輸出 ,很可能與 不同(因為權重最初是隨機的)。衡量期望輸出 與實際輸出 之間的差異的一個常見方法是採用平方誤差測度:
- ,
其中 為差異或誤差。
舉例來講,考慮單一訓練實例的網絡: ,輸入 與 均為1,正確輸出 為 0。現在若將實際輸出 畫在x軸,誤差 畫在 軸,得出的是一條拋物線。拋物線的極小值對應輸出 ,最小化了誤差 。對於單一訓練實例,極小值還會接觸到 軸,這意味着誤差為零,網絡可以產生與期望輸出 完全匹配的輸出 。因此,把輸入映射到輸出的問題就化為了一個找到一個能產生最小誤差的函數的最佳化問題。
然而,一個神經元的輸出取決於其所有輸入的加權總和:
- ,
其中 和 是從輸入單元到輸出單元相連的權重。因此,誤差取決於輸入到該神經元的權重,也是網絡要學習最終需要改變的。若每個權重都畫在一個水平的軸上,而誤差畫在垂直軸上,得出的就是一個拋物面(若一個神經元有 個權重,則誤差曲面的維度就會是 ,因而就是二維拋物線的 維等價)。
反向傳播算法的目的是找到一組能最大限度地減小誤差的權重。尋找拋物線或任意維度中的任何函數的極大值的方法有若干種。其中一種方法是通過求解方程組,但這依賴於網絡是一個線性系統,而目標也需要可以訓練多層非線性網絡(因為多層線性網絡與單層網絡等價)。在反向傳播中使用的方法是梯度下降法。
運用類比理解梯度下降法編輯
梯度下降法背後的直觀感受可以用假設情境進行說明。一個被卡在山上的人正在試圖下山(即試圖找到極小值)。大霧使得能見度非常低。因此,下山的道路是看不見的,所以他必須利用局部信息來找到極小值。他可以使用梯度下降法,該方法涉及到察看在他當前位置山的陡峭程度,然後沿着負陡度(即下坡)最大的方向前進。如果他要找到山頂(即極大值)的話,他需要沿着正陡度(即上坡)最大的方向前進。使用此方法,他會最終找到下山的路。不過,要假設山的陡度不能通過簡單地觀察得到,而需要複雜的工具測量,而這個工具此人恰好有。需要相當長的一段時間用儀器測量山的陡峭度,因此如果他想在日落之前下山,就需要最小化儀器的使用率。問題就在於怎樣選取他測量山的陡峭度的頻率才不致偏離路線。
在這個類比中,此人代表反向傳播算法,而下山路徑表示能使誤差最小化的權重集合。山的陡度表示誤差曲面在該點的斜率。他要前行的方向對應於誤差曲面在該點的梯度。用來測量陡峭度的工具是微分(誤差曲面的斜率可以通過對平方誤差函數在該點求導數計算出來)。他在兩次測量之間前行的距離(與測量頻率成正比)是算法的學習速率。參見限制一節中對此類型「爬山」算法的限制的討論。
推導編輯
由於反向傳播使用梯度下降法,需要計算平方誤差函數對網絡權重的導數。假設對於一個輸出神經元,[note 2] 平方誤差函數為:
- ,
其中
- 為平方誤差,
- 為訓練樣本的目標輸出,
- 為輸出神經元的實際輸出。
加入系數 是為了抵消微分出來的指數。之後,該表達式會乘以一個任意的學習速率,因此在這裏乘上一個常系數是沒有關係的。 對每個神經元 ,它的輸出 定義為
- .
通向一個神經元的輸入 是之前神經元的輸出 的加權和。若該神經元處於輸入層後的第一層,輸入層的輸出 就是網絡的輸入 。該神經元的輸入數量是 。變量 表示神經元 與 之間的權重。
激活函數 一般是非線性可微函數。常用作激活函數的是邏輯函數:
其導數的形式很好:
求誤差的導數編輯
在右邊的最後一項中,只有加權和 取決於 ,因此
- .
神經元 的輸出對其輸入的導數就是激活函數的偏導數(這裏假定使用邏輯函數):
這就是為什麼反向傳播需要的激活函數是可微的。
如果神經元在輸出層中,因為此時 以及
所以第一項可以直接算出。
但如果 是網絡中任一內層,求 關於 的導數就不太簡單了。
考慮 為接受來自神經元 的輸入的所有神經元 的輸入的函數,
並關於 取全微分,可以得到該導數的一個遞歸表達式:
因此,若已知所有關於下一層(更接近輸出神經元的一層)的輸出 的導數,則可以計算 的導數。
把它們放在一起:
其中
要使用梯度下降法更新 ,必須選擇一個學習速率 。要加在原本的權重上的權重的變化,等於學習速率與梯度的乘積,乘以 :
之所以要乘以 是因為要更新誤差函數極小值而不是極大值的方向。
對於單層網絡,這個表達式變為Delta規則。 要想更好地理解反向傳播是如何起作用的,下面是一個例子來說明它:The Back Propagation Algorithm,12頁。
學習模式編輯
有可供選擇的三種學習模式(Mode):在線,批量和隨機。在在線和隨機學習,每次傳播後被立即做一個權重的更新。在批量學習模式,權重更新前有許多傳播發生。在線學習被用於提供新的型態(pattern)的連續流的動態環境。隨機學習和批量學習都使用靜態型態(pattern)的一個訓練集合。隨機學習以一個隨機的順序經過數據集合,以減少陷入局部極小值的機會。隨機學習也比批量學習更快,因為權重在每次傳播後被立即更新。然而批量學習將產生一個更加穩定下降到一個局部最小值,因為每次更新都是基於所有型態被進行的。
限制編輯
| 此章節未列出參考或來源。 (December 2012) |
歷史編輯
Vapnik引用(Bryson, A.E.; W.F. Denham; S.E. Dreyfus. Optimal programming problems with inequality constraints. I: Necessary conditions for extremal solutions. AIAA J. 1, 11 (1963) 2544-2550)在他的書《支持向量機》中首次發表反向傳播算法。在1969年Arthur E. Bryson和何毓琦將其描述為多級動態系統優化方法。[5][6] 直到1974年以後在神經網絡的背景下應用,並由Paul Werbos[7]、David E. Rumelhart、傑弗里·辛頓和Ronald J. Williams[1][8]的著作,它才獲得認可,並引發了一場人工神經網絡的研究領域的「文藝復興」。在21世紀初人們對其失去興趣,但在2010年後又擁有了興趣,如今可以通過GPU等大型現代運算器件用於訓練更大的網絡。例如在2013年,頂級語音識別器現在使用反向傳播算法訓練神經網絡。
注釋編輯
- ^ One may notice that multi-layer neural networks use non-linear activation functions, so an example with linear neurons seems obscure. However, even though the error surface of multi-layer networks are much more complicated, locally they can be approximated by a paraboloid. Therefore, linear neurons are used for simplicity and easier understanding.
- ^ 有些情況下,輸出是多個神經元(輸出多維向量),這時平方誤差函數是誤差向量的範數平方
參見編輯
參考文獻編輯
- ^ 1.0 1.1 1.2 Rumelhart, David E.; Hinton, Geoffrey E.; Williams, Ronald J. Learning representations by back-propagating errors. Nature. 8 October 1986, 323 (6088): 533–536. doi:10.1038/323533a0.
- ^ Paul J. Werbos (1994). The Roots of Backpropagation. From Ordered Derivatives to Neural Networks and Political Forecasting. New York, NY: John Wiley & Sons, Inc.
- ^ Lalis, Jeremias; Gerardo, Bobby; Byun, Yung-Cheol. An Adaptive Stopping Criterion for Backpropagation Learning in Feedforward Neural Network (PDF). International Journal of Multimedia and Ubiquitous Engineering. 2014, 9 (8): 149–156 [17 March 2015]. doi:10.14257/ijmue.2014.9.8.13. (原始內容 (PDF)存檔於2016-03-04).
- ^ ISBN 1-931841-08-X,
- ^ Stuart Russell; Peter Norvig. Artificial Intelligence A Modern Approach. : 578.
The most popular method for learning in multilayer networks is called Back-propagation. It was first invented in 1969 by Bryson and Ho, but was largely ignored until the mid-1980s.
- ^ Arthur Earl Bryson, Yu-Chi Ho. Applied optimal control: optimization, estimation, and control. Blaisdell Publishing Company or Xerox College Publishing. 1969: 481.
- ^ Paul J. Werbos. Beyond Regression: New Tools for Prediction and Analysis in the Behavioral Sciences. PhD thesis, Harvard University, 1974
- ^ Alpaydın, Ethem. Introduction to machine learning 2nd ed. Cambridge, Mass.: MIT Press. 2010: 250. ISBN 978-0-262-01243-0.
...and hence the name backpropagation was coined (Rumelhart, Hinton, and Williams 1986a).
外部連結編輯
- A Gentle Introduction to Backpropagation - An intuitive tutorial by Shashi Sathyanarayana The article contains pseudocode ("Training Wheels for Training Neural Networks") for implementing the algorithm.
- Neural Network Back-Propagation for Programmers (a tutorial)
- Backpropagation for mathematicians
- Chapter 7 The backpropagation algorithm of Neural Networks - A Systematic Introduction by Raúl Rojas (ISBN 978-3540605058)
- Implementation of BackPropagation in C++
- Implementation of BackPropagation in C#
- Implementation of BackPropagation in Java
- Another Implementation of BackPropagation in Java
- Implementation of BackPropagation in Ruby
- Implementation of BackPropagation in Python
- Implementation of BackPropagation in PHP
- Quick explanation of the backpropagation algorithm
- Graphical explanation of the backpropagation algorithm
- Concise explanation of the backpropagation algorithm using math notation by Anand Venkataraman
- Backpropagation neural network tutorial at the Wikiversity