卷積神經(jīng)網(wǎng)絡(luò)的層級結(jié)構(gòu)
? ? ? ? 數(shù)據(jù)輸入層/ Input layer
? 卷積計算層/ CONV layer
? ReLU激勵層 / ReLU layer
? 池化層 / Pooling layer
? 全連接層 / FC layer
典型的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
如LeNet答倡、AlexNet嘿辟、VGG亏吝、GoogLeNet、Network in Network帚豪、Resnet、SENet吧碾、SKNet等忍燥,以及輕量級的結(jié)構(gòu),如ShuffleNet系列紊扬、MobileNet系列等蜒茄。(以后再說)
卷積神經(jīng)網(wǎng)絡(luò)介紹
卷積神經(jīng)網(wǎng)絡(luò)實際上是層次模型(hierarchical model),原始輸出通常經(jīng)過卷積操作餐屎、池化操作和非線性激活函數(shù)映射等的層層組合檀葛。原始數(shù)據(jù)一層層經(jīng)過網(wǎng)絡(luò),逐漸抽取出低層特征腹缩,直至高級語義特征屿聋,這一過程為前饋運算;網(wǎng)絡(luò)根據(jù)前饋運算的結(jié)果與真實結(jié)果之間的誤差藏鹊,通過反向傳播算法由最后一層逐漸向前反饋润讥,更新模型的參數(shù);在更新參數(shù)的模型上進行再次前饋運算伙判,重復(fù)上述步驟象对,直至整個網(wǎng)絡(luò)模型收斂。一般地宴抚,前饋運算指對樣本進行推理或者預(yù)測,反饋運算指預(yù)測誤差反向傳播更新參數(shù)甫煞。
層級結(jié)構(gòu)介紹
1.數(shù)據(jù)輸入層(對原始圖像數(shù)據(jù)進行預(yù)處理)
該層要做的處理主要是對原始圖像數(shù)據(jù)進行預(yù)處理菇曲,其中包括:
? 去均值:把輸入數(shù)據(jù)各個維度都中心化為0,如下圖所示抚吠,其目的就是把樣本的中心拉回到坐標(biāo)系原點上常潮。
? 歸一化:幅度歸一化到同樣的范圍,如下所示楷力,即減少各維度數(shù)據(jù)取值范圍的差異而帶來的干擾喊式,比如,我們有兩個維度的特征A和B萧朝,A范圍是0到10岔留,而B范圍是0到10000,如果直接使用這兩個特征是有問題的检柬,好的做法就是歸一化献联,即A和B的數(shù)據(jù)都變?yōu)?到1的范圍。
? PCA/白化:用PCA降維;白化是對數(shù)據(jù)各個特征軸上的幅度歸一化
去均值與歸一化效果圖:
去相關(guān)與白化效果圖:
2.卷積層
卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心基石里逆。在圖像識別里我們提到的卷積是二維卷積进胯,即離散二維濾波器(也稱作卷積核)與二維圖像做卷積操作,簡單的講是二維濾波器滑動到二維圖像上所有位置原押,并在每個位置上與該像素點及其領(lǐng)域像素點做內(nèi)積胁镐。卷積操作被廣泛應(yīng)用與圖像處理領(lǐng)域,不同卷積核可以提取不同的特征诸衔,例如邊沿盯漂、線性、角等特征署隘。在深層卷積神經(jīng)網(wǎng)絡(luò)中宠能,通過卷積操作可以提取出圖像低級到復(fù)雜的特征。
先介紹卷積層遇到的幾個名詞:
H:圖片高度磁餐;
W:圖片寬度违崇;
D:depth/原始圖片通道數(shù),也是卷積核個數(shù)诊霹;
F:卷積核高寬大行哐印;
P:圖像邊擴充大衅⒒埂伴箩;
S:滑動步長/stride(窗口一次滑動的長度)
K:?深度,輸出單元的深度
填充值是什么呢鄙漏?以下圖為例子嗤谚,比如有這么一個5*5的圖片(一個格子一個像素),我們滑動窗口取2*2怔蚌,步長取2巩步,那么我們發(fā)現(xiàn)還剩下1個像素沒法滑完,那怎么辦呢桦踊?
那我們在原先的矩陣加了一層填充值椅野,使得變成6*6的矩陣,那么窗口就可以剛好把所有像素遍歷完籍胯。這就是填充值的作用竟闪。
卷積計算
上圖給出一個卷積計算過程的示例圖,輸入圖像大小為H=5,W=5,D=3杖狼,即5×5大小的3通道(RGB炼蛤,也稱作深度)彩色圖像。這個示例圖中包含兩(用K表示)組卷積核本刽,即圖中濾波器W0和W1鲸湃。在卷積計算中赠涮,通常對不同的輸入通道采用不同的卷積核,如圖示例中每組卷積核包含(D=3)個3×3(用F×F表示)大小的卷積核暗挑。另外笋除,這個示例中卷積核在圖像的水平方向(W方向)和垂直方向(H方向)的滑動步長為2(用S表示);對輸入圖像周圍各填充1(用P表示)個0炸裆,即圖中輸入層原始數(shù)據(jù)為藍色部分垃它,灰色部分是進行了大小為1的擴展,用0來進行擴展烹看。經(jīng)過卷積操作得到輸出為3×3×2(用Ho×Wo×K表示)大小的特征圖国拇,即3×3大小的2通道特征圖,其中Ho計算公式為:Ho=(H?F+2×P)/S+1惯殊,Wo同理酱吝。 而輸出特征圖中的每個像素,是每組濾波器與輸入圖像每個特征圖的內(nèi)積再求和土思,再加上偏置bo务热,偏置通常對于每個輸出特征圖是共享的。輸出特征圖o[:,:,0]中的最后一個?2計算如上圖右下角公式所示己儒。
在卷積操作中卷積核是可學(xué)習(xí)的參數(shù)崎岂,經(jīng)過上面示例介紹,每層卷積的參數(shù)大小為D×F×F×K闪湾。卷積層的參數(shù)較少冲甘,這也是由卷積層的主要特性即局部連接和共享權(quán)重所決定。
??局部連接:每個神經(jīng)元僅與輸入神經(jīng)元的一塊區(qū)域連接途样,這塊局部區(qū)域稱作感受野(receptive field)江醇。在圖像卷積操作中,即神經(jīng)元在空間維度(spatial dimension何暇,即上圖示例H和W所在的平面)是局部連接嫁审,但在深度上是全部連接。對于二維圖像本身而言赖晶,也是局部像素關(guān)聯(lián)較強。這種局部連接保證了學(xué)習(xí)后的過濾器能夠?qū)τ诰植康妮斎胩卣饔凶顝姷捻憫?yīng)辐烂。局部連接的思想遏插,也是受啟發(fā)于生物學(xué)里面的視覺系統(tǒng)結(jié)構(gòu),視覺皮層的神經(jīng)元就是局部接受信息的纠修。
??權(quán)重共享:計算同一個深度切片的神經(jīng)元時采用的濾波器是共享的胳嘲。例上圖中計算o[:,:,0]的每個每個神經(jīng)元的濾波器均相同,都為W0扣草,這樣可以很大程度上減少參數(shù)了牛。共享權(quán)重在一定程度上講是有意義的颜屠,例如圖片的底層邊緣特征與特征在圖中的具體位置無關(guān)。但是在一些場景中是無意的鹰祸,比如輸入的圖片是人臉甫窟,眼睛和頭發(fā)位于不同的位置,希望在不同的位置學(xué)到不同的特征 蛙婴。請注意權(quán)重只是對于同一深度切片的神經(jīng)元是共享的粗井,在卷積層,通常采用多組卷積核提取不同特征街图,即對應(yīng)不同深度切片的特征浇衬,不同深度切片的神經(jīng)元權(quán)重是不共享。另外餐济,偏重對同一深度切片的所有神經(jīng)元都是共享的耘擂。
通過介紹卷積計算過程及其特性,可以看出卷積是線性操作絮姆,并具有平移不變性(shift-invariant)醉冤,平移不變性即在圖像每個位置執(zhí)行相同的操作。卷積層的局部連接和權(quán)重共享使得需要學(xué)習(xí)的參數(shù)大大減小滚朵,這樣也有利于訓(xùn)練較大卷積神經(jīng)網(wǎng)絡(luò)冤灾。
3.激勵層
把卷積層輸出結(jié)果做非線性映射。如果沒有激活函數(shù)辕近,或者稱為非線性映射韵吨,整個網(wǎng)絡(luò)缺失非線性,再多層的堆疊移宅,其本質(zhì)仍然是線性的归粉。常見的激活函數(shù)有Sigmoid、tanh漏峰、ReLU(參數(shù)化ReLU糠悼、隨機ReLU、leaky ReLU等)浅乔,Sigmoid與tanh容易發(fā)生飽和區(qū)倔喂,容易造成梯度消失,同時Sigmoid的值域被壓到[0, 1]靖苇。
CNN采用的激勵函數(shù)一般為ReLU(The Rectified Linear Unit/修正線性單元)席噩,它的特點是收斂快,求梯度簡單贤壁,但較脆弱悼枢,圖像如下。
激勵層的實踐經(jīng)驗:
①不要用sigmoid脾拆!不要用sigmoid馒索!不要用sigmoid莹妒!
② 首先試RELU,因為快绰上,但要小心點
③ 如果②失效旨怠,請用Leaky ReLU或者Maxout
④ 某些情況下tanh倒是有不錯的結(jié)果,但是很少
深度神經(jīng)網(wǎng)絡(luò)要解決的是一個很復(fù)雜的非凸優(yōu)化問題渔期,參數(shù)上的冗余保證了網(wǎng)絡(luò)能夠收斂到比較好的最優(yōu)值运吓。目前存在的一些辦法有:
??知識蒸餾、緊湊的網(wǎng)絡(luò)設(shè)計疯趟、濾波器層面的剪枝(如何衡量濾波器的重要性以確定剪枝對象)等
??低秩近似(稠密矩陣能夠由若干低秩小矩陣近似重構(gòu))拘哨、未加限制的剪枝、參數(shù)量化(使用聚類中心的權(quán)重代替原有權(quán)重或使用哈希)信峻、二值網(wǎng)絡(luò)(參數(shù)量化的極端情況倦青,如何二值化權(quán)重?如何傳遞梯度盹舞?)等产镐。
4.池化層
池化,又可以稱作匯合踢步,英文pooling癣亚,目的是為了減少特征圖,主要作用是通過減少網(wǎng)絡(luò)的參數(shù)來減小計算量获印, 本質(zhì)是一種降采樣述雾,具有特征不變性、特征降維兼丰、防止過擬合等作用玻孟,一般是均值池化(average pooling)和最大池化(max pooling)。通常在卷積層的后面會加上一個池化層鳍征,池化操作將保存深度大小不變黍翎,如果池化層的輸入單元大小不是二的整數(shù)倍,一般采取邊緣補零(zero-padding)的方式補成2的倍數(shù)艳丛,然后再池化匣掸。池化操作對每個深度切片獨立,規(guī)模一般為 2*2氮双,相對于卷積層進行卷積運算旺聚,池化層進行的運算一般有以下幾種:?
??最大池化(Max Pooling):取4個點的最大值。這是最常用的池化方法眶蕉。?
??均值池化(Mean Pooling):取4個點的均值。?
??高斯池化:借鑒高斯模糊的方法唧躲。不常用造挽。?
??可訓(xùn)練池化:訓(xùn)練函數(shù) ff 碱璃,接受4個點為輸入,出入1個點饭入。不常用嵌器。
??特征不變性,也就是我們在圖像處理中經(jīng)常提到的特征的尺度不變性谐丢,池化操作就是圖像的resize爽航,平時一張狗的圖像被縮小了一倍我們還能認出這是一張狗的照片,這說明這張圖像中仍保留著狗最重要的特征乾忱,我們一看就能判斷圖像中畫的是一只狗讥珍,圖像壓縮時去掉的信息只是一些無關(guān)緊要的信息,而留下的信息則是具有尺度不變性的特征窄瘟,是最能表達圖像的特征衷佃。
??特征降維,我們知道一幅圖像含有的信息是很大的蹄葱,特征也很多氏义,但是有些信息對于我們做圖像任務(wù)時沒有太多用途或者有重復(fù),我們可以把這類冗余信息去除图云,把最重要的特征抽取出來惯悠,這也是池化操作的一大作用。
5.全連接層
兩層之間所有神經(jīng)元都有權(quán)重連接竣况,通常全連接層在卷積神經(jīng)網(wǎng)絡(luò)尾部克婶。也就是跟傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)神經(jīng)元的連接方式是一樣的:
數(shù)據(jù)增廣與不平衡樣本處理
對數(shù)據(jù)簡單進行數(shù)據(jù)增廣,比如水平翻轉(zhuǎn)帕翻、隨機截取鸠补、尺度變換、旋轉(zhuǎn)等嘀掸;同時紫岩,可對顏色等進行改變從而增加數(shù)據(jù),比如顏色抖動睬塌,改變RGB或者HSV空間的值泉蝌。特殊地,如AlexNet中使用Fancy PCA揩晴,或者針對不同的任務(wù)有不同的增廣方式勋陪,如目標(biāo)檢測領(lǐng)域還涉及到檢測框,可以參見之前的一篇文章硫兰,谷歌使用數(shù)據(jù)增廣策略在目標(biāo)檢測任務(wù)上達到SOTA [4]诅愚。
對于不平衡樣本,需要從數(shù)據(jù)劫映、算法兩個層面解決违孝。
??數(shù)據(jù)層面:數(shù)據(jù)重采樣(上采樣刹前,復(fù)制或者數(shù)據(jù)擴充使得樣本少類與樣本最多的類一致;下采樣雌桑,比如在每個batch中保證正負比例相等)喇喉、類別平衡采樣(將樣本歸類,將所有類擴充到與樣本最多的類一致后隨機打亂校坑,方法與數(shù)據(jù)重采樣中的上采樣類似)
??算法層面:代價敏感
模型集成
??數(shù)據(jù)層面:測試階段數(shù)據(jù)增廣(對同一張圖像增廣成n張拣技,將n張輸入模型得到n個結(jié)果進行集成)、簡易集成法
??模型層面:單模型集成(多層特征融合耍目,將多層特征融合膏斤;網(wǎng)絡(luò)快照法)、多模型集成(多模型生成制妄,同一模型不同初始化掸绞、同一模型不同訓(xùn)練輪數(shù)、不同目標(biāo)函數(shù)耕捞、不同網(wǎng)絡(luò)結(jié)構(gòu)衔掸;多模型集成,直接平均俺抽、加權(quán)平均敞映、投票法、堆疊法(將集成結(jié)果作為新的特征訓(xùn)練另一個模型磷斧,這里的模型可以是神經(jīng)網(wǎng)絡(luò)振愿,也可以是傳統(tǒng)機器學(xué)習(xí)方法))
網(wǎng)格參數(shù)初始化
??全零初始化,但是當(dāng)全零初始化時弛饭,導(dǎo)致網(wǎng)絡(luò)輸出全部相同冕末,梯度更新完全相同,模型無法訓(xùn)練
??隨機初始化侣颂,在實際應(yīng)用档桃,通常將隨機參數(shù)服從均勻分布或者高斯分布,具體的由Xavier方法等
目標(biāo)函數(shù)(損失函數(shù)憔晒,個人認為非常重要)
??分類任務(wù):交叉熵損失函數(shù)(常用目標(biāo)函數(shù))合頁損失函數(shù)藻肄、坡道損失函數(shù)、中心損失函數(shù)
??回歸任務(wù):L1損失函數(shù)拒担、L2損失函數(shù)
網(wǎng)絡(luò)正則化(保證范化能力的同時嘹屯,避免過擬合)
??L2正則化(在機器學(xué)習(xí)中被稱為嶺回歸)、L1正則化(相比于L2从撼,能夠產(chǎn)生更稀疏的參數(shù))州弟、Elastic網(wǎng)絡(luò)正則化(L1和L2按比例混合)
??隨機失活,注意訓(xùn)練階段和測試階段的區(qū)別,需要乘系數(shù)
??增加訓(xùn)練數(shù)據(jù)呆馁,使用更多的數(shù)據(jù)擴充方式
??加入隨機噪聲
超參數(shù)設(shè)定與網(wǎng)絡(luò)訓(xùn)練
??超參數(shù)設(shè)定:輸入數(shù)據(jù)像素大小桐经、卷積層參數(shù)設(shè)定(卷積核大小、卷積操作的步長浙滤、卷積核個數(shù);通常卷積核大小為奇數(shù)气堕,一般推薦為3纺腊、5;卷積核個數(shù)一般為2的次冪)茎芭、池化層參數(shù)設(shè)定
??網(wǎng)絡(luò)訓(xùn)練:在每輪訓(xùn)練前將訓(xùn)練集順序打亂(參考依據(jù):信息論中從不相似的事件中學(xué)習(xí)總是比從相似事件中學(xué)習(xí)更具信息量)揖膜、學(xué)習(xí)率設(shè)定(初始不宜過大,后續(xù)需要減緩)梅桩、是否使用Batch Normalization壹粟、優(yōu)化算法的選擇(SGD、基于動量的SGD宿百、Nesterov趁仙、Adagrad、Adadelta垦页、RMSProp雀费、Adam等)