深度學習之DNN與前向傳播演算法
微信公眾號
關鍵字全網搜索最新排名
【機器學習演算法】:排名第一
【機器學習】:排名第二
【Python】:排名第三
【演算法】:排名第四
前言
深度神經網路(Deep Neural Networks, 以下簡稱DNN)是深度學習的基礎,而要理解DNN,首先我們要理解DNN模型,
下面我們就對DNN的模型與前向傳播演算法做一個總結。
從感知機到神經網路
在感知機原理小結中,我們介紹過感知機的模型,
它是一個有若干輸入和一個輸出的模型
,如下圖:
輸出和輸入之間學習到一個
線性關係
,得到中間輸出結果:
接著是一個
神經元激活函數
:
從而得到我們想要的輸出結果1或者-1。
這個模型只能用於二元分類,且無法學習比較複雜的非線性模型,因此在工業界無法使用。
而神經網路則在感知機的模型上做了擴展,總結下主要有三點:
1)
加入了隱藏層,隱藏層可以有多層,增強模型的表達能力
,如下圖實例,當然增加了這麼多隱藏層模型的複雜度也增加了好多。
2)輸出層的神經元也可以不止一個輸出,可以有多個輸出,這樣模型
可以靈活的應用於分類回歸,以及其他的機器學習領域比如降維和聚類等
。多個神經元輸出的輸出層對應的一個實例如下圖,輸出層現在有4個神經元了。
3)
對激活函數做擴展
,感知機的激活函數是sign(z),雖然簡單但是處理能力有限,因此神經網路中一般使用的其他的激活函數,比如我們在邏輯回歸裡面使用過的Sigmoid函數
,即:
還有後來出現的
tanx, softmax,和ReLU
等。通過使用不同的激活函數,神經網路的表達能力進一步增強。對於各種常用的激活函數,我們在後面再專門講。
DNN的基本結構
上一節我們了解了
神經網路基於感知機的擴展,而DNN可以理解為有很多隱藏層的神經網路
。這個很多其實也沒有什麼度量標準, 多層神經網路和深度神經網路DNN其實也是指的一個東西,當然,DNN有時也叫做多層感知機(Multi-Layer perceptron,MLP), 名字實在是多。後面我們講到的神經網路都默認為DNN。從DNN按不同層的位置劃分,DNN內部的神經網路層可以分為三類,輸入層,隱藏層和輸出層,
如下圖示例,一般來說第一層是輸出層,最後一層是輸出層,而中間的層數都是隱藏層。
層與層之間是全連接的,也就是說,第i層的任意一個神經元一定與第i+1層的任意一個神經元相連。
雖然DNN看起來很複雜,但是從小的局部模型來說,還是和感知機一樣,即一個線性關係z=∑wixi+b加上一個激活函數σ(z)。由於DNN層數多,則我們的線性關係係數w和偏倚b的數量也就是很多了。具體的參數在DNN是如何定義的呢?
首先我們來看看線性關係係數w的定義。
以下圖一個三層的DNN為例,第二層的第4個神經元到第三層的第2個神經元的線性係數定義為w243。上標3代表線性係數w所在的層數,而下標對應的是輸出的第三層索引2和輸入的第二層索引4。你也許會問,為什麼不是w423, 而是w243呢?這主要是為了便於模型用於矩陣表示運算,如果是w243而每次進行矩陣運算是wTx+b,需要進行轉置。將輸出的索引放在前面的話,則線性運算不用轉置,即直接為wx+b。總結下,第l?1層的第k個神經元到第l層的第j個神經元的線性係數定義為wjkl。注意,輸入層是沒有w參數的。
再來看看偏倚b的定義。
還是以這個三層的DNN為例,第二層的第三個神經元對應的偏倚定義為b32。其中,上標2代表所在的層數,下標3代表偏倚所在的神經元的索引。同樣的道理,第三個的第一個神經元的偏倚應該表示為b13。同樣的,輸入層是沒有偏倚參數b的。
DNN前向傳播演算法數學原理
在上一節,我們已經介紹了DNN各層線性關係係數w,偏倚b的定義。假設我們選擇的激活函數是σ(z),隱藏層和輸出層的輸出值為a,則對於下圖的三層DNN,利用和感知機一樣的思路,我們可以利用上一層的輸出計算下一層的輸出,也就是所謂的DNN前向傳播演算法。
對於第二層的的輸出,我們有:
將上面的例子一般化,假設第l?1層共有m個神經元,則對於第l層的第j個神經元的輸出ajl,我們有:
從上面可以看出,使用代數法一個個的表示輸出比較複雜,而如果使用矩陣法則比較的簡潔。假設第l?1層共有m個神經元,而第l層共有n個神經元,則第l層的線性係數w組成了一個n×m的矩陣Wl, 第l層的偏倚b組成了一個n×1的向量bl , 第l?1層的的輸出a組成了一個m×1的向量al?1,第l層的的未激活前線性輸出z組成了一個n×1的向量zl, 第l層的的輸出a組成了一個n×1的向量al。則用矩陣法表示,第l層的輸出為:
小結
有了上一節的數學推導,DNN的前向傳播演算法也就不難了。所謂的DNN的前向傳播演算法也就是利用我們的若干個權重係數矩陣W,偏倚向量b來和輸入值向量x進行一系列線性運算和激活運算,從輸入層開始,一層層的向後計算,一直到運算到輸出層,得到輸出結果為值。
輸入:
總層數L,所有隱藏層和輸出層對應的矩陣W,偏倚向量b,輸入值向量x輸出:
輸出層的輸出aL1) 初始化a1=x
2) for l=2 to L, 計算:
最後的結果即為輸出aL。
單獨看DNN前向傳播演算法,似乎沒有什麼大用處,而且這一大堆的矩陣W,偏倚向量b對應的參數怎麼獲得呢?怎麼得到最優的矩陣W,偏倚向量b呢?這個我們在講DNN的反向傳播演算法時再講。而理解反向傳播演算法的前提就是理解DNN的模型與前向傳播演算法。這也是我們這一篇先講的原因。
參考:
1. 周志華《機器學習》
2. 博客園:作者(劉建平)
http://www.cnblogs.com/pinard/p/6418668.html
3. 李航 《統計學習方法》
4. 《機器學習實戰》
5. Neural Networks and Deep Learning by By Michael Nielsen
6. Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville
7. UFLDL Tutorial
加我微信:guodongwe1991,備註姓名-單位-研究方向(加入微信機器學習交流1群)
招募 志願者
廣告、商業合作
請加QQ:357062955@qq.com
喜歡,別忘關注~
幫助你在AI領域更好的發展,期待與你相遇!