【4】如何理解CNN中的卷積?

要點總結:

1、什麼是卷積:圖像中不同數據窗口的數據和卷積核(一個濾波矩陣)作內積的操作叫做卷積。其計算過程又稱為濾波(filter),本質是提取圖像不同頻段的特徵

2、什麼是卷積核:也稱為濾波器filter,帶著一組固定權重的神經元,通常是n*m二維的矩陣,n和m也是神經元的感受野。n*m矩陣中存的是對感受野中數據處理的係數。一個卷積核的濾波可以用來提取特定的特徵(例如可以提取物體輪廓、顏色深淺等)。通過卷積層從原始數據中提取出新的特徵的過程又成為feature map(特徵映射)。filter_size是指filter的大小,例如3*3; filter_num是指每種filter_size的filter個數,通常是通道個數。

3、什麼是卷積層:多個濾波器疊加便成了卷積層。

4、一個卷基層有多少個參數:一個卷積核使用一套權值以便」掃視』數據每一處時以同樣的方式抽取特徵,最終得到的是一種特徵。

在tensorflow定義conv2d時需要指定卷積核的尺寸,本人現在的理解是一個卷積層的多個卷積核使用相同的m*n, 只是權重不同。

則一個卷積層的參數總共m*n*filter_num個,比全連接少了很多。

5、通道(chennel)怎麼理解:通道可以理解為視角、角度。例如同樣是提取邊界特徵的卷積核,可以按照R、G、B三種元素的角度提取邊界,RGB在邊界這個角度上有不同的表達;再比如需要檢查一個人的機器學習能力,可以從特徵工程、模型選擇、參數調優等多個方面檢測

6、計算例子:

解析:圖中input 7*7*3中,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+0*1+2*0+0*1+0*0+0*(-1)+0*0 = 0

偏置:1

1+(-1)+ 0 + 1 = 1

7、幾個參數:

a. 深度depth:神經元個數,決定輸出的depth厚度。同時代表濾波器個數。

b. 步長stride:決定滑動多少步可以到邊緣。

c. 填充值zero-padding:在外圍邊緣補充若干圈0,方便從初始位置以步長為單位可以剛好滑倒末尾位置,通俗地講就是為了總長能被步長整除。

上面的例子中:

  • 兩個神經元,即depth=2,意味著有兩個濾波器。
  • 數據窗口每次移動兩個步長取3*3的局部數據,即stride=2。(步長是步子大小,不是步數)
  • zero-padding=1。

8、如何理解權值共享,減少了神經網路需要訓練的參數的個數?

數據窗口滑動,導致輸入在變化,但中間濾波器Filter

w0的權重是固定不變的,這個權重不變即所謂的CNN中的參數(權重)共享機制。再打個比方,某人環遊全世界,所看到的信息在變,但採集信息的雙眼不變。不同人的雙眼看同一個局部信息 所感受到的不同,即一千個讀者有一千個哈姆雷特,所以不同的濾波器 就像不同的雙眼,不同的人有著不同的反饋結果。

如果我們有1000x1000像素的圖像,有1百萬個隱層神經元,那麼他們全連接的話(每個隱層神經元都連接圖像的每一個像素點),就有1000x1000x1000000=10^12個連接,也就是10^12個權值參數。然而圖像的空間聯繫是局部的,就像人是通過一個局部的感受野去感受外界圖像一樣,每一個神經元都不需要對全局圖像做感受,每個神經元只感受局部的圖像區域,然後在更高層,將這些感受不同局部的神經元綜合起來就可以得到全局的信息了。這樣,我們就可以減少連接的數目,也就是減少神經網路需要訓練的權值參數的個數了。如下圖右:假如局部感受野是10x10,隱層每個感受野只需要和這10x10的局部圖像相連接,所以1百萬個隱層神經元就只有一億個連接,即10^8個參數。比原來減少了四個0(數量級),如果我們每個神經元這100個參數是相同的呢?也就是說每個神經元用的是同一個卷積核去卷積圖像。這樣只有100個參數,這就是權值共享!

這樣只提取了一種特徵,我們需要提取不同的特徵,假設我們加到100種濾波器,每種濾波器的參數不一樣,表示它提出輸入圖像的不同特徵,例如不同的邊緣。這樣每種濾波器去卷積圖像就得到對圖像的不同特徵的放映,我們稱之為Feature

Map。所以100種卷積核就有100個Feature Map。這100個Feature Map就組成了一層神經元。100種卷積核x每種卷積核共享100個參數=100x100=10K,也就是1萬個參數。見下圖右:不同的顏色表達不同的濾波器。

隱層的參數個數和隱層的神經元個數無關,只和濾波器的大小和濾波器種類的多少有關。那麼隱層的神經元個數怎麼確定呢?它和原圖像,也就是輸入的大小(神經元個數)、濾波器的大小和濾波器在圖像中的滑動步長都有關!例如,我的圖像是1000x1000像素,而濾波器大小是10x10,假設濾波器沒有重疊,也就是步長為10,這樣隱層的神經元個數就是(1000x1000 )/ (10x10)=100x100個神經元了,假設步長是8,也就是卷積核會重疊兩個像素,同樣可以計算。這只是一種濾波器,也就是一個Feature Map的神經元個數,如果100個Feature Map就是100倍了。由此可見,圖像越大,神經元個數和需要訓練的權值參數個數的貧富差距就越大。

神經元的偏置部分也是同一種濾波器共享的。

卷積網路的核心思想是將:局部感受野、權值共享以及時間或空間亞採樣這三種結構思想結合起來獲得了某種程度的位移、尺度、形變不變性


推薦閱讀:

【可解釋 AI 重大突破】DeepMind 構建心智理論神經網路讓機器互相理解
情緒大腦皮層和皮層下神經過程 植物性神經下丘腦和邊緣 杏仁核 海馬 扣帶回 大腦皮層 腦垂體腎上腺甲狀腺
使用py-faster-rcnn進行目標檢測(object detect)
機器學習研究人員需要了解的8個神經網路架構(上)

TAG:機器學習 | 深度學習DeepLearning | 神經網路 |