天天看點

【深度學習】神經網絡基礎:反向傳播算法

【深度學習】神經網絡基礎:反向傳播算法

作者:Simona Ivanova

AI/ML  專家

就職于 Science 雜志

  導讀

反向傳播(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 算法。

超神經 延伸閱讀

機器學習基礎——偏導數:

傑佛裡辛頓簡介:

​​​https://zh.wikipedia.org/wiki/%E6%9D%B0%E5%BC%97%E9%87%8C%C2%B7%E8%BE%9B%E9%A1%BF​​

​​http://www.cs.toronto.edu/~hinton/​​

損失函數:​​https://en.wikipedia.org/wiki/Loss_function​​

生物神經元:

ttps://en.wikipedia.org/wiki/Neuron#Histology_and_internal_structure

人工神經網絡算法原理:​​http://www.elecfans.com/rengongzhineng/579673.html​​

繼續閱讀