本篇博客主要歸納整理,CNN相關(guān)的基礎(chǔ)知識和部分經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)與特點。圖片大部分來自Fei-Fei Li CNN課程PPT、網(wǎng)絡(luò)和paper,如有侵犯請及時告知
CNN相關(guān)基礎(chǔ)知識
卷積神經(jīng)網(wǎng)絡(luò)和全連接神經(jīng)網(wǎng)絡(luò)的區(qū)別
區(qū)別:如上圖所示,
- 全連接神經(jīng)網(wǎng)絡(luò)中每個神經(jīng)元或者filter都與輸入圖像的每個像素相關(guān)聯(lián),參數(shù)量大
- 卷積神經(jīng)網(wǎng)絡(luò)中每個神經(jīng)元或者filter只與原圖中部分像素相關(guān)聯(lián),即只關(guān)心局部信息,參數(shù)量小
卷積核
如圖所示,一個33的卷積核對原圖的一個33區(qū)域(這個區(qū)域也叫做卷積核的感受野)做卷積,其具體的計算過程是對應(yīng)元素相乘再相加。
卷積過程
整體過程
如上圖:
- filter從左上角開始以設(shè)定的步長移動至右下角,每次移動都會通過點積(卷積)得到一個數(shù)值
- 單個filter的深度總是和原圖像的通道數(shù)一樣
- filter的個數(shù)決定了生成activation map的個數(shù),一個activation map 代表原圖像中某個feature(特征)
- 單個filter的權(quán)值是共享的
計算過程
如上圖:
- Filter w0 和原圖像以步長為2做卷積后,會得到Output Volume 中的第一個3*3的 feature(activation) map
- 單個filter的三個通道做完卷積后會做線性相加,并加上一個偏置項bias,從而得出feature map中的某個數(shù)值
feature map大小計算
上圖中一個77的原圖經(jīng)過33的filter以步長為2來做卷積后,為什么輸出也是一個33的數(shù)組呢?*
不使用padding 0 填充:
如圖所示,每個卷積可以得到一個值,以步長為2,卷積核在原圖橫向和縱向上都可以卷積三次,所以最后輸出的矩陣為33,不使用0填充計算輸出矩陣的長寬的公式為:Output size = (N - F) / stride + 1*
使用padding:
根據(jù)上圖我們可以發(fā)現(xiàn),如果我們不停的層層卷積下去,那么原來尺寸很大的圖片到最后會變得很小,甚至成為一個像素點,在一些想輸出圖片的應(yīng)用上這個是我們不想看到的結(jié)果,所以我們怎么保證即做卷積運算還不改變輸出尺寸呢?
如圖所示,我們將原來77的圖片長寬個加上0填充,這個時候我們使用33的filter以步長為1來對原圖做卷積,那么它的輸出還是 77的feature map,計算 padding 的公式為:P = ( F - stride ) / 2* 有 padding 輸出矩陣長寬公式為:Output size = (N - F + 2P) / stride + 1
激活函數(shù)
如上圖所示,一個filter或者神經(jīng)元的內(nèi)部計算過程,我們可以看到通過卷積并加上bias后(其實在感知機那個時代到這一步就可以了,模型就具備了線性分類的能力,但是大千世界我們的分類問題很少是線性函數(shù)可以擬合的,所以我們就需要擬合非線性函數(shù)),filter還做了一次函數(shù)映射運算,這里的函數(shù) f 就是我們的非線性激活函數(shù),它的作用是:使模型不再是線性組合,具有可以逼近任意函數(shù)的能力。下圖就是我們經(jīng)常使用激活函數(shù) ReLU,還有sigmoid函數(shù)或者tanh函數(shù)這些,讀者可以自行搜索。
池化過程
池化的作用和特點:
- 降維,減少網(wǎng)絡(luò)的參數(shù),達到防止過擬合的效果
- 可以實現(xiàn)平移、旋轉(zhuǎn)的不變性
- 只改變圖像尺寸,不改變圖像深度
- 沒有需要訓(xùn)練的參數(shù)
- 計算公式為:Output size = (N - F) / stride + 1
以上我們了解了 卷積神經(jīng)網(wǎng)絡(luò) -- 卷積核 -- 卷積過程 -- 池化過程,下面我們就來了解一些經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)。
經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)
LeNet-5
論文名字:Gradient-Based Learning Applied to Document Recognition
論文地址:
chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=http%3A%2F%2Fwww.dengfanxin.cn%2Fwp-content%2Fuploads%2F2016%2F03%2F1998Lecun.pdf
特點:
- 奠定了現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)的基石
- 不是使用獨立像素直接作為輸入,使用卷積包含了圖像的空間相關(guān)性(多個像素共同作用)
- 每個卷積層包含三個部分:卷積、池化和非線性激活函數(shù)
- 使用卷積提取空間特征
- 降采樣的平均池化層
- 雙曲正切(Tanh)或S型(Sigmoid)的激活函數(shù)
- MLP(多層感知機,全連接輸出)作為最后的分類器
- 層與層之間的稀疏連接減少計算復(fù)雜度
AlexNet
論文名字:ImageNet Classification with Deep Convolutional Neural Networks
論文地址:
chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=http%3A%2F%2Fpapers.nips.cc%2Fpaper%2F4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
特點:
- ILSVRC 2012 第一名
- 成功使用Relu作為CNN的激活函數(shù),比sigmoid好:①計算量小,sigmoid涉及指數(shù)運算、②不容易出現(xiàn)梯度消失,sigmoid在兩頭梯度接近于0、③緩解過擬合,會使部分神經(jīng)元輸出為0
- 訓(xùn)練時使用使用dropout避免過擬合
- 使用最大池化,避免平均池化的模糊效果,并讓步長比池化核的尺寸小,提升特征豐富性
- 提出了LRN(Local Response Normalization)層,即局部響應(yīng)歸一化層,對局部神經(jīng)元響應(yīng)較大的值變得更大并抑制反饋較小的神經(jīng)元,增強了模型的泛化能力(后面的網(wǎng)絡(luò)不怎么會使用了,因為效果不明顯并且有其它更好的方法)
- 使用CUDA(Compute Unified Device Architecture)通用并行計算架構(gòu),加速深度卷積網(wǎng)絡(luò)的訓(xùn)練
- 數(shù)據(jù)增強:隨機重256的原始圖像上截取224大小并水平翻轉(zhuǎn),預(yù)測時取圖片四個角加中間共五個位置并左右翻轉(zhuǎn),共進行10次預(yù)測求均值
- 因為當(dāng)時計算速度的限制,如圖,這里有兩個分支,即使用了兩塊GPU同時計算
名詞解釋:
- SGD:stochastic gradient descent,即隨機梯度下降
- Momentum:即動量,它模擬的是物體運動時的慣性,即更新的時候在一定程度上保留之前更新的方向,同時利用當(dāng)前batch的梯度微調(diào)最終的更新方向
- L2:正則化方法
- TOP5:從一千類里面找出5五個最后可能的分類結(jié)果,其中你五個判定結(jié)果都不對的概率
ZFNet
論文名字:Visualizing and Understanding Convolutional Neural Networks
論文地址:
chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=https%3A%2F%2Farxiv.org%2Fpdf%2F1311.2901.pdf
特點:
- ILSVRC 2013 第一名
- 大量闡述了卷積神經(jīng)網(wǎng)絡(luò)的直觀概念,以及可視化操作的方法值得借鑒
- 基于AlexNet的優(yōu)化
VGGNet
論文名字:Very Deep Convolutional Networks for Large-Scale Image Recognition
論文地址:
chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=https%3A%2F%2Farxiv.org%2Fpdf%2F1409.1556.pdf
特點:
- 只使用了33的小型卷積核以及22的最大池化層,結(jié)構(gòu)簡潔
- 得出了LRN層作用不大
- 得出了越深的網(wǎng)絡(luò)效果越好
- 11的卷積也是很有效的,但是沒有33的卷積好,大一些的卷積可以學(xué)習(xí)更大的空間特征
- 2個串聯(lián)的33卷積的感受野和一個55的感受野一樣,并且擁有比一個5*5的卷積層更多的非線性變換(前者使用了二次ReLU激活函數(shù))
- 得出了越深的網(wǎng)絡(luò)效果越好
-
ILSVRC 2014 第二名
GoogLeNet
注,這里只是V1模型,Google Inception Net大家族里面還有其它的模型,比如:V2、V3、V4等,讀者可以自行了解
論文名字:Going deeper with convolutions
論文地址:
chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=https%3A%2F%2Farxiv.org%2Fpdf%2F1409.4842.pdf
特點:
- 控制了計算量和參數(shù)量的同時,獲得了非常好的分類性能
- 除去了最后的全連接層,使用全局平均池化層,減少了參數(shù)量減輕了過擬合,并且一個通道就代表一個類型的特征
- Inception module模型的精心設(shè)計,本身就是一個小網(wǎng)絡(luò)而且具有分支提高了網(wǎng)絡(luò)的寬度,通過疊加可以構(gòu)建一個大網(wǎng)絡(luò)
- 使用中間層輸出分類并加到最終分類結(jié)果中,相當(dāng)于做了模型融合,增加了反向傳播的梯度信號,也提供了額外正則化,預(yù)測前向傳播的時候會將其拋棄
- 大量是用了1*1的卷積核,使用很小的計算量就能增加一層特征變化和非線性化
- ILSVRC 2014 第一名
11卷積的好處:*
1.實現(xiàn)跨通道特征信息的整合
2.可以對輸出通道升維和降維 (33、55都涵蓋了局部信息所以不能像 1*1 一樣只考慮通道信息來升降維度,卷積核的深度適合原圖像保持一致的,升降維是體現(xiàn)在卷積核的個數(shù)上面)
ResNet
注,人類的top5為5.1%單從這方面考慮它已超越人類
論文名字:Going deeper with convolutions
論文地址:
chrome-extension://ikhdkkncnoglghljlkmcimlnlhkeamad/pdf-viewer/web/viewer.html?file=https%3A%2F%2Farxiv.org%2Fpdf%2F1409.4842.pdf
提出原因
提出的思想
- resnet最初的想法是在訓(xùn)練集上,深層網(wǎng)絡(luò)不應(yīng)該比淺層網(wǎng)絡(luò)差,因為只需要深層網(wǎng)絡(luò)多的那些層做恒等映射就簡化為了淺層網(wǎng)絡(luò)。所以從學(xué)習(xí)恒等映射這點出發(fā),考慮到網(wǎng)絡(luò)要學(xué)習(xí)一個F(x)=x的映射比學(xué)習(xí)F(x)=0的映射更難,所以可以把網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計成H(x)= F(x) + x,這樣就即完成了恒等映射的學(xué)習(xí),又降低了學(xué)習(xí)難度。這里的x是殘差結(jié)構(gòu)的輸入,F(xiàn)是該層網(wǎng)絡(luò)學(xué)習(xí)的映射,H是整個殘差結(jié)構(gòu)的輸出。 -- 知乎回答
- 網(wǎng)絡(luò)解釋:其實就是將輸入x傳到輸出作為初始結(jié)果,那么我們需要學(xué)習(xí)的目標(biāo)就是F(x) = H(x) – x ,
H(x)是期望輸出,F(xiàn)(x)是學(xué)習(xí)的映射函數(shù),即學(xué)習(xí)他們之間的差比學(xué)習(xí)整個內(nèi)容容易
基本網(wǎng)絡(luò)結(jié)構(gòu)
特點:
- 每個CNN層都使用了Batch Normalization :對每個mini-batch數(shù)據(jù)的內(nèi)部進行標(biāo)準(zhǔn)化處理,使輸出規(guī)范化到0-1的正太分布,某種意義上起到了正則化的作用,所以可以減少或者取消dropout并學(xué)習(xí)率可以設(shè)置大一點
- 使用了xavier算法,通過輸入和輸出神經(jīng)元的數(shù)目自動確定權(quán)值矩陣的初始化大小。
- Residual Networks are Exponential Ensembles of Relatively Shallow Networks 論文指出,這個網(wǎng)絡(luò)其實就是由多個淺層網(wǎng)絡(luò)疊加而且并不是真正意義上的極深網(wǎng)絡(luò),并沒有解決梯度消失問題而是規(guī)避了
- ILSVRC 2015 第一名
參考:《TensorFlow實戰(zhàn)》 -- 黃文堅 唐源 、Fei-Fei Li CNN課程PPT、網(wǎng)絡(luò)相關(guān)paper