1.DNN的反向傳播
首先回顧深度神經網(wǎng)絡(DNN)的反向傳播
forward:
Loss Function:
backward:
w的梯度:
b的梯度:
令:
已知艰额,推導上一層
:
2.CNN的前向傳播
2.1卷積層
(1)單通道(極簡情況)
為了簡單起見,設輸入X為3* 3乳乌,單通道疆股,卷積核K為2*2抒巢,輸出Y為2*2伐脖,單通道狸捕。喷鸽,即:
在計算時會轉化為:
所以,卷積運算最終轉化為矩陣運算灸拍。即X魁衙、K报腔、Y變形在之后對應矩陣變?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的核矩陣,即為權重矩陣岂贩,把這6個KC的組合(權重矩陣)記為WC茫经。
圖中最底下一行表示兩個矩陣乘積運算,就是卷積層的前向傳播算法萎津。實際編碼時還會加上偏置卸伞,而且還要考慮Batchs。
如圖中所示锉屈,如果輸入的維度為瞪慧,那么
上圖中顯示的乘法維度是:
最后將即可
2.2池化層
池化(Pooling):也稱為欠采樣或下采樣。主要用于特征降維部念,壓縮數(shù)據(jù)和參數(shù)的數(shù)量弃酌,減小過擬合,同時提高模型的容錯性儡炼。主要有:
Max Pooling:最大池化
Average Pooling:平均池化
3.CNN的反向傳播
3.1池化層
池化層的反向傳播比較容易理解妓湘,我們以最大池化舉例,上圖中乌询,池化后的數(shù)字6對應于池化前的紅色區(qū)域榜贴,實際上只有紅色區(qū)域中最大值數(shù)字6對池化后的結果有影響,權重為1,而其它的數(shù)字對池化后的結果影響都為0唬党。假設池化后數(shù)字6的位置誤差為誤差反向傳播回去時鹃共,紅色區(qū)域中最大值對應的位置誤差即等于
,而其它3個位置對應的
誤差為0驶拱。因此霜浴,在卷積神經網(wǎng)絡最大池化前向傳播時,不僅要記錄區(qū)域的最大值蓝纲,同時也要記錄下來區(qū)域最大值的位置阴孟,方便誤差的反向傳播。
而平均池化就更簡單了税迷,由于平均池化時永丝,區(qū)域中每個值對池化后結果貢獻的權重都為區(qū)域大小的倒數(shù),所以誤差反向傳播回來時箭养,在區(qū)域每個位置的誤差都為池化后誤差除以區(qū)域的大小慕嚷。
3.2 卷積層
由前面的前向傳播可知卷積核的計算為:
記:
在反向傳播中,是從后面一層(一般是激活函數(shù)層或池化層)傳過來的,是一個已知量毕泌,在此基礎上求
1.求
只需要reshape一下就可以得到
2.求
根據(jù)反向傳播公式喝检,
但是從還原到
并非易事,im2col的逆映射計算復雜度高得不能接受懈词,要計算
還得另尋它途。
下面是新的計算方式的推導:
根據(jù)前向傳播:
可以計算每個的導數(shù):
所以:
3.求
我們的是一個列向量辩诞,它給卷積結果的每一個通道都加上同一個標量坎弯。因此,在反向傳播時译暂,它的導數(shù)等于卷積結果的
誤差在每一個通道上將所有
誤差進行求和的結果抠忘,即:
總結
由于簡書有些公式支持的不好,所以有些地方我用了截圖外永,如果有讀不懂的崎脉,可以在評論區(qū)回復郵箱,我把word版發(fā)給你們伯顶。另外囚灼,如果大家發(fā)現(xiàn)我有地方寫得不對或者有疑問的,麻煩評論祭衩,我會回復并改正