1. 程式人生 > >CS229 6.18 CNN 的反向傳導演算法

CS229 6.18 CNN 的反向傳導演算法

本文主要內容是 CNN 的 BP 演算法,看此文章前請保證對CNN有初步認識。

網路表示

CNN相對於傳統的全連線DNN來說增加了卷積層與池化層,典型的卷積神經網路中(比如LeNet-5 ),開始幾層都是卷積和池化的交替,然後在靠近輸出的地方做成全連線網路,這時候已經將所有兩維2D的特徵maps轉化為全連線的一維網路的輸入。在前向傳導或城中中,也只有兩處與傳統的 MLP 有所不同,分別是卷積層前向傳導,與 pooling 傳導到卷積層,如下圖所示:

在上圖中,層 (l1)(l−1) 可以為pooling 層或是輸入層,(l)

(l) 層對 (l1)(l−1) 層進行卷積操作,(l+1)(l+1) 對 (l)(l) 進行pooling操作。

符號表示

K(l1)K(l−1):(l1)(l−1) 層用到的卷積核,即(l1)(l−1) 層的權值引數;

K(l1)ijKij(l−1):從 (l1)

(l−1)層對映到 (l)(l) 層Feature Map j 所用到的卷積核 jj 的第 ii 個卷積模板;

b(l1)b(l−1):(l1)(l−1) 層的偏置引數;

b(l1)jbj(l−1):對映到 (l)(l) 層中的 Feature Map j 的偏置引數;

w(l)w(l):表示 (l)(l) 層的引數;

(l)">w(l)jwj(l):卷積層第 j 個Feature Map 到 pooling 層第 j 個 Feature Map 是一一對應關係,即每個Feature Map 對應一個w(l)jwj(l);

b(l)b(l):(l)(l) 層的偏置引數;

b(l)jbj(l):卷積層第 j 個Feature Map 到pooling層第 j 個 Feature Map的偏置引數;

z(l)z(l):(l)(l) 層的輸入;

a(l)a(l):(l)(l) 層的輸出.

前向傳導

CNN 的前向傳導,首先從 (l1)(l−1) 層到 (l)(l) 層,此處一般為多對多的形式,即對多個通道進行卷積操作,生成多個Feature Map,(l)(l)層第 j 個Feature Map的輸入 z(l)jzj(l) 的計算如下:

 

z(l)j=⎛⎝jMja(l1)iK(l1)ij⎞⎠+b(l1)jzj(l)=(∑j∈Mjai(l−1)∗Kij(l−1))+bj(l−1)

 

需要注意:這裡   z(l)j,a(l1)i,K(l1)ijzj(l),ai(l−1),Kij(l−1) 均為向量形式," "表示卷積操作,z(l)jzj(l) 代表 第j 個 Feature Map 的輸入,a(l1)iai(l−1) 代表第 (l1)(l−1) 層第 i 個 Feature Map的輸出,Kl1ijKijl−1 代表第 j 個卷積核中第 i 個卷積模板,要生成 (l)(l) 層的第 j 個Feature Map,需要對 (l1)(l−1) 層的 MjMj 個通道同時進行卷積操作,對得到的結果加偏置求和即可。

第 (l)(l) 層的輸出只需要對輸入z(l)jzj(l) 做一個啟用函式即可:

綜上,從層 到層可以用下圖描述:

 接下來從到傳導到第層,此處對應pooling 操作,一般為一對一的形式,層的第 N 個 Feature Map 生成層的N個 Feature Map ,計算過程如下:

這裡down(.)對應的是一個下采樣(sub-sampling) 函式,這個函式會對層的輸出中的n-n的畫素塊進行pooling操作,使得輸出在橫縱方向都縮小n倍。經過down(.)操作後,有相同的 size 根據以上公式計算即可。同理,輸出繼續做一個對映:

至此,前向傳導過程已經可以求得,接下來與MLP類似,就是根據鏈式求導法則,求得殘差的反向傳導。

前饋 (Back Propagation)

對於  pooling 層,假設已知其第 j 個Feature Map 的殘差向量 ,將其傳導到,即pooling層的誤差傳導到卷積層:

比如對於,即層的第 j 個 Feature Map 的殘差項如下圖左,對其做 操作,得到下圖右:

                  

                                         後

操作與相反, 操作會還原的殘差map,使其與卷積層的map大小一致,即還原到down(.)之前的大小。這裡殘差為一對一傳遞,將層 的map的啟用函式的偏導數與從第 層的得到的殘差map逐元素相乘,最後乘以引數即可,注意這裡為一個常量,每個Feature Map j 對應一個引數

卷積層層一般為多對多的關係,根據以上分析求得了卷積層的殘差項,接下來就是卷積層的殘差反向傳導的過程。卷積層前面分兩種情況,1)若卷積層前面為pooling層,則上面假設已知的就是根據這裡的推導所求得,並不是憑空出現。2)卷積層前面為初始輸入。

首先回憶卷積過程,卷積核 j 會對層多個通道進行卷積(每個通道對應 j 的一個卷積模板)求和,才會得到得到層  的第 j 個 Feature Map,所以層的通道 i 的殘差項應該由與之相關的層  的所有Feature Map j 共同前向傳導。假設與層的通道 i 相關的  的所有Feature Map 共有 M 個,則有:

後做卷積的意思是完全卷積 假設輸入影象 A 大小為 a x b,卷積核 B 大小為c x d,操作會對A進行填充,在 A 左右各填充(d-1)列,上下各填充(c-1)行,即  後 A 的大小變為( a+2c-2)x(b+2d-2),用B對後的A做卷積,則卷積返回的大小為(a+b-1)x(a+b-1)。即為旋轉180度。

此處公式設計到卷積操作,形式比較複雜,下面引入一個示例來講解上述公式:

層的大小為 3 x 3,對層的通道 i (為了便於說明,假設層為單通道),通過如下兩個卷積核  、    ,得到  層的兩個Feature Map,假設其殘差已經求得(前邊已經講過如何求卷積層的殘差),殘差分別為 

 

分別進行操作與操作:

進行卷積,進行卷積:

注意此處不考慮項(或者認為是線性啟用 即 = 1),對結果求和有:

以上過程即完成了整個公式的計算,為什麼這麼計算呢?可以把以上過程展開,把與  展開為全連線的形式,(此處清楚起見,只寫了),根據MLP中誤差按權值平均反向傳導的形式 可求得層的殘差,其實歸根到底還是MLP得形式。

 

求解網路引數的導數

至此,關於CNN中的輸入前向傳導與殘差的後向反饋全部計算完成,下面可以根據來對網路的權值    進行求導。

假設當前損失函式為

1)對於 ,根據鏈式求導法則:

 

根據殘差的定義與前邊的計算公式:

   

可得到如下公式,公式中的累加是因為 conv 層中 n *n 的區域變為 1個 1*1 的 pooling 元素,但是 這 n*n 的權值取值是一樣的,所以對該權值求導是 pooling 層所有節點的累加:

 

這裡均為實數,且中的所有元素的引數均為,所以對結果向量進行求和操作。這裡的代表對層Feature Map j 中的所有元素求和

2)對於  ,根據鏈式求導法則:

根據殘差的定義與前邊的計算公式:

   

可得:

  

同樣通過一個例項說明關於卷積核的偏導數求解過程,對層的通道 i 用卷積核進行卷積操作,得到層的 Feature Map j,其殘差已經求得,對於下圖左的卷積過程展開,下圖右為展開後:

注意這裡層的節點① ② ④ ⑤ 用卷積核卷積生成生成層的節點①,即層的節點① ② ④ ⑤ 與層的節點①通過權值相連,分別為回憶傳統的MLP網路的引數求導公式:

所以這裡有對於單個層的節點①對應的權值求導有:

考慮層的節點② ③ ④對應的權值與節點①對應的權值相等(用的同一卷積核):所以可以忽略節點對應的下標:

同樣分別對節點層的節點② ③ ④對應的權值求導,比如對於節點 ④:

最終將偏導數項相加有:

下圖描述了以上過程,等等,仔細觀察一下以上公式,這不就是用層殘差Map 對層的輸出做卷積嗎?oh my god,的導數可以通過對層的輸出與卷積層的殘差矩陣卷積得到!!

總結以上公式綜上所述:

1)任意層前向傳到到卷積層與卷積層前向傳導到pooling層

2)pooling層前饋到卷積層,與卷積層前饋到任意層

  

3)任意層與卷積層之間引數的求導

  

4)pooling層與卷積層之間引數的求導

相關推薦

CS229 6.18 CNN反向傳導演算法

本文主要內容是 CNN 的 BP 演算法,看此文章前請保證對CNN有初步認識。 網路表示 CNN相對於傳統的全連線DNN來說增加了卷積層與池化層,典型的卷積神經網路中(比如LeNet-5 ),開始幾層都是卷積和池化的交替,然後在靠近輸出的地方做成全連線網路,這時候已經將所有兩維2D的特徵maps轉化為全連

乾貨 | 深度學習之CNN反向傳播演算法詳解

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 前言 在卷積神經網路(CNN)前向傳播演算法(乾貨 | 深度學習之卷積神經網路(CNN)的前向傳播演算法詳解)中對CNN的前向傳播演算法做了總結,基於CNN前向傳播演

UFLDL 教程學習筆記(二)反向傳導演算法

UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大學的 Andrew Ng 教授及其團隊編

神經網路反向傳導演算法

假設我們有一個固定樣本集 ,它包含  個樣例。我們可以用批量梯度下降法來求解神經網路。具體來講,對於單個樣例 ,其代價函式為: 這是一個(二分之一的)方差代價函式。給定一個包含  個樣例的資料集,我們可以定義整體代價函式為: 以上公式中的第一項  是一個均方差項。第二

BP(反向傳播)演算法CNN反向傳播演算法推導(轉載)

轉載來源: http://blog.csdn.net/walegahaha/article/details/51867904 http://blog.csdn.net/walegahaha/article/details/51945421 關於CNN推導可以參考文獻:

反向傳導(BP)演算法

假設我們有一個固定樣本集 ,它包含 個樣例。我們可以用批量梯度下降法來求解神經網路。具體來講,對於單個樣例 ,其代價函式為: 這是一個(二分之一的)方差代價函式。給定一個包含 個樣例的資料集,我們可以定義整體代價函式為: 以上關於定

CS229 6.17 Neurons Networks convolutional neural network(cnn

之前所講的影象處理都是小 patchs ,比如28*28或者36*36之類,考慮如下情形,對於一副1000*1000的影象,即106,當隱層也有106節點時,那麼W(1)的數量將達到1012級別,為了減少引數規模,加快訓練速度,CNN應運而生。CNN就像辟邪劍譜一樣,正常人練得很挫,一旦自宮後,就變得很厲害。

演算法設計與分析: 6-18 一般解空間的優先佇列式分支限界法

6-18 一般解空間的優先佇列式分支限界法 問題描述 試設計一個用優先佇列式分支限界法搜尋一般解空間的函式。該函式的引數包括結點可 行性判定函式和上界函式等必要的函式,並將此函式用於解佈線問題。 印刷電路板將佈線區域劃分成 n×m 個方格陣列如圖(a)

超級淘此次以更具創新的形式加入“6.18”電商大戰

pla image oba 物體 運動鞋 ron lai bsp 每日 進入六月,上半年的電商大戰跟著“6.18”的接近現已全部打響。國內新晉導購APP超級淘,本年也在6.18降臨之際,全新推出多項活動以及福利回饋廣闊用戶,一同用最新的購物體驗和最具性價比的產品參加到“6.

我的“男神”6.18你有沒“炫父”

父親節 父親 父親是什麽? 他是那個無論風雨多大,永遠會去接你下學的人。 他是那個在你生病時,第一時間出現在你眼前的人。 他是那個每當你過生日,永遠會記得打電話給你的。 他是那個不管多困難,永遠都是默

hsdfz -- 6.18 -- day3

比較 現在 衣服 由於 -- sdf 安排 三次 期望 第三次被hn菜和hn話支配…… 相比起前兩天好一點,但是由於前面時間安排的太散(睡著了……)導致c題DP差一點肝出來(所以最後沒有…… 恩就算肝出來DP也只有30分,這次好歹是有DP思路了,繼續康復吧 至於題解麽,出題

6.18隨筆

apt attach mbed 如果 頁面 name屬性 觸發 認識 inpu 一、節點 節點是文件中有效而完整的結構的最小單元。內含標示組的節點,加上必要屬性、屬性值及內容,便可構成一個元素。節點的標誌符<>。 二、DOM和BOM javascript 有

上周熱點回顧(6.12-6.18

知識 http dot 開源 心得 框架 2萬 n-1 批評 熱點隨筆: · 奇妙的 CSS shapes(CSS圖形)(ChokCoco)· 一個微服務框架的故事(wc的一些事一些情)· 最新開源DBLayer,原來數據庫操作可

CentOS 6下Nginx反向代理配置

nginxCentOS 6下Nginx反向代理配置By:老寧一、環境介紹Client01:內部服務器Nginx Server:互聯網出口代理服務器二、環境配置Nginx Server配置:[root@Nginx-Server / ]#vim /usr/local/nginx/nginx.confserver{

18.6-18.10

LVS 集群 負載均衡集群 18.6 負載均衡集群介紹主流開源軟件LVS、keepalived、haproxy、nginx等其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既可以認為是4層,也可以當做7層使用keepalived的負載均衡功能其實就是LVS(keepa

python學習之類的反射(2018.6.18

python asa 定義 day6 dict try 屬性 cts set 在學習網絡編程的時候用到反射,然後發現自己反射這部分的應用不是很熟練,決定返回來重新整理一下 對於類的反射,主要有四個用法,下面都說一下 1.hasattr 判斷對象或者類是否存在指定的屬性,看代

上周熱點回顧(6.18-6.24)

北京 不同 linu get archive 熱點 網絡 正則表達式 com 熱點隨筆: · 聊聊北京大部分前端從業者所面臨的困境(閏土大叔)· 藏在正則表達式裏的陷阱(陳樹義)· Docker 網絡之進階篇(sparkdev)&

神經網絡學習筆記二——反向傳導

操作 nbsp 算法 oid 輸入 atl 防止 反向 ... 參考自 http://deeplearning.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%9

6.9 Substitute Algorithm 替換演算法

將方法本體替換為另一個演算法 更多精彩 更多技術部落格,請移步 asing1elife’s blog 動機 只是發現了一個更好的方法可以得出相同的結果 案例 public String foundPerson(String

吳恩達機器學習(第十章)---神經網路的反向傳播演算法

一、簡介 我們在執行梯度下降的時候,需要求得J(θ)的導數,反向傳播演算法就是求該導數的方法。正向傳播,是從輸入層從左向右傳播至輸出層;反向傳播就是從輸出層,算出誤差從右向左逐層計算誤差,注意:第一層不計算,因為第一層是輸入層,沒有誤差。 二、如何計算 設為第l層,第j個的誤差。