卷積神經(jīng)網(wǎng)絡(luò)的反向傳播

1.DNN的反向傳播

首先回顧深度神經(jīng)網(wǎng)絡(luò)(DNN)的反向傳播

forward:a^L=\sigma (z^L)=\sigma( w^La^{L-1}+b^L)

Loss Function:J=\frac{1}{2} ||a^L-y||^2

backward:

w的梯度:

b的梯度:

令:\delta^L=\frac{\partial J}{\partial z^L} =(a^L-y)\odot \sigma

已知\delta^L,推導(dǎo)上一層\delta^{L-1}

2.CNN的前向傳播

2.1卷積層

(1)單通道(極簡情況)

為了簡單起見,設(shè)輸入X為3* 3,單通道,卷積核K為2*2,輸出Y為2*2,單通道。XconvK=Y,即:

在計算時會轉(zhuǎn)化為:

所以,卷積運(yùn)算最終轉(zhuǎn)化為矩陣運(yùn)算。即X、K、Y變形在之后對應(yīng)矩陣變?yōu)閄C、KC、YC,則YC=XC\cdot KC

Y和K只要reshape一下就可以了,但X需要特別處理,這個處理過程叫im2col(image to column),就是把卷積窗口中的數(shù)拉成一行,每行k^2列,共(X.w-k+1)(X.h-k+1)行。

(2)多通道(實際情況)

下面是一張被廣泛引用的說明圖,圖中顯示的輸入是3通道(3層,比如R、G、B共3個channel),輸出是2通道(channel),于是總共有3*2=6個卷積核,每個核有4個元素,3*4=12,所以6個卷積核排成一個12*2的核矩陣,即為權(quán)重矩陣,把這6個KC的組合(權(quán)重矩陣)記為WC。

圖中最底下一行表示兩個矩陣乘積運(yùn)算,就是卷積層的前向傳播算法。實際編碼時還會加上偏置,而且還要考慮Batchs。

如圖中所示,如果輸入的維度為B,H,W,C_{in},那么WC_{[k,k,C_{in},C_{out}]}\implies WC_{[k*k*C_{in},C_{out}]}

上圖中顯示的乘法維度是:X_{[B,(H-k+1)*(W-k+1),k*k*C_{in}]}\cdot WC_{[k*k*C_{in},C_{out}]}=Y_{[B,(H-k+1)*(W-k+1),C_{out}]}

最后將Y_{[B,(H-k+1)*(W-k+1),C_{out}]}\implies reshpe\implies Y_{[B,(H-k+1),(W-k+1),C_{out}]}即可

2.2池化層

池化(Pooling):也稱為欠采樣或下采樣。主要用于特征降維,壓縮數(shù)據(jù)和參數(shù)的數(shù)量,減小過擬合,同時提高模型的容錯性。主要有:

Max Pooling:最大池化

Average Pooling:平均池化

3.CNN的反向傳播

3.1池化層

池化層的反向傳播比較容易理解,我們以最大池化舉例,上圖中,池化后的數(shù)字6對應(yīng)于池化前的紅色區(qū)域,實際上只有紅色區(qū)域中最大值數(shù)字6對池化后的結(jié)果有影響,權(quán)重為1,而其它的數(shù)字對池化后的結(jié)果影響都為0。假設(shè)池化后數(shù)字6的位置誤差為\delta 誤差反向傳播回去時,紅色區(qū)域中最大值對應(yīng)的位置誤差即等于\delta ,而其它3個位置對應(yīng)的\delta 誤差為0。因此,在卷積神經(jīng)網(wǎng)絡(luò)最大池化前向傳播時,不僅要記錄區(qū)域的最大值,同時也要記錄下來區(qū)域最大值的位置,方便誤差的反向傳播。

而平均池化就更簡單了,由于平均池化時,區(qū)域中每個值對池化后結(jié)果貢獻(xiàn)的權(quán)重都為區(qū)域大小的倒數(shù),所以誤差反向傳播回來時,在區(qū)域每個位置的誤差都為池化后誤差\delta 除以區(qū)域的大小。

3.2 卷積層

由前面的前向傳播可知卷積核的計算為:YC=XC\cdot KC

記:

在反向傳播中,\delta 是從后面一層(一般是激活函數(shù)層或池化層)傳過來的,是一個已知量,在此基礎(chǔ)上求\nabla K,\nabla X,\nabla b

1.求\nabla K

\nabla KC= XC^T\nabla YC

\nabla KC只需要reshape一下就可以得到\nabla K

2.求\nabla X

根據(jù)反向傳播公式,\nabla XC = \nabla YC \cdot  KC^T

但是從\nabla XC 還原到\nabla X并非易事,im2col的逆映射計算復(fù)雜度高得不能接受,要計算\nabla X還得另尋它途。

下面是新的計算方式的推導(dǎo):

根據(jù)前向傳播:

可以計算每個x_{ij}的導(dǎo)數(shù):

所以:

3.求\nabla b

我們的b是一個列向量,它給卷積結(jié)果的每一個通道都加上同一個標(biāo)量。因此,在反向傳播時,它的導(dǎo)數(shù)等于卷積結(jié)果的\delta 誤差在每一個通道上將所有\delta 誤差進(jìn)行求和的結(jié)果,即:\nabla b = \sum_{x} \sum_{y}\delta

總結(jié)

由于簡書有些公式支持的不好,所以有些地方我用了截圖,如果有讀不懂的,可以在評論區(qū)回復(fù)郵箱,我把word版發(fā)給你們。另外,如果大家發(fā)現(xiàn)我有地方寫得不對或者有疑問的,麻煩評論,我會回復(fù)并改正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容