CNN-卷積神經網絡淺析

卷積神經網絡(Convolutional Neural Network)是一種層次模型,屬於“端對端”的學習方式,和以往在解決圖像類問題的分治法不一樣,分治法是將其分解爲預處理、特徵提取與選擇、分類器設計等若干步驟。分治法的動機是將圖像識別的母問題分解爲簡單、可控且清晰的若干小的子問題。不過分步解決子問題時,儘管可在子問題上得到最優解,但子問題上的最優並不意味着得到全局的最後解!但是“端對端”的的學習方式是完全交給深度學習模型直接學習從原始輸入到期望輸出的映射。相比分治策略,“端到端”的學習方式具有協同增效的優勢,有更大可能獲得全局最優解。
卷積神經網絡(Convolutional Neural Network)是一個專門針對圖像識別問題設計的神經網絡。它模仿人類識別圖像的多層過程:瞳孔攝入像素;大腦皮層某些細胞初步處理,發現形狀邊緣、方向;抽象判定形狀(如圓形、方形);進一步抽象判定。
圖1
如上圖所示,從最初的圖像像素的認識到圖像邊緣的檢測再到各類邊緣的組合,最後對各類特徵的組合形成我們看到的目標模型!

輸入層

  1. 去均值:把輸入數據各個維度都中心化爲0,其目的就是把樣本的中心拉回到座標系原點上。
  2. 歸一化:幅度歸一化到同樣的範圍,即減少各維度數據取值範圍的差異而帶來的干擾,比如,我們有兩個維度的特徵A和B,A範圍是0到10,而B範圍是0到10000,如果直接使用這兩個特徵是有問題的,好的做法就是歸一化,即A和B的數據都變爲0到1的範圍。
    去均值和歸一化
  3. PCA/白化:用PCA降維;白化是對數據各個特徵軸上的幅度歸一化
    PCA和白化

卷積層

卷積層是卷積神經網絡(CNN)的核心,但是什麼是卷積呢?卷積就是圖片中的局部數據和卷積核的內積,它是爲了提取圖片局部的特徵,那捲積核又是什麼呢?卷積核又稱過濾器(filter),如下圖,其實就是一組帶有固定的權重的神經元,一組二維矩陣,用來提取一組特定的特徵,提取的特徵一般稱爲feature map(特徵映射)。至於卷積層就是多個filter的疊加形成的,至於通道就是理解爲視角、角度。例如同樣是提取邊界特徵的卷積核,可以按照R、G、B三種元素的角度提取邊界,RGB在邊界這個角度上有不同的表達;再比如需要檢查一個人的機器學習能力,可以從特徵工程、模型選擇、參數調優等多個方面檢測。(最初輸入的圖片樣本的 channels ,取決於圖片類型,比如RGB;卷積操作完成後輸出的 out_channels ,取決於卷積核的數量。此時的 out_channels 也會作爲下一次卷積時的卷積核的 in_channels;卷積核中的 in_channels ,就是上一次卷積的 out_channels ,如果是第一次做卷積,就是樣本圖片的 channels 。)
在這裏插入圖片描述
深度depth:神經元個數,決定輸出的depth厚度。同時代表濾波器個數。

至於卷積層的參數問題,就不得不提CNN的兩大“特色”了,局部感知和權值共享!在BPNN裏,我們可以看見一張圖片假如它是黑白的,也就是100x100x1,而隱藏層的節點數是100個,那也就是說權重就高達100x100x1x100+100=1000100個,這還是比較小的單通道圖片,在現在這種小圖片很少了,所以在CNN裏必須的精簡參數了,不然難以訓練出一個好的模型!

所以CNN就提出了局部感知和權值共享的方法來解決參數過多的問題!

局部感知:科學家發現,人對事物的觀察是通過對不同特徵捕獲的綜合,視覺神經系統中有專門負責不同特徵感知的視覺元。從對視覺神經系統的研究出發,神經網絡的研究者提出用一個神經元每次觀察輸入的部分特徵(比如圖片的一小塊),然後通過逐步移動的方法觀察整個輸入的方法,然後用多個這種神經元提取輸入的輸入的不同特徵,最後在通過一個全連接網絡對這些特徵進行整合,最終達成分類效果。下圖形象的描述了這種特徵的提取。

在一篇博客中看到了一個非常貼切的比喻,張貼下給大家看下:(可以想象這麼一個場景,公司根據地域分爲西北區、西南區、華東區、華南區等銷售區域,現進行大規模人員調整,各區域的業務人員全部撤換掉。新老員工面臨工作交接,BPNN的做法是老員工排成一行,新員工排成一行,不分地域,老員工要和每個新員工交接,新員工也要和每個老員工交接,這樣效率十分低下(西北地區的老員工和華南地區的新員工實際上沒什麼好交接的);而CNN是按照各大銷售區域排隊,西北地區的老員工站在一起,華東地區的老員工站在一起,下一層負責各個區域的新員工也按照負責區域站好,各個區域內部的新老員工交接即可。)
在這裏插入圖片描述
權值共享:其實權值共享這個詞說全了就是整張圖片在使用同一個卷積核內的參數,比如一個331的卷積核,這個卷積核內9個的參數被整張圖共享,而不會因爲圖像內位置的不同而改變卷積核內的權係數。說的再直白一些,就是用一個卷積核不改變其內權係數的情況下卷積處理整張圖片(當然CNN中每一層不會只有一個卷積核的,這樣說只是爲了方便解釋而已)。

假如有100個銷售區域(事實上圖像遠大於100),每個銷售區域老員工有100名,新員工也有100名,那麼BPNN就需要10000x10000=1億次交接。而如果按照銷售區域交接,每個新員工只和對應區域的100名老員工交接,那麼需要10000x100=100萬次,是以前的1%,進一步,卷積中存在“權值共享”,即下一層神經元A所負責的區域雖然和B負責的區域不一樣,但是他們的參數是一樣的。對應到上邊的例子中,雖然各個區域具體的業務不一樣,但是交接的模式大致相同,假設只有客戶名單、業務進度兩項內容。那麼統一開個會就好了,參數實際上只有100*2=200個,是以前的五十萬分之一。

卷積操作
圖中input 7x7x3中,7*7代表圖像的像素/長寬,3代表R、G、B 三個顏色通道,可以看到周邊有填充0; 有兩個卷積核Filter w0、Filter w1,每個filter對應每個通道有一組w權重;一個filter滑動到一個位置後計算三個通道的卷積,求和,加bias(偏置),得到這個filter在該位置的最終結果;每個filter的輸出是各個通道的彙總;輸出的個數與filter個數相同。所以最右邊能得到兩個不同的輸出。

1的計算過程:
第一個通道和對應權重的結果:0*(1)+0*(1)+0*(-1)+0*(-1)+0*(0)+1*(1)+0*(-1)+0*(-1)+1*(0) = 1
第二個通道和對應權重的結果:0*(-1)+0*(0)+0*(-1)+0*(0)+1*(0)+1*(-1)+0*(1)+0*(-1)+2*(0) = -1
第三個通道和對應權重的結果:0*(0)+0*(1)+0*(0)+01+2(0)+0*(1)+0*(0)+0*(-1)+0*(0) = 0
偏置:1
1+(-1)+ 0 + 1 = 1

相信大家對於卷積的運算這都能看懂,但是可能不知道爲什麼要在周圍填充0,下面看一個周圍不填充0的,計算過程一樣!
在這裏插入圖片描述
這樣做卷積運算的缺點是,卷積圖像的大小會不斷縮小,另外圖像的左上角的元素只被一個輸出所使用,所以在圖像邊緣的像素在輸出中採用較少,也就意味着你丟掉了很多圖像邊緣的信息,爲了解決這兩個問題,就引入了padding操作,也就是在圖像卷積操作之前,沿着圖像邊緣用0進行圖像填充。

說到這不得不說卷積步長的概念了:卷積步長是指過濾器在圖像上滑動的距離

輸出圖像的尺寸和輸入圖像的大小(W)以及卷積步長(S),過濾器(filter)大小(F),填充0的數量(P)的關係滿足以下公式:

全零填充(padding=SAME):輸出數據體的尺寸=(W−F+2P)/S+1
不用全零填充(padding=VALID):輸出數據體的尺寸=(W-F+1)/S

當不能整除的時候向下取整!

ReLU激勵層

若干線性操作層的堆疊仍然只能起到線性映射的作用,無法形成複雜的函數。在實際使用中,有多達十幾種激活函數可供選擇。直觀上,激活函數模擬了生物神經元特性:接受一組輸入信號併產生輸出。在神經科學中,生物神經元通常有一個閾值,當神經元所獲得的輸入信號累積效果超過了該閾值,神經元就被激活而處於興奮狀態;否則處於抑制狀態。在最初的時候用的激活函數是Sigmoid,也叫Logistic函數。但是由於該函數兩端,對於大於 8(或小於 −5)的值無論多大(或多小)都會壓縮到 1(或 0)。如此便帶來一個嚴重問題,即梯度的“飽和效應。
在這裏插入圖片描述
爲了解決這一難題,引入了ReLU函數,也是現在最爲常用的激活函數。
在這裏插入圖片描述

池化層(匯合層)

最大池化(Max pooling)
最大池化思想很簡單,以下圖爲例,把4x4的圖像分割成4個不同的區域,然後輸出每個區域的最大值,這就是最大池化所做的事情。其實這裏我們選擇了2x2的過濾器,步長爲2。在一幅真正的圖像中提取最大值可能意味着提取了某些特定特徵,比如垂直邊緣、一隻眼睛等等。

在這裏插入圖片描述
平均池化
平均池化和最大池化唯一的不同是,它計算的是區域內的平均值而最大池化計算的是最大值。在日常應用使用最多的還是最大池化。
在這裏插入圖片描述

池化層不會改變矩陣的深度,但是它可以縮小矩陣的大小,也可以進一步減少全連接層的節點數,從而減少整個神經網絡的參數個數!

全連接層

兩層之間所有神經元都有權重連接,通常全連接層在卷積神經網絡尾部。也就是跟傳統的神經網絡神經元的連接方式是一樣的:
全連接層在整個卷積神經網絡中起到“分類器”的作用。如果說卷積層、匯合層和激活函數層等操作是將原始數據映射到隱層特徵空間的話,全連接層則起到將學到的特徵表示映射到樣本的標記空間的作用。

卷積神經網絡之優缺點
優點
  • 共享卷積核,對高維數據處理無壓力
  • 無需手動選取特徵,訓練好權重,即得特徵分類效果好
缺點
  • 需要調參,需要大樣本量,訓練最好要GPU
  • 物理含義不明確(也就說,我們並不知道沒個卷積層到底提取到的是什麼特徵,而且神經網絡本身就是一種難以解釋的“黑箱模型”)

參考鏈接:https://www.cnblogs.com/skyfsm/p/6790245.html
https://blog.csdn.net/ice_actor/article/details/78648780?utm_source=blogxgwz0
https://blog.csdn.net/cufewxy1/article/details/80485886?utm_source=blogxgwz0
https://blog.csdn.net/cheneykl/article/details/79740810

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章