【深度学习】神经网络基础:反向传播算法
作者:Simona Ivanova
AI/ML? 專家
就職于 Science 雜志
? 導(dǎo)讀
反向傳播(Backpropagation,簡(jiǎn)稱 BP)是目前用來訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,簡(jiǎn)稱 ANN)算法最常用、最有效的方法。
反向傳播最早出現(xiàn)于 20 世紀(jì) 70 年代,但直到 Geoffrey Hinton(杰佛里·辛頓)在1986 年發(fā)表了論文《Learning Representations by Back-Propagating Errors》后才得到各界重視。
杰佛里·辛頓:反向傳播算法的發(fā)明人之一
Geoffrey Hinton(杰弗里?辛頓)
杰佛里·辛頓是一位英國(guó)出生的加拿大計(jì)算機(jī)學(xué)家和心理學(xué)家,在類神經(jīng)網(wǎng)絡(luò)領(lǐng)域貢獻(xiàn)頗多,是反向傳播算法的發(fā)明人之一,也是深度學(xué)習(xí)的積極推動(dòng)者,被稱為神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)之父。
此外,辛頓還是倫敦大學(xué)蓋茨比計(jì)算神經(jīng)科學(xué)中心創(chuàng)始人,目前擔(dān)任加拿大多倫多大學(xué)計(jì)算機(jī)科學(xué)系教授。他的主要研究方向是人工神經(jīng)網(wǎng)絡(luò)在機(jī)器學(xué)習(xí)、記憶、感知和符號(hào)處理等領(lǐng)域的應(yīng)用。目前,辛頓正在探索如何將神經(jīng)網(wǎng)絡(luò)運(yùn)用到無監(jiān)督學(xué)習(xí)算法中。
不過,在辛頓眾多科研成果中,反向傳播是最為著名的,也是目前大部分有監(jiān)督學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)算法的基礎(chǔ),建立在梯度下降法之上。其主要工作原理為:
ANN 算法在實(shí)際運(yùn)行過程中一般分為輸入層、隱藏層和輸出層三類,當(dāng)算法輸出結(jié)果與目標(biāo)結(jié)果出現(xiàn)誤差時(shí),算法會(huì)對(duì)誤差值進(jìn)行計(jì)算,然后通過反向傳播將誤差值反饋到隱藏層,通過修改相關(guān)參數(shù)進(jìn)行調(diào)整,并不斷重復(fù)此步驟,直到得出與預(yù)期相符的結(jié)果。
通過反向傳播可以讓 ANN 算法推導(dǎo)更接近目標(biāo)的結(jié)果,不過,在了解反向傳播如何應(yīng)用于 ANN 算法之前,需要先弄清 ANN 的工作原理。
ANN 的工作原理
ANN 是一種基于人腦神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)模型或者計(jì)算模型,由大量節(jié)點(diǎn)(可以理解為生物神經(jīng)元)相互連接而成。
生物神經(jīng)元
數(shù)學(xué)模型中的單個(gè)節(jié)點(diǎn)
每個(gè)節(jié)點(diǎn)代表一種特定的輸出函數(shù),稱為激勵(lì)函數(shù)(activation function);兩個(gè)節(jié)點(diǎn)間的連接就代表一個(gè)加權(quán)值,也叫權(quán)重值。在 ANN 算法運(yùn)行過程中,每個(gè)連接會(huì)對(duì)應(yīng)一個(gè)權(quán)重 w 和偏移量 b(又稱為 ANN 參數(shù))。輸出值則跟節(jié)點(diǎn)、權(quán)重值和偏移量有關(guān)。
單個(gè)神經(jīng)元模型圖
(其中a1~an 為輸入向量的各個(gè)分量;w1~wn 為權(quán)重值;b為偏移量;σ 為激勵(lì)函數(shù),例如 tanh、Sigmoid、ReLU 等)
一個(gè)完整 ANN 一般包含一個(gè)輸入層、多個(gè)隱藏層和一個(gè)輸出層。其中隱藏層主要由神經(jīng)元組成,承擔(dān)最主要的運(yùn)算工作,在實(shí)際運(yùn)行過程中,每一層的神經(jīng)元都會(huì)做出決策,并將決策傳導(dǎo)至下一個(gè)隱藏層的神經(jīng)元,直至輸出最終結(jié)果。
因此,隱藏層層數(shù)越多,ANN 就越復(fù)雜,結(jié)果也就越準(zhǔn)確。舉例來講,假如現(xiàn)在要通過一個(gè) ANN 確定輸入的動(dòng)物「是貓」或者「不是貓」,輸入這個(gè)動(dòng)物,每個(gè)隱藏層內(nèi)的神經(jīng)元都對(duì)其會(huì)進(jìn)行一次判定,得出結(jié)果,并將結(jié)果向下傳導(dǎo),直到最后一層神經(jīng)元輸出結(jié)果。
這是一個(gè)具有兩個(gè)隱藏層的 ANN 架構(gòu),
兩邊分別為輸入層(左)和輸出層(右),中間為兩個(gè)隱藏層
如果這只動(dòng)物從生物學(xué)上來看是一只貓,但 ANN 顯示它「不是貓」,則證明 ANN 輸出結(jié)果有誤。現(xiàn)在,唯一能做的就是返回隱藏層,對(duì)權(quán)重值和偏移量進(jìn)行調(diào)整,而這個(gè)返回并調(diào)整數(shù)據(jù)的過程就是反向傳播。
但是要實(shí)現(xiàn)反向傳播,還需要依賴一類重要的算法——梯度下降算法(Gradient descent),梯度下降極大地加快了學(xué)習(xí)過程,可以簡(jiǎn)單理解為:從山頂下山時(shí),挑一條梯度最陡的路最快。
梯度下降算法:反向傳播得以實(shí)現(xiàn)的關(guān)鍵
因?yàn)槲覀冃枰粩嘤?jì)算輸出與實(shí)際值的偏差來修改參數(shù)(相差越多修改的幅度越大),所以我們需要用誤差函數(shù)(Error function,也稱損失函數(shù),loss function)來衡量訓(xùn)練集所有樣本最終預(yù)測(cè)值與實(shí)際值的誤差大小。
其中 y^i 為預(yù)測(cè)結(jié)果,yi 為實(shí)際結(jié)果。
這個(gè)表達(dá)式衡量的是訓(xùn)練集所有樣本最終預(yù)測(cè)值與實(shí)際值的誤差大小,僅與輸出層的預(yù)測(cè)類別有關(guān),但這個(gè)預(yù)測(cè)值取決于前面幾層中的參數(shù)。如果我們不想將狗認(rèn)為是貓,就需要讓這個(gè)誤差函數(shù)達(dá)到最小值。
梯度下降算法是其中一種使誤差函數(shù)最小化的算法,也是 ANN 模型訓(xùn)練中常用的優(yōu)化算法,大部分深度學(xué)習(xí)模型都是采用梯度下降算法來進(jìn)行優(yōu)化訓(xùn)練。給定一組函數(shù)參數(shù),梯度下降從一組初始參數(shù)值開始,迭代移向一組使損失函數(shù)最小化的參數(shù)值。這種迭代最小化是使用微積分實(shí)現(xiàn)的,在梯度的負(fù)方向上采取漸變更改。使用梯度下降的典型例子是線性回歸。隨著模型迭代,損失函數(shù)逐漸收斂到最小值。
由于梯度表達(dá)的是函數(shù)在某點(diǎn)變化率最大的方向,通過計(jì)算偏導(dǎo)數(shù)得到,所以使用梯度下降方式,會(huì)極大地加快學(xué)習(xí)進(jìn)程。
梯度下降
在實(shí)際操作中,理論上要先檢查最后一層中的權(quán)重值和偏移量會(huì)如何影響結(jié)果。將誤差函數(shù) E 求偏導(dǎo),就能看出權(quán)重值和偏移量對(duì)誤差函數(shù)的影響。
可以通過鏈?zhǔn)角髮?dǎo)法則來計(jì)算這些偏導(dǎo)數(shù),得出這些參數(shù)變化對(duì)輸出的影響。求導(dǎo)公式如下:
為得到上述表達(dá)式中的未知量,將 zi 分別對(duì) wi 和 bi 求偏導(dǎo):
然后反向計(jì)算誤差函數(shù)關(guān)于每一層權(quán)重值和偏移量的偏導(dǎo)數(shù),并通過梯度下降法來更新調(diào)整后的權(quán)重值和偏移量,直到出錯(cuò)的最初層為止。
這個(gè)過程就是反向傳播算法,又稱 BP 算法,它將輸出層的誤差反向逐層傳播,通過計(jì)算偏導(dǎo)數(shù)來更新網(wǎng)絡(luò)參數(shù)使得誤差函數(shù)最小化,從而讓 ANN 算法得出符合預(yù)期的輸出。
目前,反向傳播主要應(yīng)用于有監(jiān)督學(xué)習(xí)下的 ANN 算法。
超神經(jīng) 延伸閱讀
機(jī)器學(xué)習(xí)基礎(chǔ)——偏導(dǎo)數(shù):
https://blog.csdn.net/qq_37527163/article/details/78171002
理解反向傳播:https://blog.csdn.net/u012223913/article/details/68942581
杰佛里辛頓簡(jiǎn)介:
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/
損失函數(shù):https://en.wikipedia.org/wiki/Loss_function
生物神經(jīng)元:
ttps://en.wikipedia.org/wiki/Neuron#Histology_and_internal_structure
梯度下降算法簡(jiǎn)述:https://blog.csdn.net/u013709270/article/details/78667531
人工神經(jīng)網(wǎng)絡(luò)算法原理:http://www.elecfans.com/rengongzhineng/579673.html
梯度下降法如何實(shí)現(xiàn):https://www.jianshu.com/p/c7e642877b0e
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載(圖文+視頻)機(jī)器學(xué)習(xí)入門系列下載中國(guó)大學(xué)慕課《機(jī)器學(xué)習(xí)》(黃海廣主講)機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)交流qq群955171419,加入微信群請(qǐng)掃碼:總結(jié)
以上是生活随笔為你收集整理的【深度学习】神经网络基础:反向传播算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猛将赵云java,这五位三国猛将临危救主
- 下一篇: 【深度学习】你有哪些深度学习(RNN、C