什麼是CNN算法
卷積神經網絡(Convolutional Neural Networks, CNN)是一類包含卷積計算且具備深度結構的前饋神經網絡(Feedforward Neural Networks),是深度學習(deep learning)的表明算法之一。CNN最經常使用於CV領域,可是在NLP等其餘領域也有應用,如用於文本分類的TextCNN。網絡
下面是一個CNN的經典網絡結構(LeNet):ide
CNN通常具備如下結構:函數
輸入層學習
輸入CNN的圖片數據一般會進行如下處理之一:spa
卷積層blog
對圖像(不一樣的數據窗口數據)和卷積核(一組固定的權重:由於每一個神經元的多個權重固定,因此又能夠看作一個恆定的濾波器 filter)作內積(逐個元素相乘再求和)的操做就是所謂的『卷積』操做,也是卷積神經網絡的名字來源。圖片
卷積所用到的卷積覈實際上就是數字圖像處理中所用到的濾波器,用於提取一組固定特徵(顏色深淺、輪廓)。所不一樣的是,傳統的濾波器的算子是固定好的,而卷積核的權重是經過訓練獲得的。get
卷積核在圖像上不斷平滑移動,直到計算完全部卷積核大小的窗口,將輸出按原順序排列即爲一個輸出通道。若是輸入爲多通道數據,則每一個輸入通道須要一個卷積核,輸出通道上一個像素的值爲對應位置多個卷積核的結果之和。input
卷積過程當中有以下參數:
CNN每一層輸出的特徵圖(feature map)上的像素點在原始圖像上映射的區域大小稱爲感覺野(Receptive Field),其計算公式爲:
感覺野計算公式推導可參考:https://zhuanlan.zhihu.com/p/28492837。須要指出的是,感覺野針對的是特定的維度,好比對於輸入二維圖像的高和寬,各有一個感覺野。同時後面所要介紹的池化層的感覺野計算與卷積層相同。
卷積的結果須要經過非線性的激活函數如ReLU、Tanh、Sigmoid進行變換。
卷積層輸出尺寸與輸入尺寸的對應關係爲:
設卷積層的輸入尺寸爲\(W*H*C\),輸出尺寸爲\(W'*H'*C'\),卷積核大小爲\(K*K\),則計算量爲:
參數量爲:
達到相同感覺野時,使用小卷積核每每比使用大卷積核須要更少的參數,所以通常使用小卷積核。
池化層
池化層(pooling)也叫作下采樣層,它可以對輸入的特徵圖進行壓縮,一方面使特徵圖變小,簡化網絡計算複雜度;一方面進行特徵壓縮,提取主要特徵。
經常使用的池化操做有最大池化(max pooling)和平均池化(average pooling)。
最大池化(max pooling)
取出每一個窗口內的最大值做爲輸出,能夠理解爲進行了特徵選擇,選出了分類辨識度更好的特徵,提供了非線性。
最大池化反向求導時把梯度直接傳給前一層窗口內值最大的那一個像素,而窗口內其餘像素不接受梯度,也就是爲0。
平均池化(average pooling)
取出每一個窗口內的平均值做爲輸出,更強調對總體特徵信息進行一層下采樣,在減小參數維度的貢獻上更大一點,更多的體如今信息的完整傳遞這個維度上。
平均池化反向求導時窗口內每一個像素的梯度爲對應輸出像素梯度的平均值。
最大池化的效果通常比平均池化更好。池化的主要做用一方面是去掉冗餘信息,一方面要保留feature map的特徵信息。例如在分類問題中,咱們須要知道的是這張圖像有什麼object,而不大關心這個object位置在哪,在這種狀況下顯然max pooling比average pooling更合適。在網絡比較深的地方,特徵已經稀疏了,從一塊區域裏選出最大的,比起這片區域的平均值來,更能把稀疏的特徵傳遞下去。
全鏈接層
接在網絡最後用於將特徵映射到輸出空間。
CNN的優勢