卷積神經網絡的訓練

卷積神經網絡的訓練

全鏈接神經網絡相比,卷積神經網絡的訓練要複雜一些。但訓練的原理是同樣的:利用鏈式求導計算損失函數對每一個權重的偏導數(梯度),而後根據梯度降低公式更新權重。訓練算法依然是反向傳播算法。算法

咱們先回憶一下上一篇文章零基礎入門深度學習(3) - 神經網絡和反向傳播算法介紹的反向傳播算法,整個算法分爲三個步驟:數組

  1. 前向計算每一個神經元的輸出值 aj j 表示網絡的第 j 個神經元,如下同);
  2. 反向計算每一個神經元的偏差項 δj δj 在有的文獻中也叫作敏感度(sensitivity)。它其實是網絡的損失函數 Ed 對神經元加權輸入 netj 的偏導數,即 δj=Ednetj
  3. 計算每一個神經元鏈接權重 wji 梯度 wji 表示從神經元 i 鏈接到神經元 j 的權重),公式爲 Edwji=aiδj ,其中, ai 表示神經元 i 的輸出。

最後,根據梯度降低法則更新每一個權重便可。網絡

對於卷積神經網絡,因爲涉及到局部鏈接下采樣的等操做,影響到了第二步偏差項 δ 的具體計算方法,而權值共享影響了第三步權重 w 梯度的計算方法。接下來,咱們分別介紹卷積層和Pooling層的訓練算法。ide

卷積層的訓練

對於卷積層,咱們先來看看上面的第二步,即如何將偏差項 δ 傳遞到上一層;而後再來看看第三步,即如何計算filter每一個權值 w 梯度函數

卷積層偏差項的傳遞

最簡單狀況下偏差項的傳遞

咱們先來考慮步長爲一、輸入的深度爲一、filter個數爲1的最簡單的狀況。學習

假設輸入的大小爲3*3,filter大小爲2*2,按步長爲1卷積,咱們將獲得2*2的feature map。以下圖所示:atom

在上圖中,爲了描述方便,咱們爲每一個元素都進行了編號。用 δl1i,j 表示第 l1 層第 j 行第 j 列的偏差項;用 wm,n 表示filter第 m 行第 n 列權重,用 wb 表示filter的偏置項;用 al1i,j 表示第 l1 層第 i 行第 j 列神經元的輸出;用 netl1i,j 表示第 l1 行神經元的加權輸入;用 δli,j 表示第 l 層第 j 行第 j 列的偏差項;用 fl1 表示第 l1 層的激活函數。它們之間的關係以下:spa

netlal1i,j=conv(Wl,al1)+wb=fl1(netl1i,j)(17)(18)

上式中, netl Wl al1 都是數組, Wl 是由 wm,n 組成的數組, conv 表示卷積操做。code

在這裏,咱們假設第 l 中的每一個 δl 值都已經算好,咱們要作的是計算第 l1 層每一個神經元的偏差項 δl1 orm

根據鏈式求導法則:

δl1i,j=Ednetl1i,j=Edal1i,jal1i,jnetl1i,j(19)(20)

咱們先求第一項 Edal1i,j 。咱們先來看幾個特例,而後從中總結出通常性的規律。

例1,計算 Edal11,1 al11,1 僅與 netl1,1 的計算有關:

netj1,1=w1,1al11,1+w1,2al11,2+w2,1al12,1+w2,2al12,2+wb

所以:

Edal11,1=Ednetl1,1netl1,1al11,1=δl1,1w1,1(21)(22)

例2,計算 Edal11,2 al11,2 netl1,1 netl1,2 的計算都有關:

netj1,1=w1,1al11,1+w1,2al11,2+w2,1al12,1+w2,2al12,2+wbnetj1,2=w1,1al11,2+w1,2al11,3+w2,1al12,2+w2,2al12,3+wb

所以:

Edal11,2=Ednetl1,1netl1,1al11,2+Ednetl1,2netl1,2al11,2=δl1,1w1,2+δl1,2w1,1(23)(24)

例3,計算 Edal12,2 al12,2 netl1,1 netl1,2 netl2,1 netl2,2 的計算都有關:

netj1,1=w1,1al11,1+w1,2al11,2+w2,1al12,1+w2,2al12,2+wbnetj1,2=w1,1al11,2+w1,2al11,3+w2,1al12,2+w2,2al12,3+wbnetj2,1=w1,1al12,1+w1,2al12,2+w2,1al13,1+w2,2al13,2+wbnetj2,2=w1,1al12,2+w1,2al12,3+w2,1al13,2+w2,2al13,3+wb

所以:

Edal12,2=Ednetl1,1netl1,1al12,2+Ednetl1,2netl1,2al12,2+Ednetl2,1netl2,1al12,2+Ednetl2,2netl2,2al12,2=δl1,1w2,2+δl1,2w2,1+δl2,1w1,2+δl2,2w1,1(25)(26)

從上面三個例子,咱們發揮一下想象力,不難發現,計算 Edal1 ,至關於把第 l 層的sensitive map周圍補一圈0,在與180度翻轉後的filter進行cross-correlation,就能獲得想要結果,以下圖所示:

由於卷積至關於將filter旋轉180度的cross-correlation,所以上圖的計算能夠用卷積公式完美的表達:

Edal=δlWl

上式中的 Wl 表示第 l 層的filter的權重數組。也能夠把上式的卷積展開,寫成求和的形式:

Edali,j=mnwlm,nδli+m,j+n

如今,咱們再求第二項 al1i,jnetl1i,j 。由於

al1i,j=f(netl1i,j)

因此這一項極其簡單,僅求激活函數 f 的導數就好了。

al1i,jnetl1i,j=f(netl1i,j)

將第一項和第二項組合起來,咱們獲得最終的公式:

δl1i,j=Ednetl1i,j=Edal1i,jal1i,jnetl1i,j=mnwlm,nδli+m,j+nf(netl1i,j)(7)(27)(28)(29)

也能夠將式7寫成卷積的形式:

δl1=δlWlf(netl1)(8)

其中,符號 表示element-wise product,即將矩陣中每一個對應元素相乘。注意式8中的 δl1 δl netl1 都是矩陣

以上就是步長爲一、輸入的深度爲一、filter個數爲1的最簡單的狀況,卷積層偏差項傳遞的算法。下面咱們來推導一下步長爲S的狀況。

卷積步長爲S時的偏差傳遞

咱們先來看看步長爲S與步長爲1的差異。

如上圖,上面是步長爲1時的卷積結果,下面是步長爲2時的卷積結果。咱們能夠看出,由於步長爲2,獲得的feature map跳過了步長爲1時相應的部分。所以,當咱們反向計算偏差項時,咱們能夠對步長爲S的sensitivity map相應的位置進行補0,將其『還原』成步長爲1時的sensitivity map,再用式8進行求解。

輸入層深度爲D時的偏差傳遞

當輸入深度爲D時,filter的深度也必須爲D, l1 層的 di 通道只與filter的 di 通道的權重進行計算。所以,反向計算偏差項時,咱們可使用式8,用filter的第 di 通道權重對第 l 層sensitivity map進行卷積,獲得第 l1 di 通道的sensitivity map。以下圖所示:

filter數量爲N時的偏差傳遞

filter數量爲N時,輸出層的深度也爲N,第 i 個filter卷積產生輸出層的第 i 個feature map。因爲第 l1 每一個加權輸入 netl1d,i,j 都同時影響了第 l 層全部feature map的輸出值,所以,反向計算偏差項時,須要使用全導數公式。也就是,咱們先使用第 d 個filter對第 l 層相應的第 d 個sensitivity map進行卷積,獲得一組N個 l1 層的偏sensitivity map。依次用每一個filter作這種卷積,就獲得D組偏sensitivity map。最後在各組之間將N個偏sensitivity map 按元素相加,獲得最終的N個 l1 層的sensitivity map:

δl1=d=0DδldWldf(netl1)(9)

以上就是卷積層偏差項傳遞的算法,若是讀者還有所困惑,能夠參考後面的代碼實現來理解。

卷積層filter權重梯度的計算

咱們要在獲得第 l 層sensitivity map的狀況下,計算filter的權重的梯度,因爲卷積層是權重共享的,所以梯度的計算稍有不一樣。

如上圖所示, ali,j 是第 l1 層的輸出, wi,j 是第 l 層filter的權重, δli,j 是第 l 層的sensitivity map。咱們的任務是計算 wi,j 的梯度,即 Edwi,j

相關文章
相關標籤/搜索