深度學習能在計算機視覺中取得突破性的發展,要歸功於卷積神經網絡(convolutional neural network, CNN),而卷積神經網絡的核心是卷積層(convolutional layer)。
1.為什麼卷積神經網絡可用於深度學習圖像領域?
因為用傳統全連接神經網絡處理圖像存在明顯的缺點:
a.圖像展開為向量會丟失空間信息;
b.參數過多,效率低下,難以訓練;
c.大量的參數會導致網絡過擬合。
而CNN可以很好的解決上述問題。
2.卷積神經網絡的組成有哪些?
CNN的各層中的神經元是3維排列的:寬度、高度和深度。比如一張32x32大小的彩色圖像可表示為32x32x3(分別對應寬高深)。
CNN主要組成部分:輸入層、卷積層、激活層、池化層和全連接層。
3.卷積層為何能使用互相關運算替代卷積運算?
在深度學習的圖像領域中,卷積的主要作用是在一個圖像(特徵)上滑動一個卷積核(濾波器),通過卷積操作得到一組新的特徵。由於計算卷積的過程中,需要進行卷積核翻轉等操作,所以實際實現上,常會用更加直觀的互相關(cross-correlation)運算來代替卷積操作,從而減少一些不必要的操作。
互相關運算順序:從左至右、從上至下。
如上圖所示,對圖像中的藍色區域進行cross-correlation運算,有:
output=a*A+b*B+c*C+d*D+e*E+f*F+g*G+h*H+i*I
卷積運算順序:從右至左、從下至上。
如上圖所示,對圖像中的藍色區域進行convolution運算,有:
output = i*A+h*B+g*C+f*D+e*E+d*F+c*G+b*H+a*I
由上述公式可知,卷積運算相當於對filter進行了翻轉(從左往右,從上往下),但是在深度學習中,filter是訓練學習得到的,所以兩種運算方式都不影響模型預測輸出。
因此卷積層雖然得名於卷積運算,但實際使用還是用更加直觀的互相關運算。
4.二維互相關運算
在二維卷積層中,一個二維輸數組和一個二維核(kernel)數組通過互相關運算輸出一個二維數組。
如下圖所示:輸入是一個高和寬均為 3 的二維數組,我們將該數組的形狀記為 3X3 或(3,3)。核數組的高和寬分別為 2,該數組在卷積計算中又稱卷積核或過濾器(filter),卷積核窗口(又稱卷積窗口)的形狀取決於卷積核的高和寬,即 2X2。
陰影部分為第一個輸出元素及其計算所使用的輸入和核數組元素:0x0+1x1+3x2+4x3=19.
在互相關運算過程中,卷積窗口從輸入數組的左上方開始,按從左往右、從上到下的順序滑動,每次滑動都會將窗口中的輸入子數組與核數組按元素相乘再求和,得到輸出數組中相應位置的元素。
上述運算過程代碼實現如下:
5.CNN簡單應用演示——圖像中物體邊緣檢測
下我們來看個卷積層的簡單應用:檢測圖像中物體的邊緣,即找到像素變化的位置。
先我們構造一張6x8的圖像(即高和寬分別為6像素和8像素的圖像)。它中間4列為黑(0),其餘為(1)。
我們將從白到黑的邊緣和從黑到白的邊緣分別檢測成了1 和 -1,其餘部分的輸出全是 0,即檢測到了給定圖像的邊緣特徵。
由此可知,卷積層可通過重複使用卷積核有效地表徵局部空間。
6.二維卷積層
實際應用中,二維卷積層是將輸入和卷積核做互相關運算,然後再加上一個標量偏差來得到輸出。即卷積層的模型參數包括:卷積核和標量偏差。在訓練模型的時候,通常先對卷積核隨機初始化,然後不斷迭代卷積核和偏差,對應於我們之前學的神經網絡中的權重w和偏置b。
下面我們根據前面自定義的互相關運算函數corr2d再自定義一個二維卷積層:
卷積窗形狀為 pxq的卷積層稱為 pxq卷積層。
同樣, pxq卷積或 pxq卷積核說明卷積核的和寬分別為 p和 q。
7.通過數據學習核數組
我們使用上面物體邊緣檢測中的輸入數據X和輸出數據Y來訓練學習我們構造的核數組K。
首先基於互相關運算構造一個卷積層,將其卷積核初始化為隨機數組,然後在每一次迭代訓練中,使用平方誤差作為損失函數來比較Y和卷積層的輸出,然後計算梯度來更新權重參數。
*下面的演示很好的詮釋了CNN模型訓練*
總結
卷積神經網絡的核心作用是提取特徵,主要應用於提取圖像特徵;
二維卷積層的核心計算是二維互相關運算,即對二維輸入數據和卷積核做互相關運算再加上偏差;
基於CNN模型的訓練實際上是通過數據來學習卷積核。