CNN

  1. 什麼是CNN算法

    卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具備深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的表明算法之一。CNN最經常使用於CV領域,可是在NLP等其餘領域也有應用,如用於文本分類的TextCNN。網絡

    下面是一個CNN的經典網絡結構(LeNet):ide

    sHYs0A.png

    CNN通常具備如下結構:函數

    • 輸入層學習

      輸入CNN的圖片數據一般會進行如下處理之一:spa

      • 對每一個像素點求均值,獲得均值圖像,當訓練時用原圖減去均值圖像。
      • 對全部輸入在三個顏色通道R/G/B上取均值,只會獲得3個值,當訓練時減去對應的顏色通道均值。
      • 減去均值後除以標準差進行歸一化。
      • 白化(用PCA降維,對數據每一個特徵維度除以標準差進行歸一化)。
    • 卷積層blog

      對圖像(不一樣的數據窗口數據)和卷積核(一組固定的權重:由於每一個神經元的多個權重固定,因此又能夠看作一個恆定的濾波器 filter)作內積(逐個元素相乘再求和)的操做就是所謂的『卷積』操做,也是卷積神經網絡的名字來源。圖片

      卷積所用到的卷積覈實際上就是數字圖像處理中所用到的濾波器,用於提取一組固定特徵(顏色深淺、輪廓)。所不一樣的是,傳統的濾波器的算子是固定好的,而卷積核的權重是經過訓練獲得的。get

      卷積核在圖像上不斷平滑移動,直到計算完全部卷積核大小的窗口,將輸出按原順序排列即爲一個輸出通道。若是輸入爲多通道數據,則每一個輸入通道須要一個卷積核,輸出通道上一個像素的值爲對應位置多個卷積核的結果之和。input

      卷積過程當中有以下參數:

      • 卷積核大小 kernel_size 。
      • 步長 stride ,即卷積核每次移動的像素數。
      • 輸入尺寸 input_size(只針對某一維)。
      • 輸出尺寸 output_size(只針對某一維)。
      • 填充數 padding,即在邊緣填充像素的數量,能夠填0,也能夠填邊緣像素取值。
      • 輸入通道數 input_channel,如RGB圖像的輸入通道數爲3。
      • 輸出通道數 output_channel,每一個輸出通道對應一組卷積核。由於一組卷積核能夠理解爲抽取一個特徵,因此輸出通道數能夠理解爲抽取的特徵數。

      CNN每一層輸出的特徵圖(feature map)上的像素點在原始圖像上映射的區域大小稱爲感覺野(Receptive Field),其計算公式爲:

      \[r_n=r_{n-1}+(kernel\_size_n-1)*\prod_{i=1}^{n-1}stride_i \]

      感覺野計算公式推導可參考:https://zhuanlan.zhihu.com/p/28492837。須要指出的是,感覺野針對的是特定的維度,好比對於輸入二維圖像的高和寬,各有一個感覺野。同時後面所要介紹的池化層的感覺野計算與卷積層相同。

      卷積的結果須要經過非線性的激活函數如ReLU、Tanh、Sigmoid進行變換。

      卷積層輸出尺寸與輸入尺寸的對應關係爲:

      \[output\_size=\frac{input\_size-kernel\_size+2*padding}{stride}+1 \]

      設卷積層的輸入尺寸爲\(W*H*C\),輸出尺寸爲\(W'*H'*C'\),卷積核大小爲\(K*K\),則計算量爲:

      \[W'*H'*C'*K*K*C \]

      參數量爲:

      \[K*K*C*C' \]

      達到相同感覺野時,使用小卷積核每每比使用大卷積核須要更少的參數,所以通常使用小卷積核。

    • 池化層

      池化層(pooling)也叫作下采樣層,它可以對輸入的特徵圖進行壓縮,一方面使特徵圖變小,簡化網絡計算複雜度;一方面進行特徵壓縮,提取主要特徵。

      經常使用的池化操做有最大池化(max pooling)和平均池化(average pooling)。

      • 最大池化(max pooling)

        取出每一個窗口內的最大值做爲輸出,能夠理解爲進行了特徵選擇,選出了分類辨識度更好的特徵,提供了非線性。

        最大池化反向求導時把梯度直接傳給前一層窗口內值最大的那一個像素,而窗口內其餘像素不接受梯度,也就是爲0。

      • 平均池化(average pooling)

        取出每一個窗口內的平均值做爲輸出,更強調對總體特徵信息進行一層下采樣,在減小參數維度的貢獻上更大一點,更多的體如今信息的完整傳遞這個維度上。

        平均池化反向求導時窗口內每一個像素的梯度爲對應輸出像素梯度的平均值。

      最大池化的效果通常比平均池化更好。池化的主要做用一方面是去掉冗餘信息,一方面要保留feature map的特徵信息。例如在分類問題中,咱們須要知道的是這張圖像有什麼object,而不大關心這個object位置在哪,在這種狀況下顯然max pooling比average pooling更合適。在網絡比較深的地方,特徵已經稀疏了,從一塊區域裏選出最大的,比起這片區域的平均值來,更能把稀疏的特徵傳遞下去。

    • 全鏈接層

      接在網絡最後用於將特徵映射到輸出空間。

  2. CNN的優勢

    • 局部鏈接,權值共享,大大減小了參數量。
    • 卷積能夠並行運算,加快計算速度。
    • 層級卷積池化操做,由低級特徵逐步組合爲高級特徵。
    • 平移不變性,因爲卷積核是在輸入圖像上不斷移動進行卷積,所以即便輸入圖像中某個物體位置進行了平移仍然可以被檢測到。同時因爲有池化層的存在,好比最大池化,若是最大值被移動了,可是仍然在這個感覺野中,那麼池化層也仍然會輸出相同的最大值。
相關文章
相關標籤/搜索