本文由 沈慶陽 所有,轉(zhuǎn)載請與作者取得聯(lián)系!
前言
卷積網(wǎng)絡(luò)的應(yīng)用并非始于近期窃肠,而早在上世紀(jì)90年代的時候就已經(jīng)有所應(yīng)用。由于運(yùn)算性能的提升與數(shù)據(jù)量的爆炸(GPU與大數(shù)據(jù))哼转,使得深度學(xué)習(xí)爆發(fā)性地發(fā)展沮峡,而卷積網(wǎng)絡(luò)正是深度學(xué)習(xí)爆發(fā)的莫大功臣吮旅。
卷積神經(jīng)網(wǎng)絡(luò)(CNN抖坪,Convolutional Neural Networks)是一種前饋神經(jīng)網(wǎng)絡(luò)萍鲸,它的人工神經(jīng)元可以響應(yīng)一部分覆蓋范圍內(nèi)的周圍單元,對于大型圖像處理有出色表現(xiàn)柳击。卷積神經(jīng)網(wǎng)絡(luò)指的是該網(wǎng)絡(luò)使用了卷積(Convolution)這種數(shù)學(xué)運(yùn)算猿推。卷積是一種特殊的線性運(yùn)算片习。卷積網(wǎng)絡(luò)是指至少在網(wǎng)絡(luò)中一層使用卷積運(yùn)算來替代一般的矩陣乘法運(yùn)算的神經(jīng)網(wǎng)絡(luò)捌肴。
內(nèi)容
卷積
網(wǎng)絡(luò)結(jié)構(gòu)
卷積層
池化層
卷積
卷積(Convolutional)在泛函分析中定義為兩個函數(shù)生成第三個函數(shù)的一種數(shù)學(xué)算子。
卷積在不同的情況下應(yīng)用不同藕咏。
卷積的定義
設(shè)函數(shù)f與g是R上的可測函數(shù)状知,那么f與g的卷積則記作f*g,它是其中一個函數(shù)翻轉(zhuǎn)并平移后與另一個函數(shù)的乘積的積分孽查,是一個對平移量的函數(shù)饥悴,也就是:
如果上述定義沒有那么直觀的話,我們來通過示意圖與描述來理解什么是卷積。
1西设、已知兩函數(shù)f(t)和g(t)瓣铣。上圖第一行兩圖分別為f(t)和g(t)。
2贷揽、首先將兩個函數(shù)都用 τ 來表示棠笑,從而得到f( τ )和g( τ)。將函數(shù)g( τ )向右移動t個單位禽绪,得到函數(shù)g( τ -t)的圖像蓖救。將g( τ -t)翻轉(zhuǎn)至縱軸另一側(cè),得到g(-( τ -t))即g(t- τ)的圖像印屁。右圖第二行兩圖分別為f( τ )和g(t- τ )循捺。
3、由于 τ 非常數(shù)(實(shí)際上是時間變量)雄人,當(dāng)時間變量(以下簡稱“時移”)取不同值時从橘,g(t-τ )能沿著τ軸“滑動”。右圖第三四五行可理解為“滑動”础钠。
4洋满、讓 τ 從-∞滑動到+∞。兩函數(shù)交會時珍坊,計算交會范圍中兩函數(shù)乘積的積分值牺勾。換句話說,我們是在計算一個滑動的的加權(quán)總和(weighted-sum)阵漏。也就是使用 g(t-τ )當(dāng)做加權(quán)函數(shù)驻民,來對 f(τ )取加權(quán)值。
最后得到的波形(未包含在此圖中)就是f和g的卷積履怯。如果f(t)是一個單位脈沖回还,我們得到的乘積就是g(t)本身,稱為沖激響應(yīng)叹洲。
機(jī)器學(xué)習(xí)中的卷積
與數(shù)學(xué)中的卷積定義大同小異柠硕,在機(jī)器學(xué)習(xí)中我們通常會使用離散的值而非連續(xù)的值進(jìn)行計算。因此运提,我們將上述卷積的定義在機(jī)器學(xué)習(xí)中用如下的方法表示:
在機(jī)器學(xué)習(xí)的領(lǐng)域中蝗柔,輸入通常是多維數(shù)組(如二維的圖像),這些多維數(shù)組也就是我們常說的張量(Tensor)民泵。核(Kernel)是通過學(xué)習(xí)算法得到的多維的參數(shù)數(shù)組癣丧。假設(shè)卷積神經(jīng)網(wǎng)絡(luò)使用二維圖像作為輸入,那么此時卷積核K應(yīng)該也是二維的栈妆,此時胁编,離散卷積的表達(dá)形式如下:
由于卷積運(yùn)算具有交換性厢钧,因此可以將K與I對換,其上述表達(dá)等價為:
在許多神經(jīng)網(wǎng)絡(luò)中嬉橙,對于離散卷積采取了另一種互相關(guān)(Cross-correlation)的寫法:
離散的卷積可以看做是矩陣的乘法早直,這個矩陣的一些元素被限制為必須和另一些元素相等。如單變量的離散卷積市框,矩陣的每行元素都與上一行對應(yīng)位置平移一個單位的元素相同莽鸿。這個矩陣叫做Toeplitz矩陣。對于多維(二維)的情況拾给,卷積對應(yīng)一個雙重分塊循環(huán)矩陣(Doubly Block Circulant Matrix)祥得。除了這些元素相等的限制之外,卷積通常對應(yīng)著一個稀疏的矩陣蒋得。這是由于卷積核的大小通常遠(yuǎn)遠(yuǎn)小于輸入圖像的大小级及。
卷積的特征
卷積可以顯著提高深度學(xué)習(xí)的速度,其具有稀疏連接(Sparse Connectivity)额衙、參數(shù)共享(Parameter Sharing)和等變表示(Equivariant Representations)三個方法饮焦。
多層感知機(jī)等傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)利用參數(shù)矩陣的乘法相比,每個輸入單元和輸出單元之間是由獨(dú)立的參數(shù)進(jìn)行描述的窍侧。這也就意味著每個輸入單元會和每個輸出單元進(jìn)行交互(傳統(tǒng)神經(jīng)網(wǎng)絡(luò)是全連接的)县踢,也就是稠密連接。
通常情況下伟件,一張圖片的分辨率決定其像素大小∨鹌。現(xiàn)代社會,高像素相機(jī)普及斧账,一張照片動輒百萬像素谴返。而卷積網(wǎng)絡(luò)的核函數(shù)尺寸可以小于輸入大小,所以連接是稀疏的咧织。比如對于一張高分辨率的圖像嗓袱,可以使用數(shù)十個或幾百個邊緣卷積核來檢測小的、有意義的特征习绢。卷積網(wǎng)絡(luò)在空間上的連接范圍被稱為感受野(Receptive Field)渠抹,感受野是卷積神經(jīng)網(wǎng)絡(luò)的一個超參數(shù),感受野的大小與卷積核的尺寸一致闪萄。由于卷積神經(jīng)網(wǎng)絡(luò)的層級結(jié)構(gòu)決定梧却,越高層的卷積層得感受野所對應(yīng)的原始輸入圖像的相應(yīng)區(qū)域就越大。
全連接與稀疏連接
假設(shè)一個神經(jīng)網(wǎng)絡(luò)中有m個輸入桃煎、n個輸出篮幢。那么對于全連接的矩陣相乘則需要m*n個參數(shù)。如果輸出的連接數(shù)被設(shè)定為j個为迈,那么采用稀疏連接則只需要j*n個參數(shù)三椿。在許多情景中,在連接數(shù)被設(shè)定為j葫辐,且j比m要小得多的情況下搜锰,機(jī)器學(xué)習(xí)應(yīng)用的速度獲得大幅度的提升,并且仍然能保持較好的效果耿战。
讓我們從下圖中對比一下全連接與稀疏連接的神經(jīng)網(wǎng)絡(luò)蛋叼。
稀疏連接的方法可以使神經(jīng)網(wǎng)絡(luò)的連接結(jié)構(gòu)更加簡單,同時以更高效的方法來描述變量之間的關(guān)系剂陡。對比上述兩幅圖狈涮,從輸入的角度(自下而上)來看,x3輸入在全連接中與所有的輸出單元相連接鸭栖。而在稀疏連接中x3僅僅與s2歌馍、s3、s4相連接晕鹊。
反過來從輸出來看輸入也是如此松却。
也許對于卷積網(wǎng)絡(luò),其稀疏連接方式的感受野無法設(shè)計整個輸入翻斟,但是當(dāng)卷積層數(shù)增加的時候(深層卷積網(wǎng)絡(luò))其單個輸出的感受野還是可以涉及到整個輸入的贩猎。
卷積網(wǎng)絡(luò)通過采用稀疏連接的方法減少了需要存儲的參數(shù)(權(quán)重)的數(shù)量奈偏,減少了機(jī)器學(xué)習(xí)模型所需要的存儲空間,從而提升了模型的統(tǒng)計效率砚哆。從計算方面來看,較少的參數(shù)數(shù)量意味著計算輸出時需要更少的參數(shù)屑墨,從而計算效率也得到大幅提升窟社。
參數(shù)共享
參數(shù)共享是緊接著稀疏連接而來的。在模型中多個函數(shù)使用相同的參數(shù)則是參數(shù)共享绪钥。這個共享的參數(shù)通常是權(quán)重灿里,即共享權(quán)重(Shared Weight)。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中程腹,每個權(quán)重被使用一次匣吊。而使用共享權(quán)重,一個輸入位置的參數(shù)值也會被應(yīng)用在其他的輸入位置寸潦。在卷積網(wǎng)絡(luò)中色鸳,通過參數(shù)共享,一個卷積核內(nèi)的參數(shù)會被應(yīng)用在輸入的所有位置见转。
上圖中黑色的箭頭表示了在兩個不同的模型中使用了特殊參數(shù)的連接命雀。上圖中,黑色箭頭表示在卷積模型中對3個元素核的中間元素的使用斩箫。由于參數(shù)共享吏砂,因此這個單獨(dú)的參數(shù)被用于所有的輸入的位置撵儿。而在下圖中,這個單獨(dú)的黑色的箭頭表示在全連接模型中對權(quán)重矩陣的中間元素的使用狐血,下面這個模型沒有參數(shù)共享淀歇,所以參數(shù)只使用了一次。
等變表示
對于卷積來說匈织,參數(shù)共享的特殊形式使得神經(jīng)網(wǎng)絡(luò)層具有了對平移等變(Equivariance)的性質(zhì)浪默。一個函數(shù)滿足輸入改變,那么輸出也以同樣的方式改變這一個性質(zhì)缀匕,那么這個函數(shù)就是等變的纳决。即輸入發(fā)生變化輸出也相應(yīng)發(fā)生同樣的變化。
如果f(g(x))=g(f(x))乡小,那么函數(shù)f(x)對于變換g具有等變性阔加。在卷積網(wǎng)絡(luò)中,令g是輸入的任意平移函數(shù)劲件,那么卷積函數(shù)對于g具有等變性掸哑。舉例,令I(lǐng)表示圖像在整數(shù)坐標(biāo)上的亮度函數(shù)零远,g表示圖像函數(shù)的變換函數(shù)苗分,即把一個圖像映射到另一個圖像函數(shù)的函數(shù)。令I(lǐng)'=g(I)牵辣,圖像函數(shù)I'滿足I'(x,y)=I(x-1,y)摔癣。上述函數(shù)所做的變換就是將I中的每一個像素均向右移動一個單位。如果先對圖像I施加變換纬向,再進(jìn)行卷積操作f择浊,結(jié)果等同于對圖像I的卷積施加變換。也就是說逾条,如果圖像中的目標(biāo)發(fā)生了一定的位移之后琢岩,卷積輸出的表達(dá)也會產(chǎn)生相同的位移。這個特征對于作用在一個相對小區(qū)域的算子十分有用师脂。
卷積網(wǎng)絡(luò)的基本數(shù)據(jù)類型
卷積網(wǎng)絡(luò)的數(shù)據(jù)通常包含多個通道担孔,每個通道是時間或是空間上的某個點(diǎn)的不同觀測量。
維度 | 單通道 | 多通道 |
---|---|---|
一維 | 音頻波形:卷積的軸對應(yīng)時間吃警。將時間離散化并且在每個時間點(diǎn)測量一次波形的振幅 | 骨骼動畫(Skeleton Animation)數(shù)據(jù):三維角色動畫通過隨時間變化調(diào)整骨骼的姿勢生成的動畫糕篇。在每個時間點(diǎn),角色的姿態(tài)通過骨骼中的每個關(guān)節(jié)的角度來描述酌心。輸入到卷積模型的數(shù)據(jù)的每個通道拌消,表示一個關(guān)節(jié)關(guān)于一個軸的角度 |
二維 | 使用傅里葉變換處理過的音頻數(shù)據(jù):將音頻波形轉(zhuǎn)換成二維張量,不同的行對應(yīng)不同的頻率安券,不同的列對應(yīng)不同的時間點(diǎn)墩崩。在時間軸上使用卷積使得該模型等效于在時間上移動氓英。在頻率軸上使用卷積模型使得模型等效于在頻率上移動。這使得不同八度音階中播放的相同旋律產(chǎn)生相同的表示泰鸡,但處于網(wǎng)絡(luò)輸出中的不同高度 | 彩色圖像數(shù)據(jù):其中通道分別包含紅色债蓝、綠色和藍(lán)色(RGB)壳鹤。在圖像的水平軸和豎直軸上移動卷積核盛龄,賦予兩個方向上平移等變性 |
三維 | 體積數(shù)據(jù)(Volume Data):利于醫(yī)學(xué)成像技術(shù)的MRI掃描、PET掃描等獲得的醫(yī)學(xué)圖像 | 彩色視頻數(shù)據(jù):其中一個軸對一個時間芳誓,另外一個軸對應(yīng)視頻幀的高度余舶,最后一個軸對應(yīng)視頻幀的寬度 |
卷積網(wǎng)絡(luò)的一個優(yōu)點(diǎn)就是可以處理具有可變的控件尺度的輸入。這些類型的輸入不能用傳統(tǒng)的基于矩陣乘法的神經(jīng)網(wǎng)絡(luò)來表示锹淌。使用卷積處理可變尺寸的輸入匿值,僅對輸入是因?yàn)榘瑢νN事物的不同的觀察而導(dǎo)致的尺寸變化才具有意義。也就是說赂摆,如果輸入是因?yàn)槠渥陨砜梢赃x擇性地包括不同種類的觀察而具有可變尺寸挟憔,那么此時使用卷積則是不合理的。
卷積網(wǎng)絡(luò)的經(jīng)典結(jié)構(gòu)
卷積網(wǎng)絡(luò)的層結(jié)構(gòu)
簡單的卷積神經(jīng)網(wǎng)絡(luò)由一系列不同的層構(gòu)成烟号,每個層將上一層的一組隱藏層的輸出通過一個可微的函數(shù)產(chǎn)生一組新的隱藏層的輸出绊谭。
一個典型的卷積網(wǎng)絡(luò)有幾種不同的層構(gòu)成:
1、卷積層(Convolutional Layer汪拥,CONV)
2达传、ReLU(Rectified Linear Unit) ReLU(x)=max(0,x)
3、池化層(Pooling Layer迫筑,POOL)
4宪赶、全連接層(Fully-Connected Layer,F(xiàn)C) 全連接層與普通的神經(jīng)網(wǎng)絡(luò)相同脯燃。
這些層極其具體的作用如下表所示:
名稱 | 作用 |
---|---|
INPUT | 輸入層:如搂妻,以圖像的像素的值作為輸入 |
CONV | 卷積層:卷積層連接輸入的一小塊區(qū)域,并計算卷積核與之對應(yīng)的輸入?yún)^(qū)域之間的點(diǎn)乘作為卷積層的輸出 |
ReLU | 激活函數(shù):將CONV層中輸出的每個元素通過一個非線性激活函數(shù) |
POOL | 池化層:在空間上(Height和Width)執(zhí)行降采樣操作 |
FC | 全連接層:在分類中辕棚,將計算每個類別對應(yīng)的分?jǐn)?shù)欲主,和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)一樣,全連接層的每個神經(jīng)元與前一層的所有輸出相連 |
上述從INPUT到FC是一個典型的卷積網(wǎng)絡(luò)的層結(jié)構(gòu)坟募。
CIFAR-10數(shù)據(jù)集共有60000張彩色圖像岛蚤,這些圖像是32*32,分為10個類懈糯,每類6000張圖涤妒。使用卷積網(wǎng)絡(luò)來訓(xùn)練一個圖像分類的模型不失為學(xué)習(xí)卷積網(wǎng)絡(luò)的一個很好的實(shí)踐。
讓我們以CIFAR-10數(shù)據(jù)集作為輸入來講解一下卷積網(wǎng)絡(luò)的各個層的功能:
名稱 | 作用 |
---|---|
INPUT | 輸入層:輸入一張大小為32*32*3的3通道RGB圖像 |
CONV | 卷積層:如CONV層有12個卷積核赚哗,則通過CONV層輸出的尺寸為32*32*12 |
ReLU | 激活函數(shù):保持圖像的尺寸為32*32*12 |
POOL | 池化層:以2*2的小窗做降采樣操作她紫,特征圖的尺寸縮小到16*16*12 |
FC | 全連接層:在分類中硅堆,輸出的尺寸為1*1*10,也就是CIFAR-10中10個類別分別對應(yīng)的分?jǐn)?shù) |
各種卷積網(wǎng)絡(luò)的結(jié)構(gòu)模式(Architecture Pattern)
其實(shí)贿讹,目前很多的卷積網(wǎng)絡(luò)都是根據(jù)一種層級結(jié)構(gòu)的模式進(jìn)行不同的堆疊渐逃。最常見的網(wǎng)絡(luò)的結(jié)構(gòu)是將 CONV-ReLU堆疊若干遍之后,緊接著一個POOL池化層民褂。然后再重復(fù)上述的結(jié)構(gòu)茄菊,直到圖像在空間上轉(zhuǎn)換成為一個較小的尺寸。最后使用一個全連接層轉(zhuǎn)換為輸出赊堪。
讓我們以一個正則表達(dá)式來表示上述的模式:
INPUT->[[CONV->RELU]*N->POOL?]*M->[FC->RELU]*K->FC
其中面殖,*N代表重復(fù)N次,哭廉?代表0或1次脊僚,一般來說0<N≤3,M≥0,0<K≤3遵绰。
卷積層的實(shí)現(xiàn)
卷積層的參數(shù)有一組可以學(xué)習(xí)的卷積核(Kernel)/濾波器(Filter)構(gòu)成辽幌。每個卷積核在空間上是尺寸較小,穿過輸入集的整個深度椿访,如下圖所示:
卷積網(wǎng)絡(luò)的第一層的卷積核尺寸通常為3*3*3(寬3個像素 高3個像素 深度為通道數(shù)是3的RGB圖像)或5*5*3乌企。在前向傳播的過程中,在輸入圖像上沿著高和寬的方向滑動各個卷積核/濾波器(濾波器是通過向量來表示對輸入進(jìn)行卷積操作的權(quán)重)赎离,并在所有的位置上面計算卷積核與輸入的點(diǎn)乘逛犹。當(dāng)完成沿著寬和高滑動卷積核之后,會得到一個二維的激活映射(Activation Map)梁剔,這個激活映射也被稱為特征映射(Feature Map)或是特征圖虽画。特征圖的含義是其在每個空間位置上輸入對于卷積核的響應(yīng)。
卷積層上的每個卷積核都會生成一個激活特征映射荣病,將這些特征映射沿著深度的方向排列起來并作為卷積層的輸出码撰。
比如一個5*5*3的濾波器在32*32*3的圖像上沿著寬和高滑動,遍歷空間內(nèi)所有的點(diǎn)之后生成的特征圖為28*28*1个盆。如果使用3個這樣的濾波器/卷積核進(jìn)行操作之后脖岛,將會生成3個28*28*1的特征映射。所以卷積層最終的輸出大小為28*28*3颊亮。
在卷積網(wǎng)絡(luò)中堆疊CONV-RELU這樣的結(jié)構(gòu)柴梆,卷積核/濾波器的深度要與輸入的特征圖的深度一致。也就是說终惑,后一個卷積層的卷積核/濾波器大小需要與前一個卷積層輸出的維度一致绍在。
通過觀察上述卷積網(wǎng)絡(luò)的特征圖的輸出,我們可以發(fā)現(xiàn),隨著網(wǎng)絡(luò)的層數(shù)的不斷加深偿渡,特征圖上的響應(yīng)在表達(dá)語義的層面上不斷加深臼寄。最初的層提取了低層特征(Low-Level Feature),而此后的卷積層在低層特征的基礎(chǔ)上產(chǎn)生了具有語義的圖形和紋理溜宽。最后的卷積層對明確語義的目標(biāo)產(chǎn)生強(qiáng)烈的響應(yīng)吉拳,也就是說其抽取了圖像的高層特征。
卷積層的空間排布
在卷積網(wǎng)絡(luò)中适揉,輸出的特征圖的尺寸由深度(Depth)留攒、步長(Stride)和零值填充(Zero-Padding)三個超參數(shù)決定。
對于輸出圖的深度這個超參數(shù)涡扼,其由使用的卷積核/濾波器的數(shù)量決定稼跳,每個卷積核都負(fù)責(zé)從輸入圖像中提取出不同的信息(見下圖)盟庞。
在卷積網(wǎng)絡(luò)中對于同一個輸入吃沪,為了提取不同的特征,需要使用不同的卷積核操作什猖,并且將響應(yīng)的特征映射堆疊排列起來作為輸出票彪。
然后就是滑動卷積核的步長。當(dāng)滑動卷積核的步長為1的時候不狮,卷積核/濾波器每次移動1個像素的位置降铸。當(dāng)步長為2的時候,卷積核每次移動2個像素的位置...步長越大摇零,生成的特征映射的空間尺寸就越小推掸。
最后是零值填充。有的時候驻仅,為了使用更深的卷積網(wǎng)絡(luò)谅畅,此時則不希望特征映射在卷積的過程中尺寸下降地太快,因此會在輸入的邊緣使用零值填充來增大輸入尺寸噪服。
假設(shè)當(dāng)前卷積層的輸入圖像尺寸為W毡泻、卷積神經(jīng)元的感受野為F、步長S粘优、邊緣零值填充數(shù)量為P仇味,則輸出特征映射的尺寸為:
池化層(Pooling Layer)
為了減少表達(dá)空間的尺寸,卷積網(wǎng)絡(luò)的連續(xù)的卷積層之間往往會周期性地插入池化層雹顺。池化層能逐漸減少表達(dá)空間的尺寸丹墨,降低參數(shù)數(shù)量和計算開銷,并控制卷積網(wǎng)絡(luò)減少過擬合嬉愧。
在卷積網(wǎng)絡(luò)中贩挣,最常見的池化操作是最大池化(Max Pooling),也就是取視野范圍內(nèi)的最大值。對上圖最大池化示意圖而言揽惹,其輸入特征圖的尺寸是4*4被饿,步長為2的池化操作后,得到2*2的輸出特征圖搪搏。在池化窗口大小是2的是狭握,上圖中被分為四種顏色的四個區(qū)域,每個區(qū)域?qū)?yīng)輸出特征圖的一個像素疯溺,對每個窗口取其中的最大值作為輸出特征圖相應(yīng)位置的值论颅。
池化窗口的選取通常是2或3,如果窗口大小過大則會對特征圖的信息造成破壞囱嫩。除了最大池化之外恃疯,還有平均池化(Average Pooling)和L2-Norm池化。
最大池化操作的反向傳播形式很簡單:將梯度沿著正向傳播的過程中最大值的路徑向下傳遞墨闲。池化層的正向傳遞通常會保留最大激活單元下標(biāo)今妄,作為反向傳遞時候的傳播路徑。
參考文獻(xiàn):
Convolutional Neural Networks (LeNet) - DeepLearning 0.1 documentation. DeepLearning 0.1. LISA Lab. [31 August 2013].
Convolutional Neural Network. [2014-09-16].
Kim, Yoon. Convolutional Neural Networks for Sentence Classification. 2014-08-25. arXiv:1408.5882 [cs.CL].
[Deep Learning] - Convolutional Neural Network .Ian Goodfellow
[Convolutional Networks for everyone] Rohan Thomas https://medium.com/@rohanthomas.me/convolutional-networks-for-everyone-1d0699de1a9d
[Visualizing and Understanding Convolutional Networks] Matthew D. Zeiler and Rob Fergus https://cs.nyu.edu/~fergus/papers/zeilerECCV2014.pdf
覺得寫的不錯的朋友可以點(diǎn)一個 喜歡? ~
謝謝你的支持鸳碧!