卷積神經網絡CNN

卷積神經網絡CNN

在神經網絡中,每一層的每個神經元都與下一層的每個神經元相連, 這種連接關係叫全連接(

Full Connected)。

這種全連接的方法用在圖像識別上面就顯得太"笨"了,因為圖像識別首先得找到圖片中各個部分的"邊緣"和"輪廓",而"邊緣"和"輪廓"只與相鄰近的像素們有關。

這個時候卷積神經網絡(CNN)就派上用場了,卷積神經網絡可以簡單地理解為,用濾波器(Filter)將相鄰像素之間的"輪廓"過濾出來。


卷積 Convolution

卷積的濾波器(Filter)是如何工作的呢?以下圖,一個6x6的圖片被一個3x3的濾波器(可以看成一個窗口)卷積為例,3x3的濾波器先和6x6的圖片最左上角的3x3矩陣卷積得到結果後,再向右移一步繼續卷積(窗口滑動),直到將整個圖片過濾完成,輸出一個4x4的矩陣(圖片)。

卷積神經網絡CNN

這樣有什麼意義呢?如果如下圖所示,被卷積的圖片有明顯的豎直輪廓(10和0之間有一輪廓,這條輪廓需要被標記出來),用3x3的豎直輪廓濾波器卷積之後,就能發現中間那條非常明顯的豎直輪廓(中間30的兩個豎排矩陣將豎直的輪廓位置明顯地標記了出來)。

卷積神經網絡CNN


填充Padding

上面的例子用3x3的將6x6的圖片過濾之後輸出了一個4x4的圖片,那如果我想保證輸入和輸出的圖片尺寸一致怎麼辦?這個時候我們可以在原圖片的邊緣進行填充(Padding),以保證輸入和輸出的圖片尺寸一致。下圖就是用0在原圖上Padding了一圈。

卷積神經網絡CNN


步長Stride

上面提到用3x3的過濾器去卷積6x6的圖片是通過窗口一步一步的移動最終將整個圖片卷積完成的,實際上移動的步伐可以邁得更大,這個步伐的長度就叫做步長(Stride)。步長(Stride)和填充(Padding)的大小一起決定了輸出層圖像的尺寸

卷積神經網絡CNN


深度 Depth

這裡的深度是指輸出層圖片的深度,通常圖片有紅綠藍(RGB)三個顏色通道(Channel),那一個濾波器也需要三層濾波器對每個顏色通道進行過濾,於是6x6x3的圖片經過3x3x3的濾波器過濾之後最終會得到一個4x4x1的圖片,此時輸出層圖片的深度就是1。

卷積神經網絡CNN

增加濾波器的個數就能增加輸出層圖片的深度,同時濾波器的個數也決定了輸出層圖片的深度(兩者相等)。下圖兩個3x3x3的濾波器將6x6x3的圖片過濾得到一個4x4x2的圖片。

卷積神經網絡CNN


單層完整CNN

全連接的DNN,每一層包含一個線性函數和一個激活函數,CNN也一樣,在濾波器之後還需要一個激活層,在圖像識別應用中,激活層通常用的是Relu函數。

線性函數有權重W和偏置b,CNN的權重W就是濾波器的數值,偏置b可以加在Relu之後,一個完整的CNN層如下

卷積神經網絡CNN


池化 Pooling

用濾波器進行窗口滑動過程中,實際上"重疊"計算了很多冗餘的信息,而池化操作就是去除這些冗餘信息,並加快運動。Pooling的方式其實有多種,用的最多的是max-pooling就是取一個區域中最大的值,如圖將一個4x4的圖片max-pooling 一個2x2的圖片

卷積神經網絡CNN


一個完整的深度CNN網絡

一個完整的深度CNN網絡,通常由多個卷積層加池化層和最後一個或多個完整層(Full connected(FC))構成

卷積神經網絡CNN

理解了這些概念之後,會發現其實CNN網絡也十分簡單。


分享到:


相關文章: