1. 程式人生 > >卷積神經網絡 CNN 學習筆記

卷積神經網絡 CNN 學習筆記

新的 建立 假設 判斷 因此 特征 image 采樣 www


激活函數Relu


最近幾年卷積神經網絡中,激活函數往往不選擇sigmoid或tanh函數,而是選擇relu函數。Relu函數的定義

$$f(x)= max(0,x)$$

Relu函數圖像如下圖所示:
技術分享圖片


CNN示例

技術分享圖片

上圖是一個CNN的示意圖,一個卷積神經網絡由若幹卷積層Pooling層全連接層組成。你可以構建各種不同的卷積神經網絡,它的常用架構模式為:

INPUT -> [[CONV]*N -> POOL?]*M -> [FC]*K

也就是N個卷積層疊加,然後(可選)疊加一個Pooling層,重復這個結構M次,最後疊加K個全連接層。

Convolution Layer

表示卷積層
Pooling Layer 表示池化


Convolution Layer


卷積層的主要是作用是對數據進行卷積操作。

卷積操作可以理解為,將數據特種進行提取的一個過程。

比如 一張圖片,要檢測圖片中存在的邊緣,也就是邊緣檢測,那麽首先建立兩個filter,分別代表橫豎邊緣,然後拿著filte去跟input的image進行計算,得到卷積後的結果,根據卷積後的結果進行判斷是否存在邊緣情況。

另一種情況,一張手寫數字的圖片,需要進行識別,那麽需要對該圖片進行特種提取,建立特種提取的方式就是建立filter的過程,然後用filter去對該image進行計算,得到我們想要提取的特種數據。


卷積層輸出值的計算


我們用一個簡單的例子來講述如何計算卷積,然後,我們抽象出卷積層的一些重要概念和計算方法。

假設有一個55的圖像,使用一個33的filter進行卷積,想得到一個3*3的Feature Map,如下所示:
技術分享圖片

公式如下:
$$a_{i,j}=f(\sum_{m=0}^{2}\sum_{n=0}^{2}w_{m,n}x_{i+m,j+n}+w_b)\qquad(式1)$$

技術分享圖片
技術分享圖片

技術分享圖片

詳細參考:https://www.zybuluo.com/hanbingtao/note/485480


Pooling Layer

池化主要的作用是對卷積後的數據進行整合的一個過程,同時對數據進行降維的操作。

比如在上面的距離過程中,兩張圖片都會在卷積後形成特征數據,但是這些特征數據中,有很多數據對我們的結果影響可以並不大,那麽我們可以對特征數據進行池化後,形成新的特征數據。


Pooling層輸出值的計算


Pooling層主要的作用是下采樣,通過去掉Feature Map中不重要的樣本,進一步減少參數數量。Pooling的方法很多,最常用的是Max Pooling。Max Pooling實際上就是在nn的樣本中取最大值,作為采樣後的樣本值。下圖是22 max pooling:

技術分享圖片


##卷積神經網絡的訓練

卷積層訓練


訓練公式:

$$\delta^{l-1}=\sum_{d=0}^D\delta_d^l*W_d^l\circ f‘(net^{l-1})\qquad(式9)$$

符號$\circ$表示element-wise product,即將矩陣中每個對應元素相乘,$d$表示深度$D$的實力,$l$表示層。

$\delta_d^l$表示$d$深度下$l$層的誤差項

$W_d^l$表示$d$深度下$l$層的權重

$net^{l-1}$表示$d$深度下$l$層的加權輸入


加權輸入公式:

\begin{align}
net^l&=conv(W^l, a^{l-1})+w_b\
a^{l-1}{i,j}&=f^{l-1}(net^{l-1}{i,j})
\end{align}


Pooling層的訓練

無論max pooling還是mean pooling,都沒有需要學習的參數。因此,在卷積神經網絡的訓練中,Pooling層需要做的僅僅是將誤差項傳遞到上一層,而沒有梯度的計算。


Max Pooling誤差項的傳遞

對於max pooling下一層誤差項的值原封不動傳遞上一層對應區塊中的最大值所對應的神經元,而其他神經元的誤差項的值都是0。如下圖所示(假設$a^{l-1}{1,1}、a^{l-1}{1,4}、a^{l-1}{4,1}a^{l-1}{4,4}$為所在區塊中的最大輸出值):

技術分享圖片

對於mean pooling,下一層的誤差項的值會平均分配到上一層對應區塊中的所有神經元。如下圖所示:

技術分享圖片

PS:上面兩個圖示的流向應該是從 layer Llayer L-1 ,傳遞過程中,Max pooling 采用

上面這個算法可以表達為高大上的克羅內克積(Kronecker product)的形式,有興趣的讀者可以研究一下。

$$\delta^{l-1} = \delta^l\otimes(\frac{1}{n^2})_{n\times n}$$

卷積神經網絡 CNN 學習筆記