新聞中心

EEPW首頁(yè) > 智能計(jì)算 > 設(shè)計(jì)應(yīng)用 > 深度神經(jīng)網(wǎng)絡(luò)(DNN)模型與前向傳播算法

深度神經(jīng)網(wǎng)絡(luò)(DNN)模型與前向傳播算法

作者: 時(shí)間:2022-07-04 來(lái)源:博客園 收藏

  (Deep Neural Networks,以下簡(jiǎn)稱(chēng))是的基礎(chǔ),而要理解,首先我們要理解模型,下面我們就對(duì)DNN的模型與前向傳播算法做一個(gè)總結(jié)。

本文引用地址:http://m.butianyuan.cn/article/202207/435868.htm

  1.從感知機(jī)到神經(jīng)網(wǎng)絡(luò)

  在感知機(jī)原理小結(jié)中,我們介紹過(guò)感知機(jī)的模型,它是一個(gè)有若干輸入和一個(gè)輸出的模型,如下圖:

1656904869460695.png

  輸出和輸入之間學(xué)習(xí)到一個(gè)線(xiàn)性關(guān)系,得到中間輸出結(jié)果:

  z=∑i=1mwixi+bz=∑i=1mwixi+b

  接著是一個(gè)神經(jīng)元激活函數(shù):

  sign(z)={?11z<0z≥0sign(z)={?1z<01z≥0

  從而得到我們想要的輸出結(jié)果1或者-1。

  這個(gè)模型只能用于二元分類(lèi),且無(wú)法學(xué)習(xí)比較復(fù)雜的非線(xiàn)性模型,因此在工業(yè)界無(wú)法使用。

  而神經(jīng)網(wǎng)絡(luò)則在感知機(jī)的模型上做了擴(kuò)展,總結(jié)下主要有三點(diǎn):

  1)加入了隱藏層,隱藏層可以有多層,增強(qiáng)模型的表達(dá)能力,如下圖實(shí)例,當(dāng)然增加了這么多隱藏層模型的復(fù)雜度也增加了好多。

1656904925749205.png

  2)輸出層的神經(jīng)元也可以不止一個(gè)輸出,可以有多個(gè)輸出,這樣模型可以靈活的應(yīng)用于分類(lèi)回歸,以及其他的機(jī)器學(xué)習(xí)領(lǐng)域比如降維和聚類(lèi)等。多個(gè)神經(jīng)元輸出的輸出層對(duì)應(yīng)的一個(gè)實(shí)例如下圖,輸出層現(xiàn)在有4個(gè)神經(jīng)元了。

1656905017572823.png

  3)對(duì)激活函數(shù)做擴(kuò)展,感知機(jī)的激活函數(shù)是sign(z)sign(z),雖然簡(jiǎn)單但是處理能力有限,因此神經(jīng)網(wǎng)絡(luò)中一般使用的其他的激活函數(shù),比如我們?cè)谶壿嫽貧w里面使用過(guò)的Sigmoid函數(shù),即:

  f(z)=11+e?zf(z)=11+e?z

  還有后來(lái)出現(xiàn)的tanx,softmax,和ReLU等。通過(guò)使用不同的激活函數(shù),神經(jīng)網(wǎng)絡(luò)的表達(dá)能力進(jìn)一步增強(qiáng)。對(duì)于各種常用的激活函數(shù),我們?cè)诤竺嬖賹?zhuān)門(mén)講。

  2.DNN的基本結(jié)構(gòu)

  上一節(jié)我們了解了神經(jīng)網(wǎng)絡(luò)基于感知機(jī)的擴(kuò)展,而DNN可以理解為有很多隱藏層的神經(jīng)網(wǎng)絡(luò)。這個(gè)很多其實(shí)也沒(méi)有什么度量標(biāo)準(zhǔn),多層神經(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),輸入層,隱藏層和輸出層,如下圖示例,一般來(lái)說(shuō)第一層是輸入層,最后一層是輸出層,而中間的層數(shù)都是隱藏層。

1656905039650552.png

  層與層之間是全連接的,也就是說(shuō),第i層的任意一個(gè)神經(jīng)元一定與第i+1層的任意一個(gè)神經(jīng)元相連。雖然DNN看起來(lái)很復(fù)雜,但是從小的局部模型來(lái)說(shuō),還是和感知機(jī)一樣,即一個(gè)線(xiàn)性關(guān)系z(mì)=∑wixi+bz=∑wixi+b加上一個(gè)激活函數(shù)σ(z)σ(z)。

  由于DNN層數(shù)多,則我們的線(xiàn)性關(guān)系系數(shù)ww和偏倚bb的數(shù)量也就是很多了。具體的參數(shù)在DNN是如何定義的呢?

  首先我們來(lái)看看線(xiàn)性關(guān)系系數(shù)ww的定義。以下圖一個(gè)三層的DNN為例,第二層的第4個(gè)神經(jīng)元到第三層的第2個(gè)神經(jīng)元的線(xiàn)性系數(shù)定義為w324w243。上標(biāo)3代表線(xiàn)性系數(shù)ww所在的層數(shù),而下標(biāo)對(duì)應(yīng)的是輸出的第三層索引2和輸入的第二層索引4。你也許會(huì)問(wèn),為什么不是w342w423,而是w324w243呢?這主要是為了便于模型用于矩陣表示運(yùn)算,如果是w342w423而每次進(jìn)行矩陣運(yùn)算是wTx+bwTx+b,需要進(jìn)行轉(zhuǎn)置。將輸出的索引放在前面的話(huà),則線(xiàn)性運(yùn)算不用轉(zhuǎn)置,即直接為wx+bwx+b。總結(jié)下,第l?1l?1層的第k個(gè)神經(jīng)元到第ll層的第j個(gè)神經(jīng)元的線(xiàn)性系數(shù)定義為wljkwjkl。注意,輸入層是沒(méi)有ww參數(shù)的。

1656905059123035.png

  再來(lái)看看偏倚bb的定義。還是以這個(gè)三層的DNN為例,第二層的第三個(gè)神經(jīng)元對(duì)應(yīng)的偏倚定義為b23b32。其中,上標(biāo)2代表所在的層數(shù),下標(biāo)3代表偏倚所在的神經(jīng)元的索引。同樣的道理,第三個(gè)的第一個(gè)神經(jīng)元的偏倚應(yīng)該表示為b31b13。同樣的,輸入層是沒(méi)有偏倚參數(shù)bb的。

1656905076123558.png

  3.DNN前向傳播算法數(shù)學(xué)原理

  在上一節(jié),我們已經(jīng)介紹了DNN各層線(xiàn)性關(guān)系系數(shù)ww,偏倚bb的定義。假設(shè)我們選擇的激活函數(shù)是σ(z)σ(z),隱藏層和輸出層的輸出值為aa,則對(duì)于下圖的三層DNN,利用和感知機(jī)一樣的思路,我們可以利用上一層的輸出計(jì)算下一層的輸出,也就是所謂的DNN前向傳播算法。

1656905096964644.png

  對(duì)于第二層的的輸出a21,a22,a23a12,a22,a32,我們有:

  a21=σ(z21)=σ(w211x1+w212x2+w213x3+b21)a12=σ(z12)=σ(w112x1+w122x2+w132x3+b12)

  a22=σ(z22)=σ(w221x1+w222x2+w223x3+b22)a22=σ(z22)=σ(w212x1+w222x2+w232x3+b22)

  a23=σ(z23)=σ(w231x1+w232x2+w233x3+b23)a32=σ(z32)=σ(w312x1+w322x2+w332x3+b32)

  對(duì)于第三層的的輸出a31a13,我們有:

  a31=σ(z31)=σ(w311a21+w312a22+w313a23+b31)a13=σ(z13)=σ(w113a12+w123a22+w133a32+b13)

  將上面的例子一般化,假設(shè)第l?1l?1層共有m個(gè)神經(jīng)元,則對(duì)于第ll層的第j個(gè)神經(jīng)元的輸出aljajl,我們有:

  alj=σ(zlj)=σ(∑k=1mwljkal?1k+blj)ajl=σ(zjl)=σ(∑k=1mwjklakl?1+bjl)

  其中,如果l=2l=2,則對(duì)于的a1kak1即為輸入層的xkxk。

  從上面可以看出,使用代數(shù)法一個(gè)個(gè)的表示輸出比較復(fù)雜,而如果使用矩陣法則比較的簡(jiǎn)潔。假設(shè)第l?1l?1層共有m個(gè)神經(jīng)元,而第ll層共有n個(gè)神經(jīng)元,則第ll層的線(xiàn)性系數(shù)ww組成了一個(gè)n×mn×m的矩陣WlWl,第ll層的偏倚bb組成了一個(gè)n×1n×1的向量blbl,第l?1l?1層的的輸出aa組成了一個(gè)m×1m×1的向量al?1al?1,第ll層的的未激活前線(xiàn)性輸出zz組成了一個(gè)n×1n×1的向量zlzl,第ll層的的輸出aa組成了一個(gè)n×1n×1的向量alal。則用矩陣法表示,第l層的輸出為:

  al=σ(zl)=σ(Wlal?1+bl)al=σ(zl)=σ(Wlal?1+bl)

  這個(gè)表示方法簡(jiǎn)潔漂亮,后面我們的討論都會(huì)基于上面的這個(gè)矩陣法表示來(lái)。

  4.DNN前向傳播算法

  有了上一節(jié)的數(shù)學(xué)推導(dǎo),DNN的前向傳播算法也就不難了。所謂的DNN的前向傳播算法也就是利用我們的若干個(gè)權(quán)重系數(shù)矩陣WW,偏倚向量bb來(lái)和輸入值向量xx進(jìn)行一系列線(xiàn)性運(yùn)算和激活運(yùn)算,從輸入層開(kāi)始,一層層的向后計(jì)算,一直到運(yùn)算到輸出層,得到輸出結(jié)果為值。

  輸入:總層數(shù)L,所有隱藏層和輸出層對(duì)應(yīng)的矩陣WW,偏倚向量bb,輸入值向量xx

  輸出:輸出層的輸出aLaL

  1)初始化a1=xa1=x

  2)for l=2l=2 to LL,計(jì)算:

  al=σ(zl)=σ(Wlal?1+bl)al=σ(zl)=σ(Wlal?1+bl)

  最后的結(jié)果即為輸出aLaL。

  5.DNN前向傳播算法小結(jié)

  單獨(dú)看DNN前向傳播算法,似乎沒(méi)有什么大用處,而且這一大堆的矩陣WW,偏倚向量bb對(duì)應(yīng)的參數(shù)怎么獲得呢?怎么得到最優(yōu)的矩陣WW,偏倚向量bb呢?這個(gè)我們?cè)谥vDNN的反向傳播算法時(shí)再講。而理解反向傳播算法的前提就是理解DNN的模型與前向傳播算法。這也是我們這一篇先講的原因。

 ?。g迎轉(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

  3)UFLDL Tutorial



評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉