01CNN的概念及其組成
卷積神經網路,即Convolutional Neural Network(CNN),是在神經網路的基礎上進化而來的,也是近些年來在計算機視覺領域裡程碑式的演算法。
CNN由紐約大學的Yann LeCun於1998年提出。CNN本質上是一個多層感知機,其成功的原因關鍵在於它所採用的區域性連線和共享權值的方式,一方面減少了的權值的數量使得網路易於最佳化,另一方面降低了過擬合的風險。在學術領域,通常將神經網路視為典型的“黑箱問題”,如果它的輸入是一個物件的特徵向量,那麼輸出就是該物件所屬的分類,其中分類的具體操作由計算機完成,網路的架構者並不知曉。
CNN網路通常由三部分組成:神經元(Cell)、損失函式(Loss Function)和啟用函式(Activation Function)。
其中,神經元可分為輸入層、隱含層和輸出層三類;損失函式會在每次網路訓練後衡量本次分類結果與真實類別之間的差距,並基於此不斷更新網路引數,通常有softmax loss、 SVM loss;啟用函式通常將線性的分類問題進行非線性轉化,使得神經網路可以更好地解決較為複雜的問題,通常由sigmoid、tanh、和ReLu等函式構成。
CNN隱含層的卷積層和池化層是實現卷積神經網路特徵提取功能的核心模組。該網路模型透過採用梯度下降法最小化損失函式對網路中的權重引數逐層反向調節,透過頻繁地迭代訓練提高網路的精度。
CNN的低隱層是由卷積層和最大池取樣層交替組成,高層是全連線層對應傳統多層感知器的隱含層和邏輯迴歸分類器。第一個全連線層的輸入是由卷積層和子取樣層進行特徵提取得到的特徵影象。最後一層輸出層是一個分類器,可以採用邏輯迴歸,Softmax迴歸甚至是支援向量機對輸入影象進行分類。
在目標檢測、物件識別、影象分割、超分辨、物件跟蹤、物件檢索等等一些問題中,基於CNN演算法的識別精度都遠遠高於傳統的演算法。
02CNN中的卷積和池化運算
(一)輸入層
CNN通常是影象處理的一種人工智慧演算法,而影象通常由若干個畫素組成,影象中的數字表示畫素亮度,0是黑色,255是白色。因此,一張圖片在計算機中可以簡化為若干個數字組成的多維矩陣。
在CNN的輸入層中,輸入格式保留了圖片本身的結構。對於黑白的圖片,CNN的輸入是一個二維的神經元;對於RGB格式(彩色)的圖片,CNN的輸入則是一個三維神經元(RGB中的每一個顏色通道都有一個的矩陣)。
(二)卷積層
CNN中的卷積層由一組濾波器(filter)組成,濾波器可以視為二維數字矩陣,其對應的長度和寬度可自行設定。下圖表示對一組4*4的二維黑白圖片進行卷積運算,濾波器為3*3。
卷積運算的具體步驟如下:
①在影象的某個位置上覆蓋濾波器;
②將濾波器中的值與影象中的對應畫素的值相乘;
④將濾波器向右或向下移動若干步長(Stride,可自行設定),對影象的所有位置重複此操作。
以上圖為例,在重疊的影象和濾波器元素之間逐個進行乘法運算,按照從左向右、從上到下的順序移動濾波器,最終得到2*2的二維新矩陣。
同理,如果對於彩色圖片,輸入的RGB影象是三維的神經元,那麼卷積層對應的濾波器也是三維的,具體運算方法與二維相似,也是重疊元素之間逐個進行乘法運算,最後累加,如下圖。
(三)池化層
卷積層的作用通常是對圖片進行特徵提取,但是當卷積得到的feature map(特徵圖)的長寬還是比較大時,可以透過池化層來對每一個feature map 進行降維操作。
池化的方法也是用一個過濾器(池化矩陣)進行掃描,掃描的過程中同樣地會涉及掃描布長stride,掃描方式同卷積層一樣,先從左到右掃描,結束則向下移動布長大小,再從左到右。
池化的方法通常有兩種,分別為最大池化和平均池化。
最大池化(Max pooling):取“池化視野”矩陣中的最大值
平均池化(Average pooling):取“池化視野”矩陣中的平均值
(四)全連線層及輸出層
為了最後得到圖片所屬分類的一維數字,還要需要對池化得到的二維或三維向量進行進一步操作,通常由全連線層完成。
顧名思義,全連線層的所有神經元均與上一層相連,其作用主要對特徵進行重新擬合,減少特徵資訊的丟失。全連線層的主要特點是引數過多,容易造成過擬合,通常解決的方法是進行Dropot(隨機丟失部分資料)。