目錄鏈接:吳恩達(dá)Deep Learning學(xué)習(xí)筆記目錄
?1.從DNN前向傳播和BP后向傳播說起
?2.CNN前向傳播和BP后向傳播
注:為減小書寫、計算量,文中推導(dǎo)都忽略了偏置b。
1. 從DNN前向傳播和BP后向傳播說起
??之前所學(xué)的DNN是一個全連接的網(wǎng)絡(luò),采用BP算法來計算各參數(shù)的梯度,只需要采用鏈?zhǔn)椒▌t將誤差求導(dǎo)傳遞到每個神經(jīng)元的每個參數(shù)上即可。特別是,將數(shù)據(jù)向量化后,求解梯度過程較為簡單。但對于CNN來說,CNN涉及到了卷積和池化,在進(jìn)行后向傳播計算時,僅采用矩陣乘法、元素級乘法(對應(yīng)元素相乘)根本無法進(jìn)行傳遞計算。那么CNN的BP算法是如何實現(xiàn)的呢?首先從CNN的BP算法說起。
??DNN符號約定:
??①小寫字母代表一個值,大寫字母代表向量或矩陣
??②輸入數(shù)據(jù)維度為(n,m)表示n個特征,m個樣本
??③上標(biāo)[l]:第l層,如A[l],表示第l層激活值
??④下標(biāo)n:某一層第n個神經(jīng)元,如果是輸入數(shù)據(jù)X,則代表第n個特征,如a[l]1,表示第l層第1個激活值
??⑤w[l]ij:表示l層參數(shù),連接了l層第i個神經(jīng)元和第l-1層第j個神經(jīng)元
??⑥向量化導(dǎo)數(shù)符號:dZ即代表最終誤差對Z的梯度
??⑦δ[l]即dZ[l],兩個是一個東西,只是描述不一樣




注:A、Z、W、b求導(dǎo)后應(yīng)該維持維度不變,所以上述向量化表達(dá)的式子中含有矩陣的轉(zhuǎn)置操作。
2. CNN前向傳播和BP后向傳播
??卷積層前向傳播如下圖所示(步長為1),l-1層的輸出,高=3、寬=3、通道數(shù)=3,shape=(3,3,3);l層一共有兩個卷積核,每個卷積核shape=(2,2,3);l層輸出shape=(2,2,2)。
??①l-1層的通道數(shù)與l層卷積核通道數(shù)相同,所以在進(jìn)行卷積時,是同一個卷積核的各通道對應(yīng)l-1層的通道輸出A去卷積;②卷積后,在通道維度上進(jìn)行疊加,一個卷積核最后只輸出一個通道的數(shù)據(jù);③卷積核的數(shù)量決定了該層輸出的通道數(shù)量,激活后維度不變。因此,維度變化為:(m,n_h_pre,n_w_pre,n_c_pre)→(f,f,n_c_pre,n_c)→ (m,n_h,n_w,n_c)

??而在池化層中(在此將卷積層和池化都當(dāng)作單獨的一層),由于kernel沒有參數(shù)
w,只有單個卷積核,kernel的通道數(shù)可以視為1或者n_c(因為它沒有參數(shù)w),池化前后,通道數(shù)不變,高和寬改變。下圖為一個池化過程,池化時,kernel移動的步長為2。
??①
單通道卷積時是局部連接,而不是全連接,也就是說一個z值將不再和上一層所有a值關(guān)聯(lián),那么dW的值要怎么求?當(dāng)然,如果將式子一個列出來求dW,一個個求比較簡單,單計算量較大,如何實現(xiàn)類似DNN向量化批量的求解才是我們要關(guān)心的;??②
由于向前卷積時,相當(dāng)于將A[l-1]復(fù)制了n_c份(卷積核數(shù)量或下一層輸出通道數(shù)),卷積輸出n_c個通道,這n_c個通道的數(shù)據(jù)之間沒有權(quán)重關(guān)系,那么向后傳播時,A[l-1]每個通道都將接收n_c個通道傳遞回來的誤差,此時這n_c維的數(shù)據(jù)如何傳遞回一個通道?(如convolving圖中紫色線);??③
池化過程,高和寬縮減,原有信息已經(jīng)丟失,反向傳遞時,如何將小尺寸誤差傳遞回大尺寸數(shù)據(jù)(如pooling圖中,如何將4個格子的數(shù)據(jù)傳遞回16個格子);??④
池化層沒有激活函數(shù),這個好解決,激活后等于其本身就行。
?2.1 卷積層向后傳播
??根據(jù)DNN的經(jīng)驗,要求dW,那么需要先求出dZ、dA,在此假設(shè)已知當(dāng)前l層dZ。
??(1)求dA

??首先解決第①個問題。如上圖所示,是一個單通道的數(shù)據(jù)經(jīng)過單個單通道卷積核,輸出單通道數(shù)據(jù)(將卷積連接展開后如圖左所示)。對于多通道輸入、單個多通道卷積核、單通道輸出來說,計算方式一樣。已知dZ,求dA的鏈?zhǔn)角髮?dǎo)公式如下:


l層某一通道(假設(shè)通道x)上的dZ要傳遞回l-1層的某一通道(假設(shè)通道y)的dA,只需要將y通道對應(yīng)的單個卷積核的通道y的權(quán)重矩陣,水平、垂直方向都翻轉(zhuǎn)180°,dZ padding 0,直接卷積即得到dA。有點繞,看一下前面convolving圖,將前向傳播的紅綠藍(lán)三根帶箭頭的線,反向傳遞就明白了。第①個問題解決。l-1層dA計算公式為:
l層的每個通道,假設(shè)x個)都要將誤差傳遞給l-1層,那么l-1層的一個通道都要接收x個數(shù)據(jù),但卷積核之間又沒有聯(lián)系,根據(jù)吳恩達(dá)deep learning課程作業(yè)里的做法是將這x個數(shù)據(jù)累加起來,作為l-1層一個通道的dA。emm...,第②個問題解決了。??(2)求dZ
??根據(jù)



??前述已知
l層dZ 和l-1層dA,根據(jù)

??卷積層各參數(shù)的求導(dǎo)推導(dǎo)公式如下:

?2.2 池化層向后傳播
??由于池化向前傳播時,會使得h、w兩個維度縮減,丟失掉部分信息,那么在后向傳播時,如何將尺寸小的矩陣還原到原來大???一般,池化分為最大池化和平均池化,兩種池化后向傳播時處理的方式略有不同。
??(1)最大池化后向傳播
??在此將池化當(dāng)作一層,假設(shè)已知l層dZ=dA(池化無激活函數(shù),視激活后等于本身),求l-1層dZ=dA,下面對一個通道數(shù)據(jù)進(jìn)行舉例:

??平均池化的后向傳播是將
l層dZ=dA求局部區(qū)域大小的平均值(被池化時的區(qū)域),填充到各個位置即可:
參考資料:
卷積神經(jīng)網(wǎng)絡(luò)(CNN)反向傳播算法
CNN的反向傳播
Convolutional Neural Networks: Step by Step