論文筆記《Notes on convolutional neural networks》


這是個06年的老文章了,但是很多地方還是值得看一看的.

一、概要

  主要講了CNN的Feedforward Pass和 Backpropagation Pass,關鍵是卷積層和polling層的BP推導講解。

二、經典BP算法

 前向傳播需要注意的是數據歸一化,對訓練數據進行歸一化到 0 均值和單位方差,可以在梯度下降上改善,因為這樣可以防止過早的飽,這主要還是因為早期的sigmoid和tanh作為激活函數的弊端(函數在過大或者過小的時候,梯度都很小),等現在有了RELU和batch normalization這兩個神器,基本上對梯度消失的問題有了不錯的解決。然后是BP算法,論文里面稍微難理解的是公式5的推導,

(引用的這里的翻譯http://www.cnblogs.com/shouhuxianjian/p/4529202.html):

 網絡中我們需要后向傳播的“ 誤差”可以被認為是關於有偏置項擾動的每個單元的 “敏感性”。也就是說:

 

(公式4)

 

因為,所以偏置的敏感性其實等於一個單元的所有輸入產生的誤差偏導。下面的就是從高層到低層的BP:

 

(公式5)

因為左邊是輸入X的誤差偏導,有因為,所以要前面的誤差偏導乘上第l+1個W在乘上激活函數的偏導,這個如果對BP算法有所了解的話應該很好理解

 

這里的“o” 表示是 逐原始相乘的。對於公式2中的誤差函數,輸出層神經元的敏感性如下:

 

(公式6) 

 

最后,關於某個給定的神經元的更新權重的delta-rule就是對那個神經元的輸入部分進行復制,只是用神經元的delta進行縮放罷了(其實就是如下面公式7的兩個相乘而已)。在向量的形式中,這相當於輸入向量(前層的輸出)和敏感性向量的外積:

 

(公式7)

 

(公式8)

 

 

 三、CNN

      Sub-sampling的好處是來減少計算時間並且逐步的建立更深遠的空間和構型的不變性,后面一點說的很拗口,我的理解還是對平移和縮放不變性的confidence吧。

  1.計算梯度

    這里論文就很不講道理了,直接擺公式,什么都沒有...卷積層和polling層的反向傳播還是相當重要的,這里推薦一篇博文http://www.cnblogs.com/tornadomeet/p/3468450.html,里面對CNN的BP算法講的很好,基本上推完這四個問題,CNN的BP算法就有了一定的了解了

博客里面比較難理解的是這個圖:

也就是把卷積核旋轉180度以后,從做左到右,再從上到下,計算得到每個值,跟feadforward pass的卷積不同,因為那個其實是一個相關的操作...只不過以卷積的形式表現了出來,這個才是正統的卷積處理。

這里需要理清一下這四個問題,首先是輸出的誤差敏感項,這個直接看推導就行了,然后是卷積層的下一層為pooling層時,求卷積層的誤差敏感項,因為反向傳播的時候,輸出會比輸入小,所以梯度在傳遞的時候和傳統BP算法不一樣,所以如何得到卷積層的誤差敏感項就是這個問題考慮的。第三個問題考慮的是pooling層下面接卷積層,這個是因為我們要得到pooling層的誤差敏感性,依靠的是卷積核的誤差敏感項求的,同樣是因為scale 的問題,所以需要去考慮。最后一個問題就是卷積層本身,在得到輸出的誤差敏感性之后,怎么得到W的,這個只要用相關的操作就可以得到,簡單的理解是l層i和l+1層j之間的權值等於l+1層j處誤差敏感值乘以l層i處的輸入,而卷積的操作是一個累加的過程,所以BP的時候,也需要相關的操作得到。

 四、combine

論文最后講的幾個feature map融合的想法也很好的理解,我的問題是,這個feature map不是一直作為多通道輸出的么,為什么需要去融合,后來很多知名的net好像也並沒有用到這個方法,是不是只是一次嘗試?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM