當前位置:
首頁 > 科技 > 為了徹底理解深度學習,我們到底需要掌握哪些數學知識呢?答案在本文

為了徹底理解深度學習,我們到底需要掌握哪些數學知識呢?答案在本文

IT互聯網行業有個有趣現象,玩資本的人、玩產品的人、玩技術的人都能很好的在這個行業找到自己的位置並取得成功,而且可以只懂其中一樣,不需要懂其餘兩樣。玩技術的人是裡面最難做的,也是三者收益最低的,永遠都要不停學習,不停把畫餅變成煎餅。

在今年5月底,Alphago又戰勝了圍棋世界冠軍柯潔,AI再次呈現燎原之勢席捲科技行業,吸引了眾多架構師對這個領域技術發展的持續關注和學習,思考AI如何做工程化,如何把我們系統的應用架構、中間件分散式架構、大數據架構跟AI相結合,面向什麼樣的應用場景落地,對未來做好技術上的規劃和布局。

為了徹底理解深度學習,我們到底需要掌握哪些數學知識呢?經常看到會列出一系列數學科目:微積分、線性代數、概率論、複變函數、數值計算等等。這些數學知識有相關性,但實際上這是一個最大化的知識範圍,學習成本會非常久,本文嘗試歸納理解深度學習所需要的最小化數學知識和推導過程。

(以下根據作者的學習理解整理,有誤之處,歡迎專家學者提出指導批評)。

多層神經網路的函數構成關係

多層神經網路從輸入層,跨多個隱含層,到最後輸出層計算誤差,從數學上可以看做一系列函數的嵌套組合而成,上一層函數輸出做為下一層函數輸入,如下圖1所示。

圖1

先從誤差函數說起,深度學習的誤差函數有典型的差平方函數,也有交叉熵函數,本文以差平方函數為例:

Tj代表每個神經元目標值,Oj代表每個神經元輸出值

這裡Oj=f(Zj),f是激活函數,一般是s函數:

或者relu函數:

Zj是線性函數(Wij泛指i層和j層節點連接權重,bj泛指j層節點截距):

Oi再往前依次類推,整個神經網路都可以由上面的函數嵌套去表達。

現在我們的問題是,如何通過多次調整上面的Wijbj,能讓誤差函數E達到最小值?

換言之,上面這個變數w和變數b應該怎麼取值才能達到效果呢?為了回答這個問題,我們先看看誤差函數的幾何意義。

誤差函數的幾何意義及梯度下降

為了方便看懂,我們從二維和三維去理解誤差函數,如果輸出值Oj只有一項,並設定Tj=1,那麼Oj和誤差函數E剛好構成X,Y的坐標關係如2所示:

圖2

也就是Oj只有一項的時候,誤差函數E剛好就是一個簡單的拋物線,可以看到它的底部在O=1的時候,這時E=0最小值。

那麼,當O不等於1的時候,我們需要一種方法調整O,讓O像一個小球一樣,把拋物線看做碗,它沿著碗切面向下滾動,越過底部由於重力作用又返回,直到在底部的位置停止不動。什麼方法能達到這樣神奇的效果呢,就是數學家發明的導數,如果O每次減去一個導數的步長,在離底部遠的地方,導數對應的正切值就大,下降就快,離底部近的地方,導數正切值就小,下降就慢,在底部O=1這個點導數為0,不再下降,並且越過底部後,導數的正切值變負數,於是又調整了它的方向,剛好達到重力一樣的效果。我們把這種方法取個難懂的名字,叫做梯度下降。

再看看三維的幾何意義,假設輸出值為O1,O2兩項,並設定T1=1,T2=1那麼O1,O2和誤差函數E剛好構成X,Y,Z的坐標關係如3所示:

E=1/2(1-O1)2+1/2(1-O2)2

圖3

任意給定一個X,Y值,通過函數E計算得到一個Z值,形成一個三維曲面,最小值在谷底。我們繼續使用上面的梯度下降方法,會產生一個問題,現在的變數是O1,O2兩項,到底使用哪個求導數呢?根據上面的幾何圖形可以看到,如果O1,O2軸同時往谷底方向下降,那麼E能達到最小值,可以試想O2等於一個常數,就相當於一個O1和E構成的二維截面,採用上面的方法減去O1導數的步長就能得到O1的變化量,同樣將O1等於一個常數,能得到O2和E構成的二維截面,並求得O2的變化量。這種將其他變數視為常數,而只對當前變數求導的方法叫求偏導。

從上面得知對二元函數z=f(x,y)的梯度下降求法,是對每個X,Y求偏導,那麼對於多元函數呢,也是一樣的求法,只是多維世界的幾何圖形就很難表達了,因為我們生活在三維世界,很難想像出克萊因瓶這樣的四維世界,瓶底通過第四維空間穿過瓶身去和瓶口相連,人類的眼睛也只能看到三維世界,世界上的三維物體能否通過第四維通道傳送到另外一個位置上去呢,看上去像這個物體消失了,在其他地方又突然出現了,跑題了,言歸正傳。

由於導數的特點是到一個谷底就為0了,也就是不變化了,所以梯度下降求法有可能只到一個山窩裡,沒有到達最深的谷底,有局部最小值的缺陷,所以我們要不停調整初始參數,和進行多次的訓練摸索,爭取能碰到一個到達谷底的最好效果。

現在還有個問題,這裡是以O為變數來解釋梯度下降求法,但是其實我們要求的是Wij和bj的調整值,根據上面的結論,我們可以通過誤差函數E對Wij和bj求偏導得到,步長為自己設置的一個常數,如下:

那麼如何求呢,通過前面的第一部分的神經網路函數構成關係,Wij和bj到誤差函數E是一個多層嵌套的函數關係,這裡需要用到複合函數的求偏導方法,截至這裡,我們理解了數學原理,再結合下面所用到的數學公式,就構成了推導所需要的最小化數學知識。

推導需要的數學公式

1、複合函數求偏導公式

2、導數四則運算公式

3、導數公式

我們只要記住上面3組公式,就可以支持下面完整的推導了。

數學推導過程

先將多層神經網路轉成一個數學問題定義,如4所示:

圖4

1、對於輸出層的權重Wij和截距bj,通過誤差函數E對Wij求偏導,由於函數E不能直接由Wij表達,我們根據第1組的複合函數求偏導公式,可以表達成Oj和Zj對Wij求偏導的方式:

由於Zj是線性函數我們是知道的

並且Oj是可以直接用Zj表達的:

所以E對Wij求偏導可以寫成f(Zj)的導數表達,同樣對bj求偏導也可以用f(Zj)的導數表達(記做推導公式一

由於誤差函數E是可以直接用Oj表達的,我們繼續推導如下,根據第2組和第3組導數四則運算公式和導數公式:

最後得到一個只用f(Zj)的導數表達的通用公式,其中Oj是輸出層的輸出項,Oi是上一層的輸出項:

從前面得知,Oj=f(Zj),f是激活函數,一般是s函數或者relu函數,我們繼續推導如下:

(1)如果激活函數是s函數,根據它的導數公式:

可以得到結論一(1),權重Wij和截距bj,的更新公式為:

(2)如果激活函數是relu函數,根據它的導數公式:

可以得到結論一(2),權重Wij和截距bj,的更新公式為:

2、除了對輸出層的權重Wij和截距bj外,更普遍的隱含層權重Wki和截距bi更新應該如何去求呢?

我們仍然用誤差函數E對Wki和bi求偏導,藉助前面的推導公式一,可以得到

對於輸出層來說,誤差函數E可以直接用Oj表達,但是對於隱含層,誤差函數E並不能直接用Oi表達,根據多層神經網路的函數構成關係,我知道Oj可以通過Oi向前傳遞進行一系列函數組合得到的。

由於深度學習不一定是全連接,我們假設Oi只和輸出層j的s個節點相連接,下標記為j0到js,如上面圖四所示,對於Oi來說,只跟和它節點相連接的Oj構成函數關係,跟不相連接的Oj沒有函數關係,所以我們根據複合函數求偏導可以把不相連接的Oj視為常數。

並且,根據函數構成關係,Oi可直接構成Zjs,Zjs可直接構成Oj,根據複合函數求偏導公式的鏈式寫法推導如下:

同時,對上式的Zjs來說,誤差函數E對它求偏導,其餘項可以視為常數:

所以,在上式的結果繼續推導如下,可以完全用E對Zjs的偏導數來表達:

現在我們將誤差函數EZjs的偏導數記做輸出層相連節點的誤差項,根據前面的推導公式一,在計算Wij更新值可以得到:

所以,隱含層的權重和截距更新,可以由輸出層的誤差項得到,同理也適用於其他隱含層,都可以由它的後一層(nextlayer)的誤差項得到,下面是結論二,隱含層權重Wki和截距bi的更新公式為:

總結

通過掌握以上數學原理和推導,我們就理解了深度學習為什麼要這樣計算,接下來利用推導的結論一和結論二,可以完成深度學習的演算法程序實現了,剩下的只是架構和工程化的問題。對卷積類的深度學習模型,為了降低訓練複雜性,它的權重很多是相同的(權重共享),並且只和下一層部分神經元節點連接(局部連接),數學原理、計算方法、訓練方式和上面是一樣的,最終的模型結果都是得到一組參數,用該組參數保證誤差函數最接近最小值。

作者介紹:彭淵,資深架構師,在Java技術領域從業十多年,曾撰寫多款開源軟體,歷任阿里資深專家,華為中間件首席架構師,淘寶高級專家等。開源代表作有Fourinone(四不像)分散式核心技術框架、CoolHash並行資料庫引擎等,曾出版書籍《大規模分散式系統架構與設計實戰》,擁有多項軟體著作權和專利。

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

敏捷測試中的Web測試優秀實踐
使用Go語言與Ethereum智能合約進行交互
開發過程中的必然產物,劣質代碼產生的五個原因

TAG:CSDN |

您可能感興趣

關於深蹲那些事,這些是你需要了解的!
當我理解父母后,我覺得我不再需要他們的理解了
想通過去美國留學後拿到綠卡?你需要了解這些知識
如果想要活到理想的年齡,我們需要怎麼做?
體檢查出尿酸高,到底需不需要治療?你應該知道這些
除了學習,我們還需要哪些必備的修鍊?
牙醫是否需要再學習,看這三個問題就夠了
有些地方我們可以不去,但我們需要知道
為什麼我們讀書越來越少?我們到底需不需要去多讀書?
寫書法作品,難道真的需要刻意去整嗎?我有點不會了
一些你需要了解的事
膀胱癌常見的發病原因有哪些,你需要深入了解
身為敏感肌膚你需要了解哪些?你真的清楚知道嗎?
到底需要多久你才能理解那句"你變
切,我需要討好你?
做牙齒矯正前,你需要事先了解哪些問題
我們並沒有說想要多分一點,我們只是覺得你是長輩需要好好照顧,沒想到這一切被我看到眼裡。實在是太失望了
狗護食這個毛病需不需要改掉?原來我們都誤解了,看專家怎麼說
糖尿病有哪些需要注意的事項,你們知道那些?
如何科學的鍛煉胸部,這些知識你需要掌握,讓你事半功倍