姓名:李寧?? 學(xué)號(hào):19021110351
?轉(zhuǎn)載自?https://blog.csdn.net/heyc861221/article/details/86236256
【嵌牛導(dǎo)讀】 為了徹底理解深度學(xué)習(xí)碴犬,我們到底需要掌握哪些數(shù)學(xué)知識(shí)呢?
【嵌牛鼻子】 深度學(xué)習(xí)梆暮,大數(shù)據(jù)架構(gòu)服协。
【嵌牛提問】 BP神經(jīng)網(wǎng)絡(luò)的思想 ?
【嵌牛正文】
IT互聯(lián)網(wǎng)行業(yè)有個(gè)有趣現(xiàn)象啦粹,玩資本的人偿荷、玩產(chǎn)品的人、玩技術(shù)的人都能很好的在這個(gè)行業(yè)找到自己的位置并取得成功唠椭,而且可以只懂其中一樣跳纳,不需要懂其余兩樣。玩技術(shù)的人是里面最難做的贪嫂,也是三者收益最低的寺庄,永遠(yuǎn)都要不停學(xué)習(xí),不停把畫餅變成煎餅力崇。
在今年5月底斗塘,Alphago又戰(zhàn)勝了圍棋世界冠軍柯潔,AI再次呈現(xiàn)燎原之勢(shì)席卷科技行業(yè)亮靴,吸引了眾多架構(gòu)師對(duì)這個(gè)領(lǐng)域技術(shù)發(fā)展的持續(xù)關(guān)注和學(xué)習(xí)馍盟,思考AI如何做工程化,如何把我們系統(tǒng)的應(yīng)用架構(gòu)茧吊、中間件分布式架構(gòu)朽合、大數(shù)據(jù)架構(gòu)跟AI相結(jié)合,面向什么樣的應(yīng)用場(chǎng)景落地饱狂,對(duì)未來做好技術(shù)上的規(guī)劃和布局曹步。
之前發(fā)表過一篇文章《如何用70行Java代碼實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)算法》(點(diǎn)擊「閱讀原文」獲得文章),記錄了深度神經(jīng)網(wǎng)絡(luò)的計(jì)算過程和程序?qū)崿F(xiàn)休讳,本文再進(jìn)一步研究一下背后的數(shù)學(xué)原理讲婚。
為了徹底理解深度學(xué)習(xí),我們到底需要掌握哪些數(shù)學(xué)知識(shí)呢俊柔?經(jīng)吵雉铮看到會(huì)列出一系列數(shù)學(xué)科目:微積分、線性代數(shù)雏婶、概率論物赶、復(fù)變函數(shù)、數(shù)值計(jì)算等等酵紫。這些數(shù)學(xué)知識(shí)有相關(guān)性,但實(shí)際上這是一個(gè)最大化的知識(shí)范圍,學(xué)習(xí)成本會(huì)非常久奖地,本文嘗試歸納理解深度學(xué)習(xí)所需要的最小化數(shù)學(xué)知識(shí)和推導(dǎo)過程橄唬。
(以下根據(jù)作者的學(xué)習(xí)理解整理,有誤之處参歹,歡迎專家學(xué)者提出指導(dǎo)批評(píng))仰楚。
多層神經(jīng)網(wǎng)絡(luò)的函數(shù)構(gòu)成關(guān)系
多層神經(jīng)網(wǎng)絡(luò)從輸入層,跨多個(gè)隱含層犬庇,到最后輸出層計(jì)算誤差僧界,從數(shù)學(xué)上可以看做一系列函數(shù)的嵌套組合而成,上一層函數(shù)輸出做為下一層函數(shù)輸入臭挽,如下圖1所示捂襟。
先從誤差函數(shù)說起,深度學(xué)習(xí)的誤差函數(shù)有典型的差平方函數(shù)埋哟,也有交叉熵函數(shù),本文以差平方函數(shù)為例:
Tj代表每個(gè)神經(jīng)元目標(biāo)值郎汪,Oj代表每個(gè)神經(jīng)元輸出值
這里Oj=f(Zj)赤赊,f是激活函數(shù),一般是s函數(shù):
或者relu函數(shù):
Zj是線性函數(shù)(Wij泛指i層和j層節(jié)點(diǎn)連接權(quán)重煞赢,bj泛指j層節(jié)點(diǎn)截距):
Oi再往前依次類推抛计,整個(gè)神經(jīng)網(wǎng)絡(luò)都可以由上面的函數(shù)嵌套去表達(dá)。
現(xiàn)在我們的問題是照筑,如何通過多次調(diào)整上面的Wij和bj吹截,能讓誤差函數(shù)E達(dá)到最小值?
換言之凝危,上面這個(gè)變量w和變量b應(yīng)該怎么取值才能達(dá)到效果呢波俄?為了回答這個(gè)問題,我們先看看誤差函數(shù)的幾何意義蛾默。
誤差函數(shù)的幾何意義及梯度下降
為了方便看懂懦铺,我們從二維和三維去理解誤差函數(shù),如果輸出值Oj只有一項(xiàng)支鸡,并設(shè)定Tj=1冬念,那么Oj和誤差函數(shù)E剛好構(gòu)成X,Y的坐標(biāo)關(guān)系如圖2所示:
也就是Oj只有一項(xiàng)的時(shí)候,誤差函數(shù)E剛好就是一個(gè)簡(jiǎn)單的拋物線牧挣,可以看到它的底部在O=1的時(shí)候急前,這時(shí)E=0最小值。
那么瀑构,當(dāng)O不等于1的時(shí)候裆针,我們需要一種方法調(diào)整O,讓O像一個(gè)小球一樣,把拋物線看做碗据块,它沿著碗切面向下滾動(dòng)码邻,越過底部由于重力作用又返回,直到在底部的位置停止不動(dòng)另假。什么方法能達(dá)到這樣神奇的效果呢像屋,就是數(shù)學(xué)家發(fā)明的導(dǎo)數(shù),如果O每次減去一個(gè)導(dǎo)數(shù)的步長(zhǎng)边篮,在離底部遠(yuǎn)的地方己莺,導(dǎo)數(shù)對(duì)應(yīng)的正切值就大,下降就快戈轿,離底部近的地方凌受,導(dǎo)數(shù)正切值就小,下降就慢思杯,在底部O=1這個(gè)點(diǎn)導(dǎo)數(shù)為0胜蛉,不再下降,并且越過底部后色乾,導(dǎo)數(shù)的正切值變負(fù)數(shù)誊册,于是又調(diào)整了它的方向,剛好達(dá)到重力一樣的效果暖璧。我們把這種方法取個(gè)難懂的名字案怯,叫做梯度下降。
再看看三維的幾何意義澎办,假設(shè)輸出值為O1嘲碱,O2兩項(xiàng),并設(shè)定T1=1局蚀,T2=1那么O1麦锯,O2和誤差函數(shù)E剛好構(gòu)成X,Y琅绅,Z的坐標(biāo)關(guān)系如圖3所示:
任意給定一個(gè)X离咐,Y值,通過函數(shù)E計(jì)算得到一個(gè)Z值奉件,形成一個(gè)三維曲面宵蛀,最小值在谷底。我們繼續(xù)使用上面的梯度下降方法县貌,會(huì)產(chǎn)生一個(gè)問題术陶,現(xiàn)在的變量是O1,O2兩項(xiàng)煤痕,到底使用哪個(gè)求導(dǎo)數(shù)呢梧宫?根據(jù)上面的幾何圖形可以看到接谨,如果O1,O2軸同時(shí)往谷底方向下降塘匣,那么E能達(dá)到最小值脓豪,可以試想O2等于一個(gè)常數(shù),就相當(dāng)于一個(gè)O1和E構(gòu)成的二維截面忌卤,采用上面的方法減去O1導(dǎo)數(shù)的步長(zhǎng)就能得到O1的變化量扫夜,同樣將O1等于一個(gè)常數(shù),能得到O2和E構(gòu)成的二維截面驰徊,并求得O2的變化量笤闯。這種將其他變量視為常數(shù),而只對(duì)當(dāng)前變量求導(dǎo)的方法叫求偏導(dǎo)棍厂。
從上面得知對(duì)二元函數(shù)z=f(x,y)的梯度下降求法颗味,是對(duì)每個(gè)X,Y求偏導(dǎo),那么對(duì)于多元函數(shù)呢牺弹,也是一樣的求法浦马,只是多維世界的幾何圖形就很難表達(dá)了,因?yàn)槲覀兩钤谌S世界张漂,很難想像出克萊因瓶這樣的四維世界晶默,瓶底通過第四維空間穿過瓶身去和瓶口相連,人類的眼睛也只能看到三維世界鹃锈,世界上的三維物體能否通過第四維通道傳送到另外一個(gè)位置上去呢荤胁,看上去像這個(gè)物體消失了瞧预,在其他地方又突然出現(xiàn)了屎债,跑題了,言歸正傳垢油。
由于導(dǎo)數(shù)的特點(diǎn)是到一個(gè)谷底就為0了盆驹,也就是不變化了,所以梯度下降求法有可能只到一個(gè)山窩里滩愁,沒有到達(dá)最深的谷底躯喇,有局部最小值的缺陷,所以我們要不停調(diào)整初始參數(shù)硝枉,和進(jìn)行多次的訓(xùn)練摸索廉丽,爭(zhēng)取能碰到一個(gè)到達(dá)谷底的最好效果。
現(xiàn)在還有個(gè)問題妻味,這里是以O(shè)為變量來解釋梯度下降求法正压,但是其實(shí)我們要求的是Wij和bj的調(diào)整值,根據(jù)上面的結(jié)論责球,我們可以通過誤差函數(shù)E對(duì)Wij和bj求偏導(dǎo)得到焦履,步長(zhǎng)為自己設(shè)置的一個(gè)常數(shù)拓劝,如下:
那么如何求呢,通過前面的第一部分的神經(jīng)網(wǎng)絡(luò)函數(shù)構(gòu)成關(guān)系嘉裤,Wij和bj到誤差函數(shù)E是一個(gè)多層嵌套的函數(shù)關(guān)系郑临,這里需要用到復(fù)合函數(shù)的求偏導(dǎo)方法,截至這里屑宠,我們理解了數(shù)學(xué)原理厢洞,再結(jié)合下面所用到的數(shù)學(xué)公式,就構(gòu)成了推導(dǎo)所需要的最小化數(shù)學(xué)知識(shí)侨把。
推導(dǎo)需要的數(shù)學(xué)公式
1犀变、復(fù)合函數(shù)求偏導(dǎo)公式
2、導(dǎo)數(shù)四則運(yùn)算公式
3秋柄、導(dǎo)數(shù)公式
我們只要記住上面3組公式获枝,就可以支持下面完整的推導(dǎo)了。
數(shù)學(xué)推導(dǎo)過程
先將多層神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)成一個(gè)數(shù)學(xué)問題定義骇笔,如圖4所示:
1省店、對(duì)于輸出層的權(quán)重Wij和截距bj,通過誤差函數(shù)E對(duì)Wij求偏導(dǎo)笨触,由于函數(shù)E不能直接由Wij表達(dá)懦傍,我們根據(jù)第1組的復(fù)合函數(shù)求偏導(dǎo)公式,可以表達(dá)成Oj和Zj對(duì)Wij求偏導(dǎo)的方式:
由于Zj是線性函數(shù)我們是知道的
并且Oj是可以直接用Zj表達(dá)的:
所以E對(duì)Wij求偏導(dǎo)可以寫成f(Zj)的導(dǎo)數(shù)表達(dá)芦劣,同樣對(duì)bj求偏導(dǎo)也可以用f(Zj)的導(dǎo)數(shù)表達(dá)(記做推導(dǎo)公式一)
由于誤差函數(shù)E是可以直接用Oj表達(dá)的粗俱,我們繼續(xù)推導(dǎo)如下,根據(jù)第2組和第3組導(dǎo)數(shù)四則運(yùn)算公式和導(dǎo)數(shù)公式:
最后得到一個(gè)只用f(Zj)的導(dǎo)數(shù)表達(dá)的通用公式虚吟,其中Oj是輸出層的輸出項(xiàng)寸认,Oi是上一層的輸出項(xiàng):
從前面得知,Oj=f(Zj)串慰,f是激活函數(shù)偏塞,一般是s函數(shù)或者relu函數(shù),我們繼續(xù)推導(dǎo)如下:
(1)如果激活函數(shù)是s函數(shù)邦鲫,根據(jù)它的導(dǎo)數(shù)公式:
可以得到結(jié)論一(1)灸叼,權(quán)重Wij和截距bj,的更新公式為:
(2)如果激活函數(shù)是relu函數(shù)庆捺,根據(jù)它的導(dǎo)數(shù)公式:
可以得到結(jié)論一(2)古今,權(quán)重Wij和截距bj,的更新公式為:
2滔以、除了對(duì)輸出層的權(quán)重Wij和截距bj外捉腥,更普遍的隱含層權(quán)重Wki和截距bi更新應(yīng)該如何去求呢?
我們?nèi)匀挥谜`差函數(shù)E對(duì)Wki和bi求偏導(dǎo)醉者,借助前面的推導(dǎo)公式一但狭,可以得到
對(duì)于輸出層來說披诗,誤差函數(shù)E可以直接用Oj表達(dá),但是對(duì)于隱含層立磁,誤差函數(shù)E并不能直接用Oi表達(dá)呈队,根據(jù)多層神經(jīng)網(wǎng)絡(luò)的函數(shù)構(gòu)成關(guān)系,我知道Oj可以通過Oi向前傳遞進(jìn)行一系列函數(shù)組合得到的唱歧。
由于深度學(xué)習(xí)不一定是全連接宪摧,我們假設(shè)Oi只和輸出層j的s個(gè)節(jié)點(diǎn)相連接,下標(biāo)記為j0到j(luò)s颅崩,如上面圖四所示几于,對(duì)于Oi來說,只跟和它節(jié)點(diǎn)相連接的Oj構(gòu)成函數(shù)關(guān)系沿后,跟不相連接的Oj沒有函數(shù)關(guān)系沿彭,所以我們根據(jù)復(fù)合函數(shù)求偏導(dǎo)可以把不相連接的Oj視為常數(shù)。
并且尖滚,根據(jù)函數(shù)構(gòu)成關(guān)系喉刘,Oi可直接構(gòu)成Zjs,Zjs可直接構(gòu)成Oj漆弄,根據(jù)復(fù)合函數(shù)求偏導(dǎo)公式的鏈?zhǔn)綄懛ㄍ茖?dǎo)如下:
同時(shí)睦裳,對(duì)上式的Zjs來說嘶炭,誤差函數(shù)E對(duì)它求偏導(dǎo)谓娃,其余項(xiàng)可以視為常數(shù):
所以,在上式的結(jié)果繼續(xù)推導(dǎo)如下慨畸,可以完全用E對(duì)Zjs的偏導(dǎo)數(shù)來表達(dá):
現(xiàn)在我們將誤差函數(shù)E對(duì)Zjs的偏導(dǎo)數(shù)記做輸出層相連節(jié)點(diǎn)的誤差項(xiàng)倒谷,根據(jù)前面的推導(dǎo)公式一蛛蒙,在計(jì)算Wij更新值可以得到:
所以,隱含層的權(quán)重和截距更新恨锚,可以由輸出層的誤差項(xiàng)得到宇驾,同理也適用于其他隱含層倍靡,都可以由它的后一層(nextlayer)的誤差項(xiàng)得到猴伶,下面是結(jié)論二,隱含層權(quán)重Wki和截距bi的更新公式為:
總結(jié)
通過掌握以上數(shù)學(xué)原理和推導(dǎo)塌西,我們就理解了深度學(xué)習(xí)為什么要這樣計(jì)算他挎,接下來利用推導(dǎo)的結(jié)論一和結(jié)論二,可以完成深度學(xué)習(xí)的算法程序?qū)崿F(xiàn)了捡需,剩下的只是架構(gòu)和工程化的問題办桨。對(duì)卷積類的深度學(xué)習(xí)模型,為了降低訓(xùn)練復(fù)雜性站辉,它的權(quán)重很多是相同的(權(quán)重共享)呢撞,并且只和下一層部分神經(jīng)元節(jié)點(diǎn)連接(局部連接)损姜,數(shù)學(xué)原理、計(jì)算方法殊霞、訓(xùn)練方式和上面是一樣的摧阅,最終的模型結(jié)果都是得到一組參數(shù),用該組參數(shù)保證誤差函數(shù)最接近最小值绷蹲。
————————————————
版權(quán)聲明:本文為CSDN博主「csdn_csdn__AI」的原創(chuàng)文章棒卷,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明祝钢。
原文鏈接:https://blog.csdn.net/heyc861221/article/details/86236256