image.png
上篇文章簡單地地介紹了
神經網絡和深度學習,在神經網絡中,每一層的每個神經元都與下一層的每個神經元相連(如下圖), 這種連接配接關系叫全連接配接(Full Connected)。如果以圖像識别為例,輸入就是是每個像素點,那麼每一個像素點兩兩之間的關系(無論相隔多遠),都被下一層的神經元"計算"了。
這種全連接配接的方法用在圖像識别上面就顯得太"笨"了,因為圖像識别首先得找到圖檔中各個部分的"邊緣"和"輪廓",而"邊緣"和"輪廓"隻與相鄰近的像素們有關。
這個時候卷積神經網絡(CNN)就派上用場了,卷積神經網絡可以簡單地了解為,用濾波器(Filter)将相鄰像素之間的"輪廓"過濾出來。
卷積(Convolution)
卷積的濾波器(Filter)是如何工作的呢?以下圖,一個6x6的圖檔被一個3x3的濾波器(可以看成一個視窗)卷積為例,3x3的濾波器先和6x6的圖檔最左上角的3x3矩陣卷積得到結果後,再向右移一步繼續卷積(視窗滑動),直到将整個圖檔過濾完成,輸出一個4x4的矩陣(圖檔)。
這樣有什麼意義呢?如果如下圖所示,被卷積的圖檔有明顯的豎直輪廓(10和0之間有一輪廓,這條輪廓需要被标記出來),用3x3的豎直輪廓濾波器卷積之後,就能發現中間那條非常明顯的豎直輪廓(中間30的兩個豎排矩陣将豎直的輪廓位置明顯地标記了出來)。
填充(Padding)
上面的例子用3x3的将6x6的圖檔過濾之後輸出了一個4x4的圖檔,那如果我想保證輸入和輸出的圖檔尺寸一緻怎麼辦?這個時候我們可以在原圖檔的邊緣進行填充(Padding),以保證輸入和輸出的圖檔尺寸一緻。下圖就是用0在原圖上Padding了一圈。
步長 (Stride)
上面提到用3x3的過濾器去卷積6x6的圖檔是通過視窗一步一步的移動最終将整個圖檔卷積完成的,實際上移動的步伐可以邁得更大,這個步伐的長度就叫做步長(Stride)。步長(Stride)和填充(Padding)的大小一起決定了輸出層圖像的尺寸。
深度(Depth)
這裡的深度是指輸出層圖檔的深度,通常圖檔有紅綠藍(RGB)三個顔色通道(Channel),那一個濾波器也需要三層濾波器對每個顔色通道進行過濾,于是6x6x3的圖檔經過3x3x3的濾波器過濾之後最終會得到一個4x4x1的圖檔,此時輸出層圖檔的深度就是1。
增加濾波器的個數就能增加輸出層圖檔的深度,同時濾波器的個數也決定了輸出層圖檔的深度(兩者相等)。下圖兩個3x3x3的濾波器将6x6x3的圖檔過濾得到一個4x4x2的圖檔。
單層完整的CNN
全連接配接的DNN,每一層包含一個線性函數和一個激活函數,CNN也一樣,在濾波器之後還需要一個激活層,在圖像識别應用中,激活層通常用的是Relu函數。線性函數有權重W和偏置b,CNN的權重W就是濾波器的數值,偏置b可以加載Relu之後,一個完整的CNN層如下:
池化(Pooling)
用濾波器進行視窗滑動過程中,�實際上"重疊"計算了很多備援的資訊,而池化操作就是去除這些備援資訊,并加快運動。Pooling的方式其實有多種,用的最多的是max-pooling就是取一個區域中最大的值,如圖将一個4x4的圖檔max-pooling 一個2x2的圖檔。
一個完整的深度CNN網絡
一個完整的深度CNN網絡,通常由多個卷積層加池化層和最後一個或多個完整層(Full connected(FC))構成,如圖:
好了,深度卷積神經網絡就介紹完了,中間引入了不少概念,了解了這些概念其實CNN網絡也十分簡單。
本文和之前的文章中用到了twitter上@TessFerrandez在吳恩達深度學習課程的筆記,在此對@TessFerrandez的精美筆記表示感謝。
————
相關文章
AI學習筆記——神經網絡和深度學習文章首發steemit.com 為了友善牆内閱讀,搬運至此,歡迎留言或者通路
我的Steemit首頁