目錄鏈接:吳恩達(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