在前幾節(jié)客蹋,我們一直強(qiáng)調(diào)册舞,人工智能運(yùn)行的一個(gè)基本原理是趾代,由人分析具體問題然后抽象出問題與數(shù)據(jù)間的邏輯關(guān)系,這種邏輯關(guān)系往往是一個(gè)數(shù)學(xué)模型伴奥。計(jì)算機(jī)的任務(wù)是根據(jù)大量數(shù)據(jù)的分析來確定數(shù)學(xué)模型中的各種參數(shù)写烤。前面我們?cè)敿?xì)討論過的一個(gè)例子就是二維平面上點(diǎn)集的劃分。
如上圖拾徙,由人對(duì)問題進(jìn)行抽象分析后得出洲炊,兩組數(shù)據(jù)可以用一條通過圓點(diǎn)的直線分割開來。直線所對(duì)應(yīng)的方程就是問題與數(shù)據(jù)間的邏輯關(guān)系尼啡,也就是數(shù)學(xué)模型暂衡,模型的參數(shù)就是直線的斜率,這條直線與橫坐標(biāo)成多大的夾角才能更好的將兩組數(shù)據(jù)區(qū)分開來崖瞭。計(jì)算機(jī)的任務(wù)就是根據(jù)輸入的大量點(diǎn)坐標(biāo)狂巢,然后根據(jù)給定算法步驟把這個(gè)夾角計(jì)算出來。計(jì)算的辦法就是開始先隨機(jī)設(shè)置這個(gè)夾角值书聚,然后檢測直線區(qū)分?jǐn)?shù)據(jù)的效果唧领,如果數(shù)據(jù)集中總共有100個(gè)點(diǎn)藻雌,其中60個(gè)點(diǎn)屬于紅點(diǎn),但是當(dāng)前直線只能將30個(gè)點(diǎn)識(shí)別為紅點(diǎn)斩个,那么誤差就是30個(gè)點(diǎn)胯杭,根據(jù)這個(gè)誤差,算法調(diào)節(jié)直線夾角受啥,使得調(diào)整后能正確識(shí)別的紅點(diǎn)數(shù)量越來越多歉摧,這就是人工智能運(yùn)轉(zhuǎn)的基本原理。
前面說過腔呜,神經(jīng)網(wǎng)絡(luò)模型中叁温,需要修正的參數(shù)是神經(jīng)元鏈路之間的權(quán)重值,問題在于如何修改核畴,如下圖膝但,假定最后神經(jīng)元輸出結(jié)果,跟正確結(jié)果比對(duì)后得到一個(gè)誤差谤草,那么我們?nèi)绾胃鶕?jù)誤差來修正W(1,1) 和 W(2,1)呢跟束?
神經(jīng)網(wǎng)絡(luò)模型的問題在于,任何一個(gè)節(jié)點(diǎn)鏈路權(quán)重的改變都會(huì)對(duì)最終結(jié)果產(chǎn)生影響丑孩。所以當(dāng)我們拿到計(jì)算結(jié)果產(chǎn)生的誤差后冀宴,不可能僅僅修改其中某一個(gè)權(quán)重,而是所有權(quán)重都要相應(yīng)修改温学。接下來問題是略贮,權(quán)重參數(shù)有多個(gè),而最終誤差只有一個(gè)仗岖,那么如何把誤差分配給每個(gè)權(quán)重進(jìn)行調(diào)整呢逃延?一種做法是把誤差平均分配給每個(gè)權(quán)重,如下圖:
但這種大鍋飯機(jī)制不合理轧拄,因?yàn)閃(1,1)權(quán)重大揽祥,傳送給輸出節(jié)點(diǎn)的信號(hào)量就強(qiáng),因此最終結(jié)果的誤差來自于這條鏈路的貢獻(xiàn)相對(duì)就大檩电,因此要調(diào)整的話拄丰,這個(gè)權(quán)重的調(diào)整幅度肯定要比下面鏈路權(quán)重的調(diào)整幅度要大,因此合理的做法是俐末,根據(jù)權(quán)重的比值進(jìn)行相應(yīng)的調(diào)整料按,因此網(wǎng)絡(luò)要把誤差的四分之三傳遞給W(1,1), 四分之一傳遞給W(2,1),于是誤差反向傳播的模式如下圖:
這個(gè)誤差回傳機(jī)制繼續(xù)運(yùn)用到后續(xù)節(jié)點(diǎn)鏈路上鹅搪,這就是所謂的反向傳導(dǎo)站绪。當(dāng)前模型中遭铺,輸出節(jié)點(diǎn)只有一個(gè)丽柿,如果輸出節(jié)點(diǎn)有多個(gè)怎么辦恢准?例如下圖:
上圖網(wǎng)絡(luò)有兩個(gè)輸出節(jié)點(diǎn),兩個(gè)節(jié)點(diǎn)的輸出結(jié)果跟正確結(jié)果都會(huì)產(chǎn)生偏差甫题,其處理方式跟一個(gè)節(jié)點(diǎn)時(shí)一樣馁筐,每個(gè)節(jié)點(diǎn)拿到誤差后,根據(jù)進(jìn)入其節(jié)點(diǎn)的鏈路權(quán)重坠非,等比例的返回給后面節(jié)點(diǎn)敏沉。如果第一個(gè)節(jié)點(diǎn)的輸出結(jié)果為O1, 對(duì)應(yīng)的正確結(jié)果為T1, 那么第一個(gè)輸出節(jié)點(diǎn)的誤差就是E1 = T1 - O1.從上圖可以看出E1會(huì)根據(jù)W(1,1)和W(2,1)的相互比值,同比例的返回給第一層的節(jié)點(diǎn)1和節(jié)點(diǎn)2.誤差E2的分配也同理炎码。這么算來盟迟,用于調(diào)整權(quán)重W(1,1)的誤差比值為:
同理用于調(diào)整權(quán)重W(2,1)的誤差比值為:
舉個(gè)實(shí)際例子,假定E1= 9, W(1,1) = 6, W(2,1) = 3, 那么用于調(diào)整W(1,1)的誤差值為 9 * (6 / (6+3)) = 6, 用于調(diào)整W(2,1)的誤差值為 9 *(3/(3+6)) = 3潦闲。同理E2也依據(jù)相同原則分配給W(1,2)和W(2,2).
如果網(wǎng)絡(luò)有三層攒菠,那么誤差以相同機(jī)制反向傳播,如下圖:
誤差先從最外層節(jié)點(diǎn)開始歉闰,根據(jù)鏈路的權(quán)重比例返回給中間隱藏層節(jié)點(diǎn)1辖众,隱藏層節(jié)點(diǎn)1和輸入層節(jié)點(diǎn)1之間,在根據(jù)兩者的鏈接鏈路比重把中間層節(jié)點(diǎn)1接收到的誤差同比例分配給權(quán)重W(i,h)和敬。如果還有更多的層級(jí)凹炸,這個(gè)反向傳播機(jī)制就一直進(jìn)行下去。我們用一個(gè)具體實(shí)例把誤差的反向傳播機(jī)制走一遍昼弟。
最外層輸出兩個(gè)輸出節(jié)點(diǎn)的誤差分別為1.5和0.5啤它,中間層節(jié)點(diǎn)1與最外層節(jié)點(diǎn)1之間的鏈路權(quán)重為2.0,中間層節(jié)點(diǎn)1與最外層節(jié)點(diǎn)2的鏈路權(quán)重為1.0舱痘,中間層節(jié)點(diǎn)2與最外層節(jié)點(diǎn)1的鏈路權(quán)重為3.0蚕键,中間層節(jié)點(diǎn)2與最外層節(jié)點(diǎn)2的鏈路權(quán)重為4.0,于是最外層節(jié)點(diǎn)1反向傳導(dǎo)給中間層節(jié)點(diǎn)1的誤差為 1.5 * (2 / (2+3)) = 1.5 * (2/5) = 0.6, 最外層節(jié)點(diǎn)2反向傳導(dǎo)給中間層節(jié)點(diǎn)1的誤差為 0.5 * (1 / (1+4)) = 0.5 *(1/5) = 0.1, 因此中間層節(jié)點(diǎn)1接收到的總誤差為0.7.
中間層節(jié)點(diǎn)1與最外層節(jié)點(diǎn)2間鏈路權(quán)重為1.0衰粹,因此最外層節(jié)點(diǎn)1反向傳播給中間層節(jié)點(diǎn)2的誤差為1.5 * (3.0 / (2.0 + 3.0)) = 1.5 * (3/5) = 0.9,中間層節(jié)點(diǎn)2與最外層節(jié)點(diǎn)2的鏈路權(quán)重為4.0锣光,因此最外層節(jié)點(diǎn)2反向傳播給中間層節(jié)點(diǎn)2的誤差為0.5 * (4.0 / (1.0 + 4.0)) = 0.5 * (4/5) = 0.4, 由此中間層節(jié)點(diǎn)2獲得的誤差為1.3.
我們以同樣的方法將誤差從中間層傳到回最外層,如下圖:
最外層節(jié)點(diǎn)1與中間層節(jié)點(diǎn)1的鏈路權(quán)重為3.0铝耻,最外層節(jié)點(diǎn)2余中間層節(jié)點(diǎn)1鏈路權(quán)重為2.0誊爹,因此中間層節(jié)點(diǎn)1反向傳導(dǎo)給最外層節(jié)點(diǎn)1的誤差為 0.7 * (3.0 / (3.0+2.0) ) = 0.7 * (3/5) = 0.42, 中間層節(jié)點(diǎn)1反向傳導(dǎo)給最外層節(jié)點(diǎn)2的誤差為 0.7 * (2.0 / (3.0 + 2.0) ) = 0.28.
最外層節(jié)點(diǎn)1與中間層節(jié)點(diǎn)2的鏈路權(quán)重為1.0,最外層節(jié)點(diǎn)2與中間層節(jié)點(diǎn)2的鏈路權(quán)重為7.0瓢捉,因此中間層節(jié)點(diǎn)2反向傳導(dǎo)給最外層節(jié)點(diǎn)1的誤差為 1.3 * (1.0 / (1.0 + 7.0) ) = 1.3 * (1/8) = 0.1625, 中間層節(jié)點(diǎn)2反向傳導(dǎo)給最外層節(jié)點(diǎn)2的誤差為1.3 * (7.0 / (7.0 + 1.0) ) = 1.1375.
由此最外層節(jié)點(diǎn)1獲得的總誤差為 0.42 + 0.1625 = 0.5825频丘, 最外層節(jié)點(diǎn)2獲得的誤差為0.28 + 1.1375 = 1.4175.
通過反向傳播,我們就能把最外層節(jié)點(diǎn)獲得的誤差傳導(dǎo)給神經(jīng)網(wǎng)絡(luò)每一層的每個(gè)節(jié)點(diǎn)泡态,每個(gè)節(jié)點(diǎn)再根據(jù)獲得的誤差調(diào)整它與下一層網(wǎng)絡(luò)節(jié)點(diǎn)的鏈路權(quán)重搂漠,這個(gè)誤差回傳過程就是神經(jīng)網(wǎng)絡(luò)中經(jīng)常提到的反向傳播機(jī)制。
下一節(jié)我們看看如何使用矩陣快速實(shí)現(xiàn)反向傳播誤差的計(jì)算某弦。
更詳細(xì)的講解和代碼調(diào)試演示過程桐汤,請(qǐng)點(diǎn)擊鏈接
更多技術(shù)信息而克,包括操作系統(tǒng),編譯器怔毛,面試算法员萍,機(jī)器學(xué)習(xí),人工智能拣度,請(qǐng)關(guān)照我的公眾號(hào):