一莺债、基礎(chǔ)結(jié)構(gòu)
CNN和之 前介紹的神經(jīng)網(wǎng)絡(luò)一樣,可以像樂高積木一樣通過組裝層來構(gòu)建。不過嘱巾, CNN中新出現(xiàn)了卷積層(Convolution層)和池化層(Pooling層)。此外诫钓,各層中傳遞的數(shù)據(jù)是有形狀的數(shù)據(jù)(比如旬昭,3維數(shù)據(jù))
靠近輸出的層中使用了之前 的“ Affine - ReLU”組合。此外菌湃,最后的輸出層中使用了之前的“Affine - Softmax”組合问拘。這些都是一般的CNN中比較常見的結(jié)構(gòu)。
二、卷積層
2.1 卷積層的優(yōu)勢
在全連接層中骤坐,數(shù)據(jù)的形狀被忽視了绪杏。以圖像輸入為例子,圖像通常是高纽绍、長蕾久、通道方向上的3維形狀。但是拌夏,向全連接層輸入時僧著,需要將3維數(shù)據(jù)拉平為1維數(shù)據(jù)。前面提到的使用 了MNIST數(shù)據(jù)集的例子中障簿,輸入圖像就是1通道盹愚、高28像素、長28像素的(1, 28, 28)形狀站故,但卻被排成1列皆怕,以784個數(shù)據(jù)的形式輸入到最開始的 Affine層。
而卷積層可以保持形狀不變西篓。當(dāng)輸入數(shù)據(jù)是圖像時愈腾,卷積層會以3維數(shù)據(jù)的形式接收輸入數(shù)據(jù),并同樣以3維數(shù)據(jù)的形式輸出至下一層污淋。因此可以提取出鄰近的像素為相似的值顶滩、RBG的各個通道之間分別有密切的關(guān)聯(lián)性、相距 較遠(yuǎn)的像素之間沒有什么關(guān)聯(lián)等值得提取的本質(zhì)模式寸爆,利用與數(shù)據(jù)形狀相關(guān)的信息礁鲁。
2.2 卷積運算(圖像處理中的濾波器運算)
2.2.1 卷積運算基本過程
先來看一個經(jīng)過卷積運算的結(jié)果
對于輸入數(shù)據(jù),卷積運算以一定間隔滑動濾波器的窗口并應(yīng)用赁豆。這里所說的窗口是指下圖中灰色的3×3的部分仅醇。如下圖所示,將各個位置上濾波器的元素和輸入的對應(yīng)元素相乘魔种,然后再求和(有時將這個計算稱為乘積累加運算)析二。然后,將這個結(jié)果保存到輸出的對應(yīng)位置节预。將這個過程在所有位置都進(jìn)行一遍叶摄,就可以得到卷積運算的輸出。 如果有偏置安拟,則在卷積運算結(jié)果的各個位置都加上偏置的值蛤吓。
2.2.2 填充
在卷積神經(jīng)網(wǎng)絡(luò)中引入了填充和步幅等特殊概念,這里我們來介紹一下填充糠赦。
在進(jìn)行卷積層的處理之前会傲,有時要向輸入數(shù)據(jù)的周圍填入固定的數(shù)據(jù)(比如0等)锅棕,這稱為填充(padding),是卷積運算中經(jīng)常會用到的處理淌山。比如裸燎, 在下圖的例子中,對大小為(4, 4)的輸入數(shù)據(jù)應(yīng)用了幅度為1的填充泼疑〉侣蹋“幅度為1的填充”是指用幅度為1像素的0填充周圍。
可以看到脆炎,通過填充梅猿,大小為(4, 4)的輸入數(shù)據(jù)變成了(6,6)的形狀氓辣。 然后,應(yīng)用大小為(3, 3)的濾波器袱蚓,生成了大小為(4,4)的輸出數(shù)據(jù)钞啸。這個例子中將填充的值設(shè)成了1,不過填充的值也可以設(shè)置成2喇潘、3等任意的整數(shù)体斩。在圖該例子中,如果將填充設(shè)為2颖低,則輸入數(shù)據(jù)的大小變?yōu)?8,8)絮吵;如果將填充設(shè) 為3,則大小變?yōu)?10, 10)忱屑。
使用填充主要是為了調(diào)整輸出的大小蹬敲。比如,對大小為(4, 4)的輸入數(shù)據(jù)應(yīng)用(3,3)的濾波器時莺戒,輸出大小變?yōu)?2, 2)伴嗡,相當(dāng)于輸出大小比輸入大小縮小了2個元素。在反復(fù)進(jìn)行多次卷積運算的深度網(wǎng)絡(luò)中,如果每次進(jìn)行卷積運算都會縮小空間从铲,那么在某個時刻輸出大小就有可能變?yōu)?瘪校,導(dǎo)致無法再應(yīng)用卷積運算。
2.2.3 步幅
介紹完填充名段,再來介紹一下步幅阱扬。步幅是應(yīng)用濾波器的位置間隔,以下是步幅為2的情況伸辟。
2.2.4 填充麻惶,步幅和輸出結(jié)果的瓜系
增大步幅后,輸出大小會變小自娩。而增大填充后用踩,輸出大小會變大渠退。 如果將這樣的關(guān)系寫成算式,會如何呢脐彩?
我們看一下對于填充和步幅碎乃,如何計算輸出大小。 這里惠奸,假設(shè)輸入大小為(H,W)梅誓,濾波器大小為(FH,FW),輸出大小為 (OH,OW)佛南,填充為P梗掰,步幅為S。此時嗅回,輸出大小可通過下列式子計算及穗。
我們來思考一個問題,為什么卷積運算是有效的绵载?
依然用例子來說明埂陆,比如我們有一個4*4的圖像,我們設(shè)計兩個卷積核娃豹,看看運用卷積核后圖片會變成什么樣焚虱。
從結(jié)果可以看出,通過第一個卷積核計算后的特征圖是一個三維數(shù)據(jù)懂版,在第三列的絕對值最大鹃栽,說明原始圖片上對應(yīng)的地方有一條垂直方向的特征,即像素數(shù)值變化較大躯畴;
而通過第二個卷積核計算后民鼓,第三列的數(shù)值為0,第二行的數(shù)值絕對值最大私股,說明原始圖片上對應(yīng)的地方有一條水平方向的特征摹察,即像素值數(shù)值變化較大。
這樣就提取出了大致的兩個特征倡鲸,通過在更深層次的網(wǎng)絡(luò)中設(shè)置更多更巧妙的卷積核供嚎,我們就可以得到更多更準(zhǔn)確的特征。
我們設(shè)計的卷積核分別能夠提取峭状,或者說檢測出原始圖片的特定的特征克滴。所以實際上就可以把卷積核理解為特征提取器,我們不需要手動去選取特征优床,只用設(shè)計好卷積核的尺寸劝赔,數(shù)量和滑動的步長就可以讓它自己去訓(xùn)練了。同時胆敞,由于多個神經(jīng)元可以共享卷積核着帽,對于高位數(shù)據(jù)的處理將會變得非常簡單杂伟。
留下幾個小問題供大家思考:
1.卷積核的尺寸必須為正方形嗎?可以為長方形嗎仍翰?如果是長方形應(yīng)該怎么計算赫粥?
2.卷積核的個數(shù)如何確定?每一層的卷積核的個數(shù)都是相同的嗎予借?
3.步長的向右和向下移動的幅度必須是一樣的嗎越平?
在最后我將給出這些問題的答案。
2.2.5 多通道圖的卷積運算
這里先介紹單通道圖和多通道圖的概念
(一):單通道圖
俗稱灰度圖灵迫,每個像素點只能有有一個值表示顏色秦叛,它的像素值在0到255之間,0是黑色瀑粥,255是白色挣跋,中間值是一些不同等級的灰色。(也有3通道的灰度圖利凑,3通道灰度圖只有一個通道有值浆劲,其他兩個通道的值都是零)。
(二):三通道圖
每個像素點都有3個值表示 哀澈,所以就是3通道。也有4通道的圖度气。例如RGB圖片即為三通道圖片割按,RGB色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過對紅(R)磷籍、綠(G)适荣、藍(lán)(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅院领、綠弛矛、藍(lán)三個通道的顏色,這個標(biāo)準(zhǔn)幾乎包括了人類視力所能感知的所有顏色比然,是目前運用最廣的顏色系統(tǒng)之一丈氓。總之强法,每一個點由三個值表示万俗。
之前的卷積運算的例子都是以有高、長方向的2維形狀的單通道圖為對象的饮怯。
但是闰歪, 圖像是3維數(shù)據(jù),除了高蓖墅、長方向之外库倘,還需要處理通道方向临扮。這里,我們按照與之前相同的順序教翩,看一下對加上了通道方向的3維數(shù)據(jù)進(jìn)行卷積運算的例子公条。這里以3通道的數(shù)據(jù)為例, 展示了卷積運算的結(jié)果迂曲。和2維數(shù)據(jù)時相比靶橱,可以發(fā)現(xiàn)縱深方向(通道方向)上特征圖增加了。通道方向上有多個特征圖時路捧,會按通道進(jìn)行輸入數(shù)據(jù)和濾波器的卷積運算关霸,并將結(jié)果相加,從而得到輸出杰扫。
需要注意的是队寇,在3維數(shù)據(jù)的卷積運算中,輸入數(shù)據(jù)和濾波器的通道數(shù)要設(shè)為相同的值章姓。從上圖可知佳遣,每個卷積核輸出一張?zhí)卣鲌D,而多個卷積核輸出的特征圖匯集在一起凡伊,傳遞給下一層零渐,這就是CNN的處理流。
最后再看看一看卷積運算中的處理流是什么亞子系忙。
2.3 池化
講了這么久的卷積诵盼,終于來到了池化(pooling)層
池化是縮小高、長方向上的空間的運算银还。比如风宁,如圖所示,進(jìn)行將 2×2的區(qū)域集約成1個元素的處理蛹疯,縮小空間大小戒财。一般來說,池化的窗口大小會 和步幅設(shè)定成相同的值捺弦。
除了MaxPooling之外饮寞,還有AveragePooling等。相對于MaxPooling是從目標(biāo)區(qū)域中取出最大值羹呵,AveragePooling則是計算目標(biāo)區(qū)域的平均值骂际。 在圖像識別領(lǐng)域,主要使用MaxPooling冈欢。
那么問題來了歉铝,為什么MaxPooling能起到效果呢
MaxPooling意義在哪里?如果我們只取最大值凑耻,那其他的值被舍棄難道就沒有影響嗎太示?不會損失這部分信息嗎柠贤?如果認(rèn)為這些信息是可損失的,那么是否意味著我們在進(jìn)行卷積操作后仍然產(chǎn)生了一些不必要的冗余信息呢类缤?
其實從上文分析卷積核為什么有效的原因來看臼勉,每一個卷積核可以看做一個特征提取器,不同的卷積核負(fù)責(zé)提取不同的特征餐弱,我們例子中設(shè)計的第一個卷積核能夠提取出“垂直”方向的特征宴霸,第二個卷積核能夠提取出“水平”方向的特征,那么我們對其進(jìn)行MaxPooling操作后膏蚓,提取出的是真正能夠識別特征的數(shù)值瓢谢,其余被舍棄的數(shù)值,對于我提取特定的特征并沒有特別大的幫助驮瞧。
在進(jìn)行后續(xù)計算時氓扛,就減小了特征圖的尺寸,從而減少參數(shù)论笔,達(dá)到減小計算量采郎,缺不損失效果的情況。
這也意味著MaxPooling對微小的位置變化具有健壯性狂魔,輸入數(shù)據(jù)發(fā)生微小偏差時蒜埋,池化仍會返回相同的結(jié)果,池化會吸收輸入數(shù)據(jù)的偏差(根據(jù)數(shù)據(jù)的不同,結(jié)果有可能不一致)毅臊。
不過并不是所有情況MaxPooling的效果都很好理茎,有時候有些周邊信息也會對某個特定特征的識別產(chǎn)生一定效果,那么這個時候舍棄這部分“不重要”的信息管嬉,就不劃算了。所以還要具體情況具體分析朗鸠,如果加了Max Pooling后效果反而變差了蚯撩,不如把卷積后不加MaxPooling的結(jié)果與卷積后加了MaxPooling的結(jié)果輸出對比一下,看看MaxPooling是否對卷積核提取特征起了反效果烛占。
2.4 Flatten層 & Fully Connected Layer
到這一步胎挎,其實我們的一個完整的“卷積部分”就算完成了,如果想要疊加層數(shù)忆家,一般也是疊加“Conv-MaxPooing",通過不斷的設(shè)計卷積核的尺寸犹菇,數(shù)量,提取更多的特征芽卿,最后識別不同類別的物體揭芍。做完MaxPooling后,我們就會把這些數(shù)據(jù)“拍平”卸例,丟到Flatten層称杨,然后把Flatten層的output放到full connected Layer里肌毅,采用softmax對其進(jìn)行分類。
2.5 CNN的可視化
學(xué)習(xí)前的濾波器是隨機進(jìn)行初始化的姑原,所以在黑白的濃淡上沒有規(guī)律可循悬而,但學(xué)習(xí)后的濾波器變成了有規(guī)律的圖像。我們發(fā)現(xiàn)锭汛,通過學(xué)習(xí)笨奠,濾波器被更新成了有規(guī)律的濾波器,比如從白到黑漸變的濾波器唤殴、含有塊狀區(qū)域(稱為blob)的濾波器等般婆。
如果要問右邊的有規(guī)律的濾波器在“觀察”什么,答案就是它在觀察邊緣(顏色變化的分界線)和斑塊(局部的塊狀區(qū)域)等眨八。比如腺兴,左半部分為白色、右半部分為黑色的濾波器的情況下廉侧,如圖所示页响,會對垂直方向上的邊緣有響應(yīng)。
問題小結(jié)
最后是上面給大家留下的問題
1.卷積核的尺寸必須為正方形嗎段誊?可以為長方形嗎闰蚕?如果是長方形應(yīng)該怎么計算?
2.卷積核的個數(shù)如何確定连舍?每一層的卷積核的個數(shù)都是相同的嗎没陡?
3.步長的向右和向下移動的幅度必須是一樣的嗎?
下面的想法索赏,可以作為參考:
1.卷積核的尺寸不一定非得為正方形盼玄。長方形也可以,只不過通常情況下為正方形潜腻。如果要設(shè)置為長方形埃儿,那么首先得保證這層的輸出形狀是整數(shù),不能是小數(shù)(一些框架會對小數(shù)進(jìn)行四舍五入處理融涣,一些會引起報錯)童番。如果你的圖像是邊長為 28 的正方形。那么卷積層的輸出就滿足 [ (28 - kernel_size)/ stride ] + 1 威鹿,這個數(shù)值得是整數(shù)才行剃斧,否則沒有物理意義。池化層同理忽你。FC 層的輸出形狀總是滿足整數(shù)幼东,其唯一的要求就是整個訓(xùn)練過程中 FC 層的輸入得是定長的。如果你的圖像不是正方形。那么在制作數(shù)據(jù)時筋粗,可以縮放到統(tǒng)一大胁唛佟(非正方形),再使用非正方形的卷積核來使得卷積層的輸出依然是整數(shù)娜亿±鲆眩總之,撇開網(wǎng)絡(luò)結(jié)果設(shè)定的好壞不談买决,其本質(zhì)上就是在做算術(shù)應(yīng)用題:如何使得各層的輸出是整數(shù)沛婴。
2.由經(jīng)驗確定。通常情況下督赤,靠近輸入的卷積層嘁灯,譬如第一層卷積層,會找出一些共性的特征躲舌,如手寫數(shù)字識別中第一層我們設(shè)定卷積核個數(shù)為5個丑婿,一般是找出諸如"橫線"、“豎線”没卸、“斜線”等共性特征羹奉,我們稱之為basic feature,經(jīng)過池化后约计,在第二層卷積層诀拭,設(shè)定卷積核個數(shù)為20個,可以找出一些相對復(fù)雜的特征煤蚌,如“橫折”耕挨、“左半圓”、“右半圓”等特征尉桩,越往后筒占,卷積核設(shè)定的數(shù)目越多,越能體現(xiàn)的特征就越細(xì)致蜘犁,就越容易分類出來赋铝。比如你想分類出“0”的數(shù)字,你看到這個特征沽瘦,能推測是什么數(shù)字呢?只有越往后农尖,檢測識別的特征越多析恋,試過才能慢慢能識別出
這幾個特征,那么我就能夠確定這個數(shù)字是“0”盛卡。
3.有stride_w和stride_h助隧,表示左右步長和上下步長。如果用stride,則表示stride_h=stride_w=stride并村。