手算梯度下降法,詳解神經(jīng)網(wǎng)絡迭代訓練過程

神經(jīng)網(wǎng)絡本質(zhì)上是一個計算流程虑绵,在前端接收輸入信號后尿瞭,經(jīng)過一層層復雜的運算,在最末端輸出結果翅睛。然后將計算結果和正確結果相比較声搁,得到誤差,再根據(jù)誤差通過相應計算方法改進網(wǎng)絡內(nèi)部的相關參數(shù)捕发,使得網(wǎng)絡下次再接收到同樣的數(shù)據(jù)時疏旨,最終計算輸出得到的結果與正確結果之間的誤差能越來越小。

這里需要搞清楚一個重要概念爬骤,就是如何計算誤差充石,我們列一個表,展示一個在最外層有三個節(jié)點的網(wǎng)絡對誤差的三種計算情況:

這里寫圖片描述

上表列出三種誤差處理情況霞玄,第一種計算誤差的方式是將簡單的將網(wǎng)絡計算結果與正確結果相減骤铃,但采用這種做法,如果我們把所有誤差相加在一起坷剧,結果居然為零庸队,因為第一個節(jié)點的結果與正確結果的差值和第二個節(jié)點結果與正確結果的差值剛好相反次舌,于是誤差就相互抵消掉级乐,由此直接將兩者相減不是一種理想的誤差計算方式罐孝。

第二種是相減后求絕對值陵叽。這樣一來每個節(jié)點間的誤差在加總時就不會相互抵消,但絕對值的存在使得函數(shù)圖像會變成一個"V"字型丛版,在最低點處是一個箭頭巩掺,于是這個函數(shù)在最低點處不連續(xù),梯度下降法不能運用于不連續(xù)的函數(shù)页畦。

第三者是兩者相減后求平方胖替,這種做法使得誤差函數(shù)變成一條光滑的曲線,這是梯度下降法運用的最佳場景豫缨。在上一節(jié)中我們講過独令,我們要根據(jù)數(shù)據(jù)點所在的切線斜率來“適當”的調(diào)整變量的值,后面我們會看到好芭,這里的“適當”就得依賴切線的斜率大小燃箭,一條光滑曲線,也就是一條“連續(xù)”曲線舍败,它在最低點附件切線的斜率會越來越小招狸,這樣的話變量改變的幅度也會越來越小,進而使得我們能夠準確的定位到最低點瓤湘。這里的”連續(xù)“指的就是高等數(shù)學或微積分上的”連續(xù)“瓢颅。

一個神經(jīng)網(wǎng)絡本質(zhì)上是一個含有多個變量的函數(shù)恩尾,其中每條鏈路上的權重對應著一個變量弛说,任何一條鏈路權重的改變會對網(wǎng)絡末端的多個節(jié)點輸出產(chǎn)生影響,可謂是牽一發(fā)而動全身翰意。如果我們把第三中誤差計算方法木人,也就是error_sum = (節(jié)點輸出的結果-正確結果)^2加總,作為最終誤差冀偶,那么我們的目的就是不斷的修改網(wǎng)絡中每條鏈路權重值醒第,使得erro_sum的值最小,這與我們上一節(jié)所講的求一個復雜函數(shù)最小值的目的是一致的进鸠。

前面我們說過稠曼,如果一個函數(shù)擁有兩個變量,那么函數(shù)的值就會在三維空間形成一個曲面客年。如果一個函數(shù)擁有多個變量霞幅,那么它的結果就會形成一個多維度的超平面,這已經(jīng)超出我們?nèi)四X的想象范圍量瓜,我們最多可以想象一個三維的物體司恳。如果我們沿著某個變量的方向?qū)@個超平面切一刀,在切面的邊緣就會形成一條曲線绍傲,例如你拿刀把一個蘋果切開扔傅,在切開的平面邊緣對應著一條曲線耍共,如下圖:

這里寫圖片描述

大家注意看,切面曲線的最低點處猎塞,對應著整個蘋果的最低點處试读。同理我們對一個包含多個變量構成的函數(shù)所形成的超平面,我們沿著某個變量的方向?qū)ζ矫媲幸坏盾ⅲ谇忻娴倪吘壱矔幸粭l曲線:

這里寫圖片描述

我們前面所的error_sum鹏往,它是由(節(jié)點計算那結果-正確結果)^2加總構成的,而“節(jié)點計算結果”卻是受到網(wǎng)絡中每一條鏈路權重的影響骇塘,因此我們可以認為error_sum是一個含有多個變量的函數(shù)伊履,每個變量對應著網(wǎng)絡中每條鏈路的權重。如果我們以某條鏈路的權重為準款违,往這個超平面切一刀唐瀑,那么切面的邊緣就是一條一維曲線,這個曲線的最低點就對應著整個超平面的最低點插爹,假設這條曲線如上圖哄辣,那么我們通過上一節(jié)講解的梯度下降法調(diào)整這條鏈路的權重值,就會使得error_sum的值向最低點走去赠尾。

假設一個神經(jīng)網(wǎng)絡只含有兩條路徑力穗,也就是說error_sum對應著兩個變量,這意味著erro_sum是的結果是三維空間上的一個曲面气嫁,那么我們對每一個變量做曲面的切面当窗,根據(jù)切面的邊緣曲線做切線,進而得到每個變量該如何變化才能走到曲面的最低點寸宵,這兩個變量各自的變化合在一起形成了曲面上一個點走到最低點的路徑崖面,如下圖:

這里寫圖片描述

接下來的問題是,如何沿著某個變量的方向?qū)η媲幸坏逗筇萦埃业礁狞c在切面邊緣曲線上的斜率巫员,在數(shù)學上對應著對根據(jù)某個變量對函數(shù)求偏導數(shù),公式如下:

這里寫圖片描述

偏導數(shù)的結果就是鏈路權重在error_sum函數(shù)這個超平面上做切面后甲棍,切面邊緣處的切線简识,根據(jù)切線斜率,我們就可以調(diào)整鏈路W(j,k)的值感猛,從而使得error_sumn變小七扰。接下來我們通過一個具體實例,看看如何通過偏導數(shù)求得error_sum的最小值唱遭,假設我們有如下網(wǎng)絡:

這里寫圖片描述

網(wǎng)絡的輸出層有兩個節(jié)點戳寸,k1和k2,他們輸出的值由O1和O2表示拷泽,相應的誤差由e1和e2表示疫鹊。根據(jù)前面描述袖瞻,error_sum等于e12+e22,也就是(t1-o1)2+(t2-o2)2拆吆。由于O1與O2是由中間層與最外層節(jié)點間的鏈路權重決定的聋迎,于是調(diào)整這兩層節(jié)點間鏈路權重就能影響最外層的輸出結果,上圖已經(jīng)把影響最終輸出的四條鏈路標注出來枣耀。于是我們分別根據(jù)這四個權重變量求偏導數(shù)霉晕,這樣我們才能確定這些變量如何變化才會影響最終輸出結果:

這里寫圖片描述

我們一定要注意,最外層節(jié)點O(k)捞奕,只與內(nèi)層連接到它的鏈路權重w(jk)相關牺堰,其他未跟它連接的鏈路權重無論如何變化,都不會影響最外層節(jié)點O(k)的輸出結果颅围。同時求偏導數(shù)時伟葫,除了參與求導的變量會留下來,其他無關變量會在求導的過程中被消除掉院促,上面公式中筏养,參與求導的是變量w(jk),與該變量對應的就是O(k)常拓,所以上面的公式可以簡化如下:

這里寫圖片描述

接下來我們根據(jù)微積分原理渐溶,對上面的求導運算進行展開,由于t(k)對應的是正確數(shù)值弄抬,因此它是個常量茎辐,于是變量w(jk)與它沒有關聯(lián),而節(jié)點輸出O(k)與權重w(jk)是緊密相關的眉睹,因為信號從中間層節(jié)點j輸出后荔茬,經(jīng)過鏈路w(jk)后進入節(jié)點k才產(chǎn)生了輸出O(k)。也就是說O(k)是將w(jk)經(jīng)由某種函數(shù)運算后所得的結果竹海,于是根據(jù)求導的鏈式法則,我們有:

這里寫圖片描述

結合上下兩個公式丐黄,我們可以把對變量O(k)的求導做進一步展開后如下:


這里寫圖片描述

接下來我們得看上邊公式右邊斋配,對W(jk)的求導如何展開,前面我們早已了解灌闺,O(k)的值是由進入它的鏈路權重乘以經(jīng)過鏈路的信號量艰争,加總后再經(jīng)過激活函數(shù)運算后所得的結果,于是上邊公式右邊對變量w(jk)求導的部分就可以展開如下:

這里寫圖片描述

上面的變量O(j)就是中間層節(jié)點j輸出到鏈路jk上的信號量」鸲裕現(xiàn)在的問題是甩卓,如何對激活函數(shù)求導,我們完全可以根據(jù)求導數(shù)的方法蕉斜,一步一步的算出來逾柿,這里我們忽略這些繁瑣機械的流程缀棍,直接給出激活函數(shù)求導后的結果:

這里寫圖片描述

于是我們把這幾步連續(xù)求導的結果結合起來,得到如下公式:

這里寫圖片描述

這里要注意到机错,我們是把經(jīng)過鏈路jk的信號量與鏈路權重做乘積之后再傳入激活函數(shù)爬范,而所謂的“jk的信號量與鏈路權重做乘積"實際上對應的正是一個有關權重w(jk)的函數(shù)f=w(jk)*O(j),因此根據(jù)求導的鏈式法則弱匪,我們對f也要做一次導數(shù)青瀑,求導結果正好是O(j)。我們可以把上面式子里的2拿掉萧诫,因為我們關心的是切線斜率的方向斥难,也就是上面求導結果是正是負,這涉及到我們是應該增加w(jk)還是應該減少w(jk)帘饶,正負確定了蘸炸,至于具體值是多少,并不影響我們最后的運算尖奔,所以經(jīng)過鏈式法則一系列求導后搭儒,我們得到最終結果如下:


這里寫圖片描述

上面所得結果可以分解成三部分,第一部分是正確結果與節(jié)點輸出結果的差值提茁,也就是誤差淹禾,紅色部分對應的是節(jié)點的激活函數(shù),所有輸入該節(jié)點的鏈路把經(jīng)過其上的信號與鏈路權重做乘積后加總茴扁,在把加總結果進行激活函數(shù)運算铃岔,最后一部分是鏈路w(jk)前端節(jié)點輸出的信號值。

我們這里談到的數(shù)學是涉及神經(jīng)網(wǎng)絡最核心的部分峭火,除了這里有些數(shù)學知識需要掌握外毁习,其他的就都是有關工程實踐的問題了。我們這里運算的是中間層和最外層節(jié)點間的鏈路權重求偏導數(shù)結果卖丸,那么輸入層和中間層之間鏈路權重的求偏導數(shù)過程其實是完全一模一樣的纺且!我們只需要把上面等式中的k換成j,j換成i就可以了稍浆,所以輸入層和中間層間载碌,鏈路權重的偏導公式如下:

這里寫圖片描述

前面我們講梯度下降法時說,要根據(jù)變量對應切線的斜率對變量做”適度“調(diào)整衅枫,調(diào)整的方向與斜率的方向相反嫁艇,我們可以根據(jù)下面公式進行權重調(diào)整:

這里寫圖片描述

公式中的變量a,表示學習率弦撩,它決定了調(diào)整步伐的大小步咪,前面的符號用于表示調(diào)整的方向與斜率的方向相反,如果斜率是賦值益楼,那么我們就增加變量w(jk)的值猾漫,如果斜率是正的点晴,我們就減少變量w(jk)的值。無論是中間層和輸出層静袖,還是輸入層和中間層觉鼻,我們都使用上面的公式修改鏈路權重。

我們把上邊公式中右邊減號后面的部分當做鏈路調(diào)整的增量队橙,記作△w(jk),那么就有:
△w(jk) = E(k) * (S(k)*(1 - S(k)))*O(j)
其中E(k) = (T(k) - O(k))也就是節(jié)點k對應的誤差坠陈,S(k)對應的就是節(jié)點k對輸入的信號量求和后做激活函數(shù)的結果,O(j)是節(jié)點j的輸出信號量捐康,這幾部分分別對應上面求偏導公式中的紫色仇矾,紅色,和綠色部分解总,如此一來贮匕,每個節(jié)點的增量就可以對應成矩陣運算:

這里寫圖片描述

我們 一眼上面的矩陣運算會讓我們眼花,為了讓大家更清楚上面公式中各部分分量的組成花枫,我們把前面的求導公式再次做個變換:

這里寫圖片描述

紅色部分就是矩陣運算右邊對應的分量S(k)刻盐。接下來我們對一個實例的手算進一步對加深對推導過程的理解。下面三層網(wǎng)絡是我們前幾節(jié)運算過的例子劳翰,我們重新把它拿出來敦锌,根據(jù)我們前面推導的權重變換流程,手動做一次網(wǎng)絡的訓練流程:

這里寫圖片描述

我們要計算中間層節(jié)點1與輸出層節(jié)點1之間鏈路權重的增量佳簸,根據(jù)最外層節(jié)點得到的誤差1.5乙墙,中間層節(jié)點1對應的信號量是0.4,中間層節(jié)點2對應的信號量是0.5生均,當前兩個節(jié)點間的鏈路權重w(11)是2.0听想,我們直接套入前面推導的偏導公式進行計算:

這里寫圖片描述

讓我們一步一步的套入公式進行計算,如果我們要更改w(11)的值马胧,計算步驟如下:
第一步t(k) - O(k) 對應最外層輸出節(jié)點的誤差汉买,例如e1 = 1.5。

第二步就是求和
這里寫圖片描述
漓雅,對應的計算就是(2.0*0.4)+(0.5*3.0) = 0.8+1.5=2.3
第三步計算sigmod:1/1+exp(-2.3)對應的值為0.909录别,于是中間部分對應為9.909*(1-0.909) = 0.082

第四步計算O(j),也就是0.4.
把所有結果合在一起算就是:-1.5*0.082*0.4 = -0.0492邻吞,如果我們把學習率設置為1,那么w(11)的修改量為:-1*(1)*(-0.0492) = 0.0492,修改后的W(11)值就是2.0+0.0492=2.0492葫男。

我們看到一次變動的步伐很小抱冷,但實際應用時,上面的修改步驟會進行成千上萬次梢褐,于是最后W(11)有可能會產(chǎn)生很明顯的變化旺遮。從下一節(jié)開始赵讯,我們就進入到使用python編碼實現(xiàn)我們這幾節(jié)所講的算法理論。

更多技術信息耿眉,包括操作系統(tǒng)边翼,編譯器,面試算法鸣剪,機器學習组底,人工智能,請關照我的公眾號:


這里寫圖片描述
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筐骇,一起剝皮案震驚了整個濱河市债鸡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铛纬,老刑警劉巖厌均,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異告唆,居然都是意外死亡棺弊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門擒悬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來模她,“玉大人,你說我怎么就攤上這事茄螃》觳担” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵归苍,是天一觀的道長用狱。 經(jīng)常有香客問我,道長拼弃,這世上最難降的妖魔是什么夏伊? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮吻氧,結果婚禮上溺忧,老公的妹妹穿的比我還像新娘。我一直安慰自己盯孙,他們只是感情好鲁森,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著振惰,像睡著了一般歌溉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天痛垛,我揣著相機與錄音草慧,去河邊找鬼。 笑死匙头,一個胖子當著我的面吹牛漫谷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蹂析,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼舔示,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了识窿?” 一聲冷哼從身側(cè)響起斩郎,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喻频,沒想到半個月后缩宜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡甥温,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年锻煌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姻蚓。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡宋梧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狰挡,到底是詐尸還是另有隱情捂龄,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布加叁,位于F島的核電站倦沧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏它匕。R本人自食惡果不足惜展融,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豫柬。 院中可真熱鬧告希,春花似錦、人聲如沸烧给。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽础嫡。三九已至杭跪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驰吓,已是汗流浹背涧尿。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留檬贰,地道東北人姑廉。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像翁涤,于是被迫代替她去往敵國和親桥言。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容