為什么要使用卷積呢募书?
在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中窥摄,比如多層感知機(MLP)镶奉,其輸入通常是一個特征向量,需要人工設(shè)計特征,然后將這些特征計算的值組成特征向量哨苛,在過去幾十年的經(jīng)驗來看鸽凶,人工找到的特征并不是怎么好用,有時多了建峭,有時少了玻侥,有時選擇的特征根本就不起作用(真正起作用的特征在浩瀚的未知里面)。這就是為什么在過去卷積神經(jīng)網(wǎng)絡(luò)一直被SVM等完虐的原因亿蒸。
如果有人說凑兰,任何特征都是從圖像中提取的,那如果把整副圖像作為特征來訓(xùn)練神經(jīng)網(wǎng)絡(luò)不就行了祝懂,那肯定不會有任何信息丟失票摇!那先不說一幅圖像有多少冗余信息,單說著信息量就超級多砚蓬。矢门。。
假如有一幅1000*1000的圖像灰蛙,如果把整幅圖像作為向量祟剔,則向量的長度為1000000(10^6)。在假如隱含層神經(jīng)元的個數(shù)和輸入一樣摩梧,也是1000000物延;那么,輸入層到隱含層的參數(shù)數(shù)據(jù)量有10^12仅父,媽呀叛薯,什么樣的機器能訓(xùn)練這樣的網(wǎng)絡(luò)呢。所以笙纤,我們還得降低維數(shù)耗溜,同時得以整幅圖像為輸入(人類實在找不到好的特征了)。于是省容,牛逼的卷積來了抖拴。接下來看看卷積都干了些啥。
CNN卷積神經(jīng)網(wǎng)絡(luò)層級結(jié)構(gòu)
CNN網(wǎng)絡(luò)一共有5個層級結(jié)構(gòu):
- 輸入層
- 卷積層
- 激勵層
- 池化層
- 全連接FC層
1.輸入層
與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)/機器學(xué)習(xí)一樣腥椒,模型需要輸入的進行預(yù)處理操作阿宅,常見的輸入層中預(yù)處理方式有:
- 去均值
- 歸一化
- PCA/SVD降維等
2.卷積層
局部感知:人的大腦識別圖片的過程中,并不是一下子整張圖同時識別笼蛛,而是對于圖片中的每一個特征首先局部感知洒放,然后更高層次對局部進行綜合操作,從而得到全局信息滨砍。
3.激勵層
所謂激勵往湿,實際上是對卷積層的輸出結(jié)果做一次非線性映射榨为。
如果不用激勵函數(shù)(其實就相當(dāng)于激勵函數(shù)是f(x)=x),這種情況下煌茴,每一層的輸出都是上一層輸入的線性函數(shù)随闺。容易得出,無論有多少神經(jīng)網(wǎng)絡(luò)層蔓腐,輸出都是輸入的線性組合矩乐,與沒有隱層的效果是一樣的,這就是最原始的感知機了回论。
常用的激勵函數(shù)有:
- Sigmoid函數(shù)
- Tanh函數(shù)
- ReLU
- Leaky ReLU
- ELU
- Maxout
激勵層建議:首先ReLU散罕,因為迭代速度快,但是有可能效果不加傀蓉。如果ReLU失效的情況下欧漱,考慮使用Leaky ReLU或者Maxout,此時一般情況都可以解決葬燎。Tanh函數(shù)在文本和音頻處理有比較好的效果误甚。
4.池化層
池化(Pooling):也稱為欠采樣或下采樣。主要用于特征降維谱净,壓縮數(shù)據(jù)和參數(shù)的數(shù)量窑邦,減小過擬合,同時提高模型的容錯性壕探。主要有:
- Max Pooling:最大池化
- Average Pooling:平均池化
通過池化層冈钦,使得原本4*4的特征圖壓縮成了2*2,從而降低了特征維度李请。
5.輸出層(全連接層)
經(jīng)過前面若干次卷積+激勵+池化后瞧筛,終于來到了輸出層,模型會將學(xué)到的一個高質(zhì)量的特征圖片全連接層导盅。其實在全連接層之前较幌,如果神經(jīng)元數(shù)目過大,學(xué)習(xí)能力強认轨,有可能出現(xiàn)過擬合绅络。因此月培,可以引入dropout操作嘁字,來隨機刪除神經(jīng)網(wǎng)絡(luò)中的部分神經(jīng)元,來解決此問題杉畜。還可以進行局部歸一化(LRN)纪蜒、數(shù)據(jù)增強等操作,來增加魯棒性此叠。
當(dāng)來到了全連接層之后纯续,可以理解為一個簡單的多分類神經(jīng)網(wǎng)絡(luò)(如:BP神經(jīng)網(wǎng)絡(luò)),通過softmax函數(shù)得到最終的輸出。整個模型訓(xùn)練完畢猬错。
兩層之間所有神經(jīng)元都有權(quán)重連接窗看,通常全連接層在卷積神經(jīng)網(wǎng)絡(luò)尾部。也就是跟傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)神經(jīng)元的連接方式是一樣的:
CNN卷積神經(jīng)網(wǎng)絡(luò)卷積層和池化層詳解
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network倦炒,簡稱CNN)显沈,是一種前饋神經(jīng)網(wǎng)絡(luò),人工神經(jīng)元可以響應(yīng)周圍單元逢唤,可以進行大型圖像處理拉讯。卷積神經(jīng)網(wǎng)絡(luò)包括卷積層和池化層。
卷積神經(jīng)網(wǎng)絡(luò)是受到生物思考方式啟發(fā)的MLPs(多層感知器)鳖藕,它有著不同的類別層次魔慷,并且各層的工作方式和作用也不同。這里提供一個較好的CNN教程(http://cs231n.github.io/convolutional-networks/)著恩。文章中詳細介紹了CNN的計算方式和數(shù)據(jù)的流動過程院尔,這里只做簡單的介紹。
卷積神經(jīng)網(wǎng)絡(luò)是人工神經(jīng)網(wǎng)絡(luò)的一種喉誊,已成為當(dāng)前語音分析和圖像識別領(lǐng)域的研究熱點召边。它的權(quán)值共享網(wǎng)絡(luò)結(jié)構(gòu)使之更類似于生物神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度裹驰,減少了權(quán)值的數(shù)量隧熙。該優(yōu)點在網(wǎng)絡(luò)的輸入是多維圖像時表現(xiàn)的更為明顯,使圖像可以直接作為網(wǎng)絡(luò)的輸入幻林,避免了傳統(tǒng)識別算法中復(fù)雜的特征提取和數(shù)據(jù)重建過程贞盯。卷積網(wǎng)絡(luò)是為識別二維形狀而特殊設(shè)計的一個多層感知器,這種網(wǎng)絡(luò)結(jié)構(gòu)對平移沪饺、比例縮放躏敢、傾斜或者共他形式的變形具有高度不變性。
CNNs是受早期的延時神經(jīng)網(wǎng)絡(luò)(TDNN)的影響整葡。延時神經(jīng)網(wǎng)絡(luò)通過在時間維度上共享權(quán)值降低學(xué)習(xí)復(fù)雜度件余,適用于語音和時間序列信號的處理。
CNNs是第一個真正成功訓(xùn)練多層網(wǎng)絡(luò)結(jié)構(gòu)的學(xué)習(xí)算法遭居。它利用空間關(guān)系減少需要學(xué)習(xí)的參數(shù)數(shù)目以提高一般前向BP算法的訓(xùn)練性能啼器。CNNs作為一個深度學(xué)習(xí)架構(gòu)提出是為了最小化數(shù)據(jù)的預(yù)處理要求。在CNN中俱萍,圖像的一小部分(局部感受區(qū)域)作為層級結(jié)構(gòu)的最低層的輸入端壳,信息再依次傳輸?shù)讲煌膶樱繉油ㄟ^一個數(shù)字濾波器去獲得觀測數(shù)據(jù)的最顯著的特征枪蘑。這個方法能夠獲取對平移损谦、縮放和旋轉(zhuǎn)不變的觀測數(shù)據(jù)的顯著特征岖免,因為圖像的局部感受區(qū)域允許神經(jīng)元或者處理單元可以訪問到最基礎(chǔ)的特征,例如定向邊緣或者角點照捡。
(1)卷積神經(jīng)網(wǎng)絡(luò)的歷史
1962年Hubel和Wiesel通過對貓視覺皮層細胞的研究颅湘,提出了感受野(receptive field)的概念,1984年日本學(xué)者Fukushima基于感受野概念提出的神經(jīng)認知機(neocognitron)可以看作是卷積神經(jīng)網(wǎng)絡(luò)的第一個實現(xiàn)網(wǎng)絡(luò)栗精,也是感受野概念在人工神經(jīng)網(wǎng)絡(luò)領(lǐng)域的首次應(yīng)用栅炒。神經(jīng)認知機將一個視覺模式分解成許多子模式(特征),然后進入分層遞階式相連的特征平面進行處理术羔,它試圖將視覺系統(tǒng)模型化赢赊,使其能夠在即使物體有位移或輕微變形的時候,也能完成識別级历。
通常神經(jīng)認知機包含兩類神經(jīng)元释移,即承擔(dān)特征抽取的S-元和抗變形的C-元。S-元中涉及兩個重要參數(shù)寥殖,即感受野與閾值參數(shù)玩讳,前者確定輸入連接的數(shù)目,后者則控制對特征子模式的反應(yīng)程度嚼贡。許多學(xué)者一直致力于提高神經(jīng)認知機的性能的研究:在傳統(tǒng)的神經(jīng)認知機中熏纯,每個S-元的感光區(qū)中由C-元帶來的視覺模糊量呈正態(tài)分布。如果感光區(qū)的邊緣所產(chǎn)生的模糊效果要比中央來得大粤策,S-元將會接受這種非正態(tài)模糊所導(dǎo)致的更大的變形容忍性樟澜。我們希望得到的是,訓(xùn)練模式與變形刺激模式在感受野的邊緣與其中心所產(chǎn)生的效果之間的差異變得越來越大叮盘。為了有效地形成這種非正態(tài)模糊秩贰,F(xiàn)ukushima提出了帶雙C-元層的改進型神經(jīng)認知機。
Van Ooyen和Niehuis為提高神經(jīng)認知機的區(qū)別能力引入了一個新的參數(shù)柔吼。事實上毒费,該參數(shù)作為一種抑制信號,抑制了神經(jīng)元對重復(fù)激勵特征的激勵愈魏。多數(shù)神經(jīng)網(wǎng)絡(luò)在權(quán)值中記憶訓(xùn)練信息觅玻。根據(jù)Hebb學(xué)習(xí)規(guī)則,某種特征訓(xùn)練的次數(shù)越多培漏,在以后的識別過程中就越容易被檢測溪厘。也有學(xué)者將進化計算理論與神經(jīng)認知機結(jié)合,通過減弱對重復(fù)性激勵特征的訓(xùn)練學(xué)習(xí)北苟,而使得網(wǎng)絡(luò)注意那些不同的特征以助于提高區(qū)分能力桩匪。上述都是神經(jīng)認知機的發(fā)展過程打瘪,而卷積神經(jīng)網(wǎng)絡(luò)可看作是神經(jīng)認知機的推廣形式友鼻,神經(jīng)認知機是卷積神經(jīng)網(wǎng)絡(luò)的一種特例傻昙。
(2)卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)
先介紹卷積層遇到的幾個名詞:
? 深度/depth(解釋見下圖)
? 步長/stride (窗口一次滑動的長度)
? 填充值/zero-padding
填充值是什么呢?以下圖為例子彩扔,比如有這么一個55的圖片(一個格子一個像素)妆档,我們滑動窗口取22,步長取2虫碉,那么我們發(fā)現(xiàn)還剩下1個像素沒法滑完贾惦,那怎么辦呢?
那我們在原先的矩陣加了一層填充值敦捧,使得變成6*6的矩陣须板,那么窗口就可以剛好把所有像素遍歷完。這就是填充值的作用兢卵。
卷積神經(jīng)網(wǎng)絡(luò)是一個多層的神經(jīng)網(wǎng)絡(luò)习瑰,每層由多個二維平面組成,而每個平面由多個獨立神經(jīng)元組成秽荤。
如圖所示甜奄,CNN網(wǎng)絡(luò)工作時,會伴隨著卷積并且不斷轉(zhuǎn)換著這些卷積窃款。
輸入圖像通過和三個可訓(xùn)練的濾波器和可加偏置進行卷積课兄,濾波過程如圖一,卷積后在C1層產(chǎn)生三個特征映射圖晨继,然后特征映射圖中每組的四個像素再進行求和烟阐,加權(quán)值,加偏置紊扬。通過一個Sigmoid函數(shù)得到三個S2層的特征映射圖曲饱。這些映射圖再進過濾波得到C3層。這個層級結(jié)構(gòu)再和S2一樣產(chǎn)生S4珠月。最終扩淀,這些像素值被光柵化,并連接成一個向量輸入到傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)啤挎,得到輸出驻谆。
一般地,C層為特征提取層庆聘,每個神經(jīng)元的輸入與前一層的局部感受野相連胜臊,并提取該局部的特征,一旦該局部特征被提取后伙判,它與其他特征間的位置關(guān)系也隨之確定下來象对;S層是特征映射層,網(wǎng)絡(luò)的每個計算層由多個特征映射組成宴抚,每個特征映射為一個平面勒魔,平面上所有神經(jīng)元的權(quán)值相等甫煞。特征映射結(jié)構(gòu)采用影響函數(shù)核小的sigmoid函數(shù)作為卷積網(wǎng)絡(luò)的激活函數(shù),使得特征映射具有位移不變性冠绢。
此外抚吠,由于一個映射面上的神經(jīng)元共享權(quán)值,因而減少了網(wǎng)絡(luò)自由參數(shù)的個數(shù)弟胀,降低了網(wǎng)絡(luò)參數(shù)選擇的復(fù)雜度楷力。卷積神經(jīng)網(wǎng)絡(luò)中的每一個特征提取層(C-層)都緊跟著一個用來求局部平均與二次提取的計算層(S-層),這種特有的兩次特征提取結(jié)構(gòu)使網(wǎng)絡(luò)在識別時對輸入樣本有較高的畸變?nèi)萑棠芰Α?/p>
(3)關(guān)于參數(shù)減少與權(quán)值共享
上面聊到孵户,好像CNN一個厲害的地方就在于通過感受野和權(quán)值共享減少了神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練的參數(shù)的個數(shù)萧朝。那究竟是啥的呢?
卷積神經(jīng)網(wǎng)絡(luò)有兩種神器可以降低參數(shù)數(shù)目夏哭,第一種神器叫做局部感知野剪勿。一般認為人對外界的認知是從局部到全局的,而圖像的空間聯(lián)系也是局部的像素聯(lián)系較為緊密方庭,而距離較遠的像素相關(guān)性則較弱厕吉。因而,每個神經(jīng)元其實沒有必要對全局圖像進行感知械念,只需要對局部進行感知头朱,然后在更高層將局部的信息綜合起來就得到了全局的信息。網(wǎng)絡(luò)部分連通的思想龄减,也是受啟發(fā)于生物學(xué)里面的視覺系統(tǒng)結(jié)構(gòu)项钮。視覺皮層的神經(jīng)元就是局部接受信息的(即這些神經(jīng)元只響應(yīng)某些特定區(qū)域的刺激)
局部感知
下圖左:如果我們有1000x1000像素的圖像,有1百萬個隱層神經(jīng)元希停,那么他們?nèi)B接的話(每個隱層神經(jīng)元都連接圖像的每一個像素點)烁巫,就有1000x1000x1000000=1012個連接,也就是1012個權(quán)值參數(shù)宠能。然而圖像的空間聯(lián)系是局部的亚隙,就像人是通過一個局部的感受野去感受外界圖像一樣,每一個神經(jīng)元都不需要對全局圖像做感受违崇,每個神經(jīng)元只感受局部的圖像區(qū)域阿弃,然后在更高層,將這些感受不同局部的神經(jīng)元綜合起來就可以得到全局的信息了羞延。這樣渣淳,我們就可以減少連接的數(shù)目,也就是減少神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練的權(quán)值參數(shù)的個數(shù)了伴箩。如下圖右:假如局部感受野是10x10入愧,隱層每個感受野只需要和這10x10的局部圖像相連接,所以1百萬個隱層神經(jīng)元就只有一億個連接,即10^8個參數(shù)棺蛛。比原來減少了四個0(數(shù)量級)怔蚌,這樣訓(xùn)練起來就沒那么費力了,但還是感覺很多的啊鞠值,那還有啥辦法沒媚创?
我們知道渗钉,隱含層的每一個神經(jīng)元都連接10x10個圖像區(qū)域彤恶,也就是說每一個神經(jīng)元存在10x10=100個連接權(quán)值參數(shù)。那如果我們每個神經(jīng)元這100個參數(shù)是相同的呢鳄橘?也就是說每個神經(jīng)元用的是同一個卷積核去卷積圖像声离。這樣我們就只有多少個參數(shù)?瘫怜?只有100個參數(shù)笆趸病!>ㄅ取赠涮!親!不管你隱層的神經(jīng)元個數(shù)有多少暗挑,兩層間的連接我只有100個參數(shù)八癯!親炸裆!這就是權(quán)值共享袄!親烹看!這就是卷積神經(jīng)網(wǎng)絡(luò)的主打賣點肮础!親9呤狻(有點煩了酱吝,呵呵)也許你會問,這樣做靠譜嗎土思?為什么可行呢掉瞳?這個……共同學(xué)習(xí)。
好了浪漠,你就會想陕习,這樣提取特征也忒不靠譜吧,這樣你只提取了一種特征爸吩浮该镣?對了,真聰明响谓,我們需要提取多種特征對不损合?假如一種濾波器省艳,也就是一種卷積核就是提出圖像的一種特征,例如某個方向的邊緣嫁审。那么我們需要提取不同的特征跋炕,怎么辦,加多幾種濾波器不就行了嗎律适?對了辐烂。所以假設(shè)我們加到100種濾波器,每種濾波器的參數(shù)不一樣捂贿,表示它提出輸入圖像的不同特征纠修,例如不同的邊緣。這樣每種濾波器去卷積圖像就得到對圖像的不同特征的放映厂僧,我們稱之為Feature Map扣草。所以100種卷積核就有100個Feature Map。這100個Feature Map就組成了一層神經(jīng)元颜屠。到這個時候明了了吧辰妙。我們這一層有多少個參數(shù)了?100種卷積核x每種卷積核共享100個參數(shù)=100x100=10K甫窟,也就是1萬個參數(shù)密浑。才1萬個參數(shù)啊蕴坪!親k戎馈(又來了,受不了了1炒)見下圖右:不同的顏色表達不同的濾波器呆瞻。
嘿喲,遺漏一個問題了径玖。剛才說隱層的參數(shù)個數(shù)和隱層的神經(jīng)元個數(shù)無關(guān)痴脾,只和濾波器的大小和濾波器種類的多少有關(guān)。那么隱層的神經(jīng)元個數(shù)怎么確定呢梳星?它和原圖像赞赖,也就是輸入的大小(神經(jīng)元個數(shù))冤灾、濾波器的大小和濾波器在圖像中的滑動步長都有關(guān)前域!例如,我的圖像是1000x1000像素韵吨,而濾波器大小是10x10匿垄,假設(shè)濾波器沒有重疊,也就是步長為10,這樣隱層的神經(jīng)元個數(shù)就是(1000x1000 )/ (10x10)=100x100個神經(jīng)元了椿疗,假設(shè)步長是8漏峰,也就是卷積核會重疊兩個像素,那么……我就不算了届榄,思想懂了就好浅乔。注意了,這只是一種濾波器铝条,也就是一個Feature Map的神經(jīng)元個數(shù)哦靖苇,如果100個Feature Map就是100倍了。由此可見攻晒,圖像越大顾复,神經(jīng)元個數(shù)和需要訓(xùn)練的權(quán)值參數(shù)個數(shù)的貧富差距就越大班挖。
需要注意的一點是鲁捏,上面的討論都沒有考慮每個神經(jīng)元的偏置部分。所以權(quán)值個數(shù)需要加1 萧芙。這個也是同一種濾波器共享的给梅。
總之,卷積網(wǎng)絡(luò)的核心思想是將:局部感受野双揪、權(quán)值共享(或者權(quán)值復(fù)制)以及時間或空間亞采樣這三種結(jié)構(gòu)思想結(jié)合起來獲得了某種程度的位移动羽、尺度、形變不變性渔期。
4)一個典型的例子說明
一種典型的用來識別數(shù)字的卷積網(wǎng)絡(luò)是LeNet-5(效果和paper等見這)运吓。當(dāng)年美國大多數(shù)銀行就是用它來識別支票上面的手寫數(shù)字的。能夠達到這種商用的地步疯趟,它的準確性可想而知拘哨。畢竟目前學(xué)術(shù)界和工業(yè)界的結(jié)合是最受爭議的。