1. 程式人生 > >搞深度學習需掌握的基礎數學知識

搞深度學習需掌握的基礎數學知識

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

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

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

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

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

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

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識
圖 1

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

T j 代表每個神經元目標值,O j 代表每個神經元輸出值

這裡 O j =f(Z j ),f 是啟用函式,一般是 s 函式:

科普丨搞懂深度學習之前,你得先掌握這些數學知識

或者 relu 函式:

科普丨搞懂深度學習之前,你得先掌握這些數學知識

Z j 是線性函式(W ij 泛指 i 層和 j 層節點連線權重,b j 泛指 j 層節點截距):

科普丨搞懂深度學習之前,你得先掌握這些數學知識

O i 再往前依次類推,整個神經網路都可以由上面的函式巢狀去表達。

現在我們的問題是,如何通過多次調整上面的 W ij 和 b j ,能讓誤差函式 E 達到最小值?

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

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

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識
圖 2

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

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

再看看三維的幾何意義,假設輸出值為O 1 ,O 2 兩項,並設定T 1 =1,T 2 =1那麼O 1 ,O 2 和誤差函式E剛好構成X,Y,Z的座標關係如圖 3 所示:

E=1/2(1-O 1 ) 2 +1/2(1-O 2 ) 2

科普丨搞懂深度學習之前,你得先掌握這些數學知識
圖 3

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

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

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

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

推導需要的數學公式

1、複合函式求偏導公式

科普丨搞懂深度學習之前,你得先掌握這些數學知識

2、導數四則運算公式

科普丨搞懂深度學習之前,你得先掌握這些數學知識

3、導數公式

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

數學推導過程

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識
圖 4

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

由於 Z j 是線性函式我們是知道的

科普丨搞懂深度學習之前,你得先掌握這些數學知識

科普丨搞懂深度學習之前,你得先掌握這些數學知識

並且 O j 是可以直接用 Z j 表達的:

科普丨搞懂深度學習之前,你得先掌握這些數學知識

所以 E 對 W ij 求偏導可以寫成 f(Z j )的導數表達,同樣對 b j 求偏導也可以用 f(Z j )的導數表達(記做推導公式一)

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

從前面得知,O j =f(Z j ),f 是啟用函式,一般是 s 函式或者 relu 函式,我們繼續推導如下:

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

可以得到結論一(1),權重 W ij 和截距 b j 的更新公式為:

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

可以得到結論一(2),權重 W ij 和截距 b j ,的更新公式為:

科普丨搞懂深度學習之前,你得先掌握這些數學知識

2、除了對輸出層的權重 W ij 和截距 b j 外,更普遍的隱含層權重 W ki 和截距 b i 更新應該如何去求呢?

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

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

並且,根據函式構成關係,O i 可直接構成 Z js ,Z js 可直接構成 O j ,根據複合函式求偏導公式的鏈式寫法推導如下:

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

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

科普丨搞懂深度學習之前,你得先掌握這些數學知識

總結

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

相關推薦

深度學習掌握基礎數學知識

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

深度學習/機器學習入門基礎數學知識整理(一):線性代數基礎,矩陣,範數等

前面大概有2年時間,利用業餘時間斷斷續續寫了一個機器學習方法系列,和深度學習方法系列,還有一個三十分鐘理解系列(一些趣味知識);新的一年開始了,今年給自己定的學習目標——以補齊基礎理論為重點,研究一些基礎課題;同時逐步繼續寫上述三個系列的文章。 最近越來越多的

深度學習/機器學習入門基礎數學知識整理(五):Jensen不等式簡單理解,共軛函式

Jensen不等式及其延伸 凸函式最基本的不等式性質,又稱Jensen不等式[1] f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y) 通俗一點講就是,期望的函式值小於等於函式值的期望。

深度學習/機器學習入門基礎數學知識整理(三):凸優化,Hessian,牛頓法

凸優化理論本身非常博大,事實上我也只是瞭解了一個皮毛中的皮毛,但是對於廣大僅僅想要了解一下機器學習或者深度學習的同學來說,稍微瞭解一點凸優化也就夠了。在實際工程問題中,比如現在我們用的最多的深度神經網路的求解優化問題,都是非凸的,因此很多凸優化理論中非常有價值的

100頁的機器學習入門書:只要有基礎數學知識就能看懂!(免費下載)

  文章釋出於公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇乾貨。   轉自 | 新智元 作者 | Andriy Burkov 編輯 | 肖琴   這是一本

深度學習】Tensorflow基礎知識

Tensorflow簡介 \quad\quad在我們使用以統計方法為核心的機器學習方法的時候,重要的是做特徵工程,然後調一些引數,根據一些領域的經驗來不斷提取特徵,特徵的好壞往往決定模型的好壞。 \qu

深度學習FPGA實現基礎知識5(網友一致認可的----Deep Learning(深度學習學習筆記整理及完整版下載)

需求說明:深度學習FPGA實現知識儲備 來自:http://blog.csdn.net/zouxy09/article/details/8775360/ Deep Learning(深度學習)

深度學習FPGA實現基礎知識6(Deep Learning(深度學習學習資料大全及CSDN大牛部落格推薦)

Deep Learning(深度學習) Machine Learning(機器學習): Computer Vision(計算機視覺): OpenCV相關: 2012年7月4日隨著opencv2.4.2版本的釋出,opencv更

深度學習FPGA實現基礎知識20(FPGA小數運算--DSP基礎“定點小數運算”)

需求說明:深度學習FPGA實現知識儲備 來自:第一部分  DSP基礎--定點小數運算           第二部分  dsp定點運算基本方法 整理來自:時間的詩 第一部分  DSP基礎--定點小數運算 在DSP世界中,由於DSP晶片的限制,經常使用定點小數運

深度學習FPGA實現基礎知識14(如何理解“卷積”運算)

需求說明:深度學習FPGA實現知識儲備 百度百科 函式內涵 簡單定義:卷積是分析數學中一種重要的運算。 設:f(x),g(x)是R1上的兩個可積函式,作積分: 可以證明,關於幾乎所有的實數x,上述積分是存在的。這樣,隨著x的不同取值,這個積分就定義

深度學習FPGA實現基礎知識10(Deep Learning(深度學習)卷積神經網路(Convolutional Neural Network,CNN))

第一點,在學習Deep learning和CNN之前,總以為它們是很了不得的知識,總以為它們能解決很多問題,學習了之後,才知道它們不過與其他機器學習演算法如svm等相似,仍然可以把它當做一個分類器,仍然可以像使用一個黑盒子那樣使用它。 第二點,Deep Learning強大的地方就是可以利用網路中間某一

深度學習FPGA實現基礎知識1(網友關於FPGA機器學習想法)

需求說明:深度學習FPGA實現知識儲備 來自:http://blog.csdn.net/my_share/article/details/38498013?utm_source=tuicool&utm_medium=referral          機器學

CNTK 深度學習-1

激活 result dll desc mman caf element 有用 成了 CNTK 搞深度學習 Computational Network Toolkit (CNTK) 是微軟出品的開源深度學習工具包。本文介紹CNTK的基本內容,如何寫CNTK的網絡定義語言,以及

tensorflow學習筆記(3)前置數學知識

標簽 fit orm 特征 dmi TP inf tdd Coding               tensorflow學習筆記(3)前置數學知識 首先是神經元的模型 接下來是激勵函數 神經網絡的復雜度計算 層數:隱藏層+輸出層 總參數=總的w+b 下圖為2層 如下圖

基礎數學知識·質數

初見安~本章講一點兒數學知識最近講的東西好像越來越基礎了…… 1.質數 質數——若一個正整數除了它自己和1沒有別的因數了,則稱這個數為質數(or素數),否則合數。 比如:3=1*3,3就是一個質數;8=1*8=2*4,8就是個合數。 在c++裡我們要判斷質數or篩選質數,可以運用到以

深度學習-線性代數基礎

來自《深度學習》的配套資料!!!詳情可以看書上的知識或是看相關的教材 非同步社群:深度學習 線性代數   線性代數是一門被廣泛運用於各個工程技術學科的數學分支,利用線性代數的相關概念和結論,可以極大的簡化機器學習裡相關公式的推導和表述。 1. 基本概念 標量

深度學習-數值計算基礎

數值計算   對於機器學習中的問題,有一部分可以通過數學推導的方式直接得到用公式表達的解析解,但對絕大多數的問題來說,解析解是不存在的,需要使用迭代更新的方法求數值解。然而實數的精度是無限的,計算機能夠表達的精度是有限的,這就涉及到許多數值計算方法的問題。 1.

吳恩達神經網路與深度學習——神經網路基礎習題1

python numpy 基礎 1.使用iPython Notebooks 2.使用numpy 函式 and numpy矩陣或向量操作 3.理解"broadcasting" 4.向量化程式碼 用numpy建立一個基礎函式 sigmoid 函式 math庫

吳恩達神經網路與深度學習——神經網路基礎習題2

神經網路思維的邏輯迴歸 1.初始化引數 2.計算代價函式及其導數 3.使用梯度下降 判斷影象上是否有貓 影象預處理 問題敘述 你得到了一個數據集(“data.h5”),包含: -標記為cat ( y = 1 )或非cat ( y = 0 )的m個訓練集 -標

深度學習框架-Keras基礎入門系列-覃秉豐-專題視訊課程

深度學習框架-Keras基礎入門系列—1817人已學習 課程介紹         Keras是一種高度模組化,使用簡單上手快,合適深度學習初學者使用的深度學習框架。Keras由純Python編寫而成並以