1.DNN的反向傳播
首先回顧深度神經(jīng)網(wǎng)絡(luò)(DNN)的反向傳播
forward:
Loss Function:
backward:
w的梯度:

b的梯度:

令:
已知,推導(dǎo)上一層
:

2.CNN的前向傳播
2.1卷積層
(1)單通道(極簡情況)
為了簡單起見,設(shè)輸入X為3* 3,單通道,卷積核K為2*2,輸出Y為2*2,單通道。,即:

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

所以,卷積運(yùn)算最終轉(zhuǎn)化為矩陣運(yùn)算。即X、K、Y變形在之后對應(yīng)矩陣變?yōu)閄C、KC、YC,則
Y和K只要reshape一下就可以了,但X需要特別處理,這個處理過程叫im2col(image to column),就是把卷積窗口中的數(shù)拉成一行,每行列,共(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。

如圖中所示,如果輸入的維度為,那么
上圖中顯示的乘法維度是:
最后將即可
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的位置誤差為誤差反向傳播回去時,紅色區(qū)域中最大值對應(yīng)的位置誤差即等于
,而其它3個位置對應(yīng)的
誤差為0。因此,在卷積神經(jīng)網(wǎng)絡(luò)最大池化前向傳播時,不僅要記錄區(qū)域的最大值,同時也要記錄下來區(qū)域最大值的位置,方便誤差的反向傳播。
而平均池化就更簡單了,由于平均池化時,區(qū)域中每個值對池化后結(jié)果貢獻(xiàn)的權(quán)重都為區(qū)域大小的倒數(shù),所以誤差反向傳播回來時,在區(qū)域每個位置的誤差都為池化后誤差除以區(qū)域的大小。
3.2 卷積層
由前面的前向傳播可知卷積核的計算為:
記:

在反向傳播中,是從后面一層(一般是激活函數(shù)層或池化層)傳過來的,是一個已知量,在此基礎(chǔ)上求
1.求
只需要reshape一下就可以得到
2.求
根據(jù)反向傳播公式,
但是從還原到
并非易事,im2col的逆映射計算復(fù)雜度高得不能接受,要計算
還得另尋它途。
下面是新的計算方式的推導(dǎo):
根據(jù)前向傳播:

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

所以:


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

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