神經網絡基礎:反向傳播算法
- 2019 年 11 月 29 日
- 筆記

作者:Simona Ivanova
AI/ML 專家
就職於 Science 雜誌
超神經HyperAI 導讀
反向傳播(Backpropagation,簡稱 BP)是目前用來訓練人工神經網絡(Artificial Neural Network,簡稱 ANN)算法最常用、最有效的方法。
反向傳播最早出現於 20 世紀 70 年代,但直到 Geoffrey Hinton(傑佛里·辛頓)在1986 年發表了論文《Learning Representations by Back-Propagating Errors》後才得到各界重視。
傑佛里·辛頓:反向傳播算法的發明人之一

Geoffrey Hinton(傑弗里•辛頓)
傑佛里·辛頓是一位英國出生的加拿大計算機學家和心理學家,在類神經網絡領域貢獻頗多,是反向傳播算法的發明人之一,也是深度學習的積極推動者,被稱為神經網絡和深度學習之父。
此外,辛頓還是倫敦大學蓋茨比計算神經科學中心創始人,目前擔任加拿大多倫多大學計算機科學系教授。他的主要研究方向是人工神經網絡在機器學習、記憶、感知和符號處理等領域的應用。目前,辛頓正在探索如何將神經網絡運用到無監督學習算法中。
不過,在辛頓眾多科研成果中,反向傳播是最為著名的,也是目前大部分有監督學習神經網絡算法的基礎,建立在梯度下降法之上。其主要工作原理為:
ANN 算法在實際運行過程中一般分為輸入層、隱藏層和輸出層三類,當算法輸出結果與目標結果出現誤差時,算法會對誤差值進行計算,然後通過反向傳播將誤差值反饋到隱藏層,通過修改相關參數進行調整,並不斷重複此步驟,直到得出與預期相符的結果。
通過反向傳播可以讓 ANN 算法推導更接近目標的結果,不過,在了解反向傳播如何應用於 ANN 算法之前,需要先弄清 ANN 的工作原理。
ANN 的工作原理
ANN 是一種基於人腦神經網絡的數學模型或者計算模型,由大量節點(可以理解為生物神經元)相互連接而成。

生物神經元

數學模型中的單個節點
每個節點代表一種特定的輸出函數,稱為激勵函數(activation function);兩個節點間的連接就代表一個加權值,也叫權重值。在 ANN 算法運行過程中,每個連接會對應一個權重 w 和偏移量 b(又稱為 ANN 參數)。輸出值則跟節點、權重值和偏移量有關。

單個神經元模型圖
(其中a1~an 為輸入向量的各個分量;w1~wn 為權重值;b為偏移量;σ 為激勵函數,例如 tanh、Sigmoid、ReLU 等)
一個完整 ANN 一般包含一個輸入層、多個隱藏層和一個輸出層。其中隱藏層主要由神經元組成,承擔最主要的運算工作,在實際運行過程中,每一層的神經元都會做出決策,並將決策傳導至下一個隱藏層的神經元,直至輸出最終結果。
因此,隱藏層層數越多,ANN 就越複雜,結果也就越準確。舉例來講,假如現在要通過一個 ANN 確定輸入的動物「是貓」或者「不是貓」,輸入這個動物,每個隱藏層內的神經元都對其會進行一次判定,得出結果,並將結果向下傳導,直到最後一層神經元輸出結果。

這是一個具有兩個隱藏層的 ANN 架構,
兩邊分別為輸入層(左)和輸出層(右),中間為兩個隱藏層
如果這隻動物從生物學上來看是一隻貓,但 ANN 顯示它「不是貓」,則證明 ANN 輸出結果有誤。現在,唯一能做的就是返回隱藏層,對權重值和偏移量進行調整,而這個返回並調整數據的過程就是反向傳播。
但是要實現反向傳播,還需要依賴一類重要的算法——梯度下降算法(Gradient descent),梯度下降極大地加快了學習過程,可以簡單理解為:從山頂下山時,挑一條梯度最陡的路最快。
梯度下降算法:反向傳播得以實現的關鍵
因為我們需要不斷計算輸出與實際值的偏差來修改參數(相差越多修改的幅度越大),所以我們需要用誤差函數(Error function,也稱損失函數,loss function)來衡量訓練集所有樣本最終預測值與實際值的誤差大小。

其中 y^i 為預測結果,yi 為實際結果。
這個表達式衡量的是訓練集所有樣本最終預測值與實際值的誤差大小,僅與輸出層的預測類別有關,但這個預測值取決於前面幾層中的參數。如果我們不想將狗認為是貓,就需要讓這個誤差函數達到最小值。
梯度下降算法是其中一種使誤差函數最小化的算法,也是 ANN 模型訓練中常用的優化算法,大部分深度學習模型都是採用梯度下降算法來進行優化訓練。給定一組函數參數,梯度下降從一組初始參數值開始,迭代移向一組使損失函數最小化的參數值。這種迭代最小化是使用微積分實現的,在梯度的負方向上採取漸變更改。使用梯度下降的典型例子是線性回歸。隨着模型迭代,損失函數逐漸收斂到最小值。
由於梯度表達的是函數在某點變化率最大的方向,通過計算偏導數得到,所以使用梯度下降方式,會極大地加快學習進程。

梯度下降
在實際操作中,理論上要先檢查最後一層中的權重值和偏移量會如何影響結果。將誤差函數 E 求偏導,就能看出權重值和偏移量對誤差函數的影響。

可以通過鏈式求導法則來計算這些偏導數,得出這些參數變化對輸出的影響。求導公式如下:

為得到上述表達式中的未知量,將 zi 分別對 wi 和 bi 求偏導:

然後反向計算誤差函數關於每一層權重值和偏移量的偏導數,並通過梯度下降法來更新調整後的權重值和偏移量,直到出錯的最初層為止。
這個過程就是反向傳播算法,又稱 BP 算法,它將輸出層的誤差反向逐層傳播,通過計算偏導數來更新網絡參數使得誤差函數最小化,從而讓 ANN 算法得出符合預期的輸出。
目前,反向傳播主要應用於有監督學習下的 ANN 算法。