深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks, 以下簡(jiǎn)稱DNN)是深度學(xué)習(xí)的基礎(chǔ),而要理解DNN,首先我們要理解DNN模型,下面我們就對(duì)DNN的模型與前向傳播算法做一個(gè)總結(jié)。 1. 從感知機(jī)到神經(jīng)網(wǎng)絡(luò)在感知機(jī)原理小結(jié)中,我們介紹過(guò)感知機(jī)的模型,它是一個(gè)有若干輸入和一個(gè)輸出的模型,如下圖: 輸出和輸入之間學(xué)習(xí)到一個(gè)線性關(guān)系,得到中間輸出結(jié)果:
接著是一個(gè)神經(jīng)元激活函數(shù):
從而得到我們想要的輸出結(jié)果1或者-1。 這個(gè)模型只能用于二元分類,且無(wú)法學(xué)習(xí)比較復(fù)雜的非線性模型,因此在工業(yè)界無(wú)法使用。 而神經(jīng)網(wǎng)絡(luò)則在感知機(jī)的模型上做了擴(kuò)展,總結(jié)下主要有三點(diǎn): 1)加入了隱藏層,隱藏層可以有多層,增強(qiáng)模型的表達(dá)能力,如下圖實(shí)例,當(dāng)然增加了這么多隱藏層模型的復(fù)雜度也增加了好多。 2)輸出層的神經(jīng)元也可以不止一個(gè)輸出,可以有多個(gè)輸出,這樣模型可以靈活的應(yīng)用于分類回歸,以及其他的機(jī)器學(xué)習(xí)領(lǐng)域比如降維和聚類等。多個(gè)神經(jīng)元輸出的輸出層對(duì)應(yīng)的一個(gè)實(shí)例如下圖,輸出層現(xiàn)在有4個(gè)神經(jīng)元了。 3) 對(duì)激活函數(shù)做擴(kuò)展,感知機(jī)的激活函數(shù)是,雖然簡(jiǎn)單但是處理能力有限,因此神經(jīng)網(wǎng)絡(luò)中一般使用的其他的激活函數(shù),比如我們?cè)谶壿嫽貧w里面使用過(guò)的Sigmoid函數(shù),即:
還有后來(lái)出現(xiàn)的tanx, softmax,和ReLU等。通過(guò)使用不同的激活函數(shù),神經(jīng)網(wǎng)絡(luò)的表達(dá)能力進(jìn)一步增強(qiáng)。對(duì)于各種常用的激活函數(shù),我們?cè)诤竺嬖賹iT講。 2. DNN的基本結(jié)構(gòu)上一節(jié)我們了解了神經(jīng)網(wǎng)絡(luò)基于感知機(jī)的擴(kuò)展,而DNN可以理解為有很多隱藏層的神經(jīng)網(wǎng)絡(luò)。這個(gè)很多其實(shí)也沒有什么度量標(biāo)準(zhǔn), 多層神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò)DNN其實(shí)也是指的一個(gè)東西,當(dāng)然,DNN有時(shí)也叫做多層感知機(jī)(Multi-Layer perceptron,MLP), 名字實(shí)在是多。后面我們講到的神經(jīng)網(wǎng)絡(luò)都默認(rèn)為DNN。 從DNN按不同層的位置劃分,DNN內(nèi)部的神經(jīng)網(wǎng)絡(luò)層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來(lái)說(shuō)第一層是輸入層,最后一層是輸出層,而中間的層數(shù)都是隱藏層。 層與層之間是全連接的,也就是說(shuō),第i層的任意一個(gè)神經(jīng)元一定與第i+1層的任意一個(gè)神經(jīng)元相連。雖然DNN看起來(lái)很復(fù)雜,但是從小的局部模型來(lái)說(shuō),還是和感知機(jī)一樣,即一個(gè)線性關(guān)系加上一個(gè)激活函數(shù)。 由于DNN層數(shù)多,則我們的線性關(guān)系系數(shù)和偏倚的數(shù)量也就是很多了。具體的參數(shù)在DNN是如何定義的呢? 首先我們來(lái)看看線性關(guān)系系數(shù)的定義。以下圖一個(gè)三層的DNN為例,第二層的第4個(gè)神經(jīng)元到第三層的第2個(gè)神經(jīng)元的線性系數(shù)定義為。上標(biāo)3代表線性系數(shù)所在的層數(shù),而下標(biāo)對(duì)應(yīng)的是輸出的第三層索引2和輸入的第二層索引4。你也許會(huì)問(wèn),為什么不是, 而是呢?這主要是為了便于模型用于矩陣表示運(yùn)算,如果是而每次進(jìn)行矩陣運(yùn)算是,需要進(jìn)行轉(zhuǎn)置。將輸出的索引放在前面的話,則線性運(yùn)算不用轉(zhuǎn)置,即直接為??偨Y(jié)下,第層的第k個(gè)神經(jīng)元到第層的第j個(gè)神經(jīng)元的線性系數(shù)定義為。注意,輸入層是沒有參數(shù)的。 再來(lái)看看偏倚的定義。還是以這個(gè)三層的DNN為例,第二層的第三個(gè)神經(jīng)元對(duì)應(yīng)的偏倚定義為。其中,上標(biāo)2代表所在的層數(shù),下標(biāo)3代表偏倚所在的神經(jīng)元的索引。同樣的道理,第三個(gè)的第一個(gè)神經(jīng)元的偏倚應(yīng)該表示為。同樣的,輸入層是沒有偏倚參數(shù)的。 3. DNN前向傳播算法數(shù)學(xué)原理在上一節(jié),我們已經(jīng)介紹了DNN各層線性關(guān)系系數(shù),偏倚的定義。假設(shè)我們選擇的激活函數(shù)是,隱藏層和輸出層的輸出值為,則對(duì)于下圖的三層DNN,利用和感知機(jī)一樣的思路,我們可以利用上一層的輸出計(jì)算下一層的輸出,也就是所謂的DNN前向傳播算法。 對(duì)于第二層的的輸出,我們有:
對(duì)于第三層的的輸出,我們有:
將上面的例子一般化,假設(shè)第層共有m個(gè)神經(jīng)元,則對(duì)于第層的第j個(gè)神經(jīng)元的輸出,我們有:
其中,如果,則對(duì)于的即為輸入層的。 從上面可以看出,使用代數(shù)法一個(gè)個(gè)的表示輸出比較復(fù)雜,而如果使用矩陣法則比較的簡(jiǎn)潔。假設(shè)第層共有m個(gè)神經(jīng)元,而第層共有n個(gè)神經(jīng)元,則第層的線性系數(shù)組成了一個(gè)的矩陣, 第層的偏倚組成了一個(gè)的向量 , 第層的的輸出組成了一個(gè)的向量,第層的的未激活前線性輸出組成了一個(gè)的向量, 第層的的輸出組成了一個(gè)的向量。則用矩陣法表示,第l層的輸出為:
這個(gè)表示方法簡(jiǎn)潔漂亮,后面我們的討論都會(huì)基于上面的這個(gè)矩陣法表示來(lái)。 4. DNN前向傳播算法有了上一節(jié)的數(shù)學(xué)推導(dǎo),DNN的前向傳播算法也就不難了。所謂的DNN的前向傳播算法也就是利用我們的若干個(gè)權(quán)重系數(shù)矩陣,偏倚向量來(lái)和輸入值向量進(jìn)行一系列線性運(yùn)算和激活運(yùn)算,從輸入層開始,一層層的向后計(jì)算,一直到運(yùn)算到輸出層,得到輸出結(jié)果為值。 輸入: 總層數(shù)L,所有隱藏層和輸出層對(duì)應(yīng)的矩陣,偏倚向量,輸入值向量 輸出:輸出層的輸出 1) 初始化 2) for to , 計(jì)算:
最后的結(jié)果即為輸出。 5. DNN前向傳播算法小結(jié)單獨(dú)看DNN前向傳播算法,似乎沒有什么大用處,而且這一大堆的矩陣,偏倚向量對(duì)應(yīng)的參數(shù)怎么獲得呢?怎么得到最優(yōu)的矩陣,偏倚向量呢?這個(gè)我們?cè)谥vDNN的反向傳播算法時(shí)再講。而理解反向傳播算法的前提就是理解DNN的模型與前向傳播算法。這也是我們這一篇先講的原因。
(歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處。歡迎溝通交流: liujianping-ok@163.com) 參考資料:1) Neural Networks and Deep Learning by By Michael Nielsen 2) Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville
|
|
來(lái)自: 昵稱59761374 > 《待分類》