BP神經網絡與卷積神經網絡(CNN)

1、BP神經網絡
1.1 神經網絡基礎
神經網絡的基本組成單元是神經元。神經元的通用模型如圖 1所示,其中常用的激活函數有閾值函數、sigmoid函數和雙曲正切函數。
這裏寫圖片描述
圖 1 神經元模型
神經元的輸出爲:

y=f(i=1mwixi)

神經網絡是將多個神經元按一定規則聯結在一起而形成的網絡,如圖 2所示。
這裏寫圖片描述
圖 2 神經網絡示意圖
從圖 2可以看出,一個神經網絡包括輸入層、隱含層(中間層)和輸出層。輸入層神經元個數與輸入數據的維數相同,輸出層神經元個數與需要擬合的數據個數相同,隱含層神經元個數與層數就需要設計者自己根據一些規則和目標來設定。在深度學習出現之前,隱含層的層數通常爲一層,即通常使用的神經網絡是3層網絡。
以通用的神經網絡模型來分析神經網絡的輸出。首先規定一些參數的意義:用wl+1ij 來表示第 l層第j 個節點和第l+1層第i個節點之間的權值,激活函數爲f(x),第l層一共有ln 個節點,偏置參數θl ,則第l+1層第j個節點的輸出爲:
Ol+1j=f(j=1lnwl+1ijIl+1i+θl)

設置一箇中間變量 zl+1=lnj=1wl+1ijIl+1i+θl ,而l+1層的輸入與上一層對應神經元的輸出是相同的,即Il+1i=Oli ,因此網絡中某個神經元的輸出可寫如下等式:
Ol+1j=f(zl+1)=f(j=1lnwl+1ijIl+1i+θl)=f(j=1lnwl+1ijOli+θl)

l+1 層的輸出,又是下一層的輸入。設一共有m 層網絡(包含輸出和輸入),則網絡輸出層第i個節點的輸出爲:
Omi=f(i=1lm1wmijImi+θm1)

由以上幾個等式就可以得到從對應輸入的輸出層某個神經元的輸出值。那怎麼保證輸出的值是所想要的?通常採用後向反饋方法,將誤差層層傳遞,並利用梯度下降法更新每一層的參數,這就是BP神經網絡。
1.2 後向反饋
假設網絡的輸入序列爲:(x1,y1),(x2,y2),......,(xn,yn) ,其中yixi 的期望輸出,網絡對應的實際輸出爲ai ,則其代價函數爲:
Ci=12||yiai||22

定義輸出層第j 個神經元的殘差爲:
δmj=Czmj

更新參數的目的就是使得代價函數最小,即要代價函數對相應參數的偏導數爲0 。爲了快速達到最小值,需要參數沿着梯度反方向更新:
wlij=wlijαCwlij

blij=blijαCblij

其中α 是學習率。因此參數更新問題就轉換成如何求偏導的問題。
代價函數與每一層每一個神經元的輸入都相關,因此第l 層第j 個神經元的殘差爲:
δlj=Czlj

l1 層第i 個神經元的殘差爲:
δl1i=Czl1i

由前面分析可知,zljzl1i 相關,因此第l1 層的殘差爲:
δl1i=Czl1i=Czljzljzl1i=δljzljzl1i=δljln1i=1wljif(zl1i)zl1i=(i=1ln1wljiδli)f(zl1i)

上式表明,當前層和下一層的殘差滿足一定的關係,因此可以通過輸出層的殘差逐層計算出每一層的殘差。
根據殘差,計算更新參數所需要的偏導數:
Cwlij=δliIlj

Cbli=δli

根據偏導就可以更新參數。

2、深度學習之卷積神經網絡
2.1 卷積神經網絡概要
卷積神經網絡是基於動物視覺感受野設計而成,由卷積層、池化層和其他層構成。
BP神經網絡中,每一層都是全連接的,假如輸入是一幅1000*1000*1 的圖像,則輸入層與隱層某一個節點將有1000*1000 個權重需要訓練,這會導致訓練困難。而卷積神經網絡的卷積層每個節點與上一層某個區域通過卷積核連接,而與這塊區域以外的區域無連接。同樣對於一副1000*1000*1的圖像,採用10*10的卷積核,那麼卷積層每個節點只需要訓練100個節點;假若卷積核在圖像上掃描的步長爲1個像素,則卷積層需要991*991個節點,若每個節點對應不同的卷積核,則需要訓練的參數依然是一個天文數字。爲此,卷積神經網絡提出了權值共享概念,即同一個卷積層內,所有神經元的權值是相同的,也就是用同一個卷積核生成卷積層上的所有節點。因此對於上面的訓練,只需要訓練100個權重。
池化層夾在卷積層中間,其主要作用逐步壓縮減少數據和參數的數量,也在一定程度上減少過擬合現象。其操作是把上一層輸入數據的某塊區域壓縮成一個值。
其他層:以前設計卷積神經網絡時,在後面都有歸一化層,用來模擬人腦的抑制作用,但是後來認爲對最終的效果沒什麼幫助,就用的很少了;最後用的分類層是全連接層。
CNN的訓練也採用前向和後向傳播。
2.2 前向傳播
(1)卷積層
卷積操作是用一個卷積核與圖像對應區域進行卷積得到一個值,然後不斷的移動卷積核和求卷積,就可完成對整個圖像的卷積。在卷積神經網絡中,卷積層的計算不僅涉及一般圖像卷積概念,還有深度和步長的概念。深度決定同一個區域的神經元個數,也就是有幾個卷積覈對同一塊區域進行卷積操作;步長是卷積核移動多少個像素。
以一個例子來說明卷積層的具體操作。輸入數據的大小爲5*5*3,卷積核大小爲3*3,輸出的深度爲2,如圖 4所示。圖中將輸入數據在長寬方向進行了填0擴充。
這裏寫圖片描述
圖 4 卷積層操作例子
輸入數據是一個3通道數據,因此卷積層每個深度的節點都有3個不同的卷積核,分別與輸入的3個通道進行卷積,每個通道卷積後都得到一個值,也就是3個通道卷積完成後,有3個值,再把這3值和偏置求和就得到節點的值。每移動卷積核都進行這樣的計算。在這篇博客中有卷積計算的動態圖。
得到了卷積層每層深度的特徵圖後,需要將這些特徵輸入到激活函數中,從而得到卷積層最終的輸出。神經網絡中常用的sigmoid函數和雙曲正切函數容易飽和,造成梯度消失。在CNN中採用的是另外一種激活函數:ReLU。
ReLU函數是有神經科學家Dayan、Abott從生物學角度,模擬腦神經元接受信號更精確的激活模型,其表達式爲:

f(x)=max(0,x)

(2)池化層(下采樣)
池化層現在通常採用區域最大值來代表整個區域,在最大值之前常採用的平均值。最大值操作如圖 5所示。池化層操作主要涉及核大小的選擇。
這裏寫圖片描述
圖 5 池化層操作

(3)全連接層
全連接層主要用來進行學習,和傳統BP神經網絡類似。CNN一般通常採用SoftMax方法進行分類。

2.3 後向傳播(參照論文Notes on Convolutional Neural Networks)
學習的目的是獲得對輸入準確精煉的描述。影響輸出結果的是每層的權重和偏置,因此爲了達到目標,需要將輸出誤差層層傳遞回去,看每個參數對誤差的影響,並因此調整參數。
(1)誤差傳遞概述
對於輸入數據對(x,y) ,經過CNN網絡處理,其輸出爲 a 。根據上面BP神經網絡的分析可知,層的殘差滿足遞推關係。但是卷積神經網絡在結構上和bp神經網絡不同,需要對CNN網絡做一些處理,使得可以套用bp網絡的公式。
(2)當前層(l)爲卷積層
卷積層的輸出是由若干個卷積核與上一層輸出卷積之和,並將這些和通過激活函數而生成的:

xlj=f(iMjxl1iklij+blj)

其中Mj 表示選擇的輸入maps的集合。通常maps是人工選擇的,也可以自動選擇。
假設卷積層 的下一個是池化層l+1 。池化層輸出的每一個像素都對應上一層(卷積層)的一個區域,即這兩層之間不是全連接。因此需要對池化層的殘差進行上採樣(upsample)構造一個新的殘差map,使得殘差map和卷積層的map一致,然後再根據新池化層(l+1 層)的殘差計算卷積層的殘差:
δlj=βl+1j(f(ulj)up(δl+1j))

其中up() 表示上採樣:up(x)=x1n×n
則可以得到偏導:
Eb=u,v(δlj)uv

可採用後向傳播來計算該權重的偏導。因爲權重是共享的,因此需要對與該核有聯繫的所有點對進行求梯度,然後對這些梯度進行求和:
Eklij=u,v(δlj)uv(pl1i)uv

其中(pl1i)uvl1 層中與核逐元素相乘的區域。
(3)當前層爲池化層
池化層的輸入maps和輸出maps個數相同,但是輸出maps維數都減小了:
xlj=f(βljdown(xl1j)+blj)

池化層的下一層是卷積層,必須要找到對應的區域,即找到當前層殘差map對應下一層殘差map的像素,這樣就可以利用BP方法實現δ 的遞推:
δlj=f(ulj)conv2(δl+1j,rot180(kl+1j),full)

得到殘差,就可以對偏置和權值進行偏導:
Eb=u,v(δlj)uv

Eβj=u,v(δljdown(xl1j))uv

(4)卷積層輸出的組合
卷積層的輸出是由上一層多個maps決定的。有些文獻中採用人工選擇maps組合。爲了提升組合效率,可以讓CNN網絡學習如何組合maps。設αij 爲第i 個輸入map對第j 個輸出map的貢獻,則可得到第j 個map的輸出爲:
xlj=f(i=1Ninαij(xl1ikli)+blj)

其中滿足iαij=10αij1
αij 的約束可以用包含隱含變量cij 的softmax函數來表示αij
αij=exp(cij)kexp(ckj)

爲了方便,只考慮卷積輸出一個map,因此上式的下標j 可以省略。故softmax函數的倒數可以表示爲:
αkci=δkiαiαiαk

誤差對第l 層變量αi 的偏導爲:
Eαi=Eululαi=u,v(δl(xl1ikl1i))uv

則誤差對參數ci 的偏導數爲:
Eci=αi(EαikEαkαk)

由於輸出map不是和所有的輸入map連接,也即αi 滿足一定的稀疏性,故需要在代價函數中增加稀疏約束項Ω(α) ,則代價函數爲:
E^n=En+λi,j|(α)ij|

這個約束項對參數ci 的偏導爲:
Ωci=λsign(αi)αici=λ(|αi|αik|αk|)

因此對參數ci 的偏導數爲:
E^nci=Enci+Ωci
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章