1戈次、神經(jīng)網(wǎng)絡(luò)
首先了解神經(jīng)網(wǎng)絡(luò)蔑歌,大家移步這倆篇博客碌上,一篇為純理論均芽,一篇為實(shí)戰(zhàn)加理論丘逸。
- 機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)及其模型
- 入門講解:使用numpy實(shí)現(xiàn)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)(BP算法)
2、卷積神經(jīng)網(wǎng)絡(luò)之層級(jí)結(jié)構(gòu)
cs231n課程里給出了卷積神經(jīng)網(wǎng)絡(luò)各個(gè)層級(jí)結(jié)構(gòu)掀宋,如下圖
所以
- 最左邊是數(shù)據(jù)輸入層儒喊,對(duì)數(shù)據(jù)做一些處理,比如去均值(把輸入數(shù)據(jù)各個(gè)維度都中心化為0币呵,避免數(shù)據(jù)過(guò)多偏差怀愧,影響訓(xùn)練效果)、歸一化(把所有的數(shù)據(jù)都?xì)w一到同樣的范圍)余赢、PCA/白化等等芯义。CNN只對(duì)訓(xùn)練集做“去均值”這一步。
中間是 - CONV:卷積計(jì)算層妻柒,線性乘積 求和扛拨。
- RELU:激勵(lì)層,上文2.2節(jié)中有提到:ReLU是激活函數(shù)的一種
- POOL:池化層举塔,簡(jiǎn)言之鬼癣,即取區(qū)域平均或最大
最右邊是 - FC:全連接層
這幾個(gè)部分中,卷積計(jì)算層是CNN的核心啤贩,下文將重點(diǎn)闡述。
3CNN之卷積計(jì)算層
3.1 CNN怎么進(jìn)行識(shí)別
簡(jiǎn)言之拜秧,當(dāng)我們給定一個(gè)"X"的圖案痹屹,計(jì)算機(jī)怎么識(shí)別這個(gè)圖案就是“X”呢?一個(gè)可能的辦法就是計(jì)算機(jī)存儲(chǔ)一張標(biāo)準(zhǔn)的“X”圖案枉氮,然后把需要識(shí)別的未知圖案跟標(biāo)準(zhǔn)"X"圖案進(jìn)行比對(duì)志衍,如果二者一致,則判定未知圖案即是一個(gè)"X"圖案聊替。
而且即便未知圖案可能有一些平移或稍稍變形楼肪,依然能辨別出它是一個(gè)X圖案。如此惹悄,CNN是把未知圖案和標(biāo)準(zhǔn)X圖案一個(gè)局部一個(gè)局部的對(duì)比春叫,如下圖所示
而未知圖案的局部和標(biāo)準(zhǔn)X圖案的局部一個(gè)一個(gè)比對(duì)時(shí)的計(jì)算過(guò)程,便是卷積操作泣港。卷積計(jì)算結(jié)果為1表示匹配暂殖,否則不匹配。
具體而言当纱,為了確定一幅圖像是包含有"X"還是"O"呛每,相當(dāng)于我們需要判斷它是否含有"X"或者"O",并且假設(shè)必須兩者選其一坡氯,不是"X"就是"O"晨横。
理想的情況就像下面這個(gè)樣子:
對(duì)于計(jì)算機(jī)來(lái)說(shuō)啥供,只要圖像稍稍有一點(diǎn)變化,不是標(biāo)準(zhǔn)的叁幢,那么要解決這個(gè)問(wèn)題還是不是那么容易的:
計(jì)算機(jī)要解決上面這個(gè)問(wèn)題滤灯,一個(gè)比較天真的做法就是先保存一張"X"和"O"的標(biāo)準(zhǔn)圖像(就像前面給出的例子),然后將其他的新給出的圖像來(lái)和這兩張標(biāo)準(zhǔn)圖像進(jìn)行對(duì)比曼玩,看看到底和哪一張圖更匹配鳞骤,就判斷為哪個(gè)字母。
但是這么做的話黍判,其實(shí)是非常不可靠的豫尽,因?yàn)橛?jì)算機(jī)還是比較死板的。在計(jì)算機(jī)的“視覺(jué)”中顷帖,一幅圖看起來(lái)就像是一個(gè)二維的像素?cái)?shù)組(可以想象成一個(gè)棋盤)美旧,每一個(gè)位置對(duì)應(yīng)一個(gè)數(shù)字。在我們這個(gè)例子當(dāng)中贬墩,像素值"1"代表白色榴嗅,像素值"-1"代表黑色。
當(dāng)比較兩幅圖的時(shí)候陶舞,如果有任何一個(gè)像素值不匹配嗽测,那么這兩幅圖就不匹配,至少對(duì)于計(jì)算機(jī)來(lái)說(shuō)是這樣的肿孵。
對(duì)于這個(gè)例子唠粥,計(jì)算機(jī)認(rèn)為上述兩幅圖中的白色像素除了中間的3*3的小方格里面是相同的,其他四個(gè)角上都不同:
因此停做,從表面上看晤愧,計(jì)算機(jī)判別右邊那幅圖不是"X",兩幅圖不同蛉腌,得出結(jié)論:
這也就是CNN出現(xiàn)所要解決的問(wèn)題们陆。
Features
對(duì)于CNN來(lái)說(shuō),它是一塊一塊地來(lái)進(jìn)行比對(duì)情屹。它拿來(lái)比對(duì)的這個(gè)“小塊”我們稱之為Features(特征)坪仇。在兩幅圖中大致相同的位置找到一些粗糙的特征進(jìn)行匹配,CNN能夠更好的看到兩幅圖的相似性垃你,相比起傳統(tǒng)的整幅圖逐一比對(duì)的方法椅文。
每一個(gè)feature就像是一個(gè)小圖(就是一個(gè)比較小的有值的二維數(shù)組)。不同的Feature匹配圖像中不同的特征惜颇。在字母"X"的例子中皆刺,那些由對(duì)角線和交叉線組成的features基本上能夠識(shí)別出大多數(shù)"X"所具有的重要特征。
這些features很有可能就是匹配任何含有字母"X"的圖中字母X的四個(gè)角和它的中心凌摄。那么具體到底是怎么匹配的呢羡蛾?如下:
看到這里是不是有了一點(diǎn)頭目呢。但其實(shí)這只是第一步锨亏,你知道了這些Features是怎么在原圖上面進(jìn)行匹配的痴怨。但是你還不知道在這里面究竟進(jìn)行的是怎樣的數(shù)學(xué)計(jì)算,比如這個(gè)下面3*3的小塊到底干了什么器予?
3.2 什么是卷積
對(duì)圖像(不同的數(shù)據(jù)窗口數(shù)據(jù))和濾波矩陣(一組固定的權(quán)重:因?yàn)槊總€(gè)神經(jīng)元的多個(gè)權(quán)重固定,所以又可以看做一個(gè)恒定的濾波器filter)做內(nèi)積(逐個(gè)元素相乘再求和)的操作就是所謂的『卷積』操作末融,也是卷積神經(jīng)網(wǎng)絡(luò)的名字來(lái)源。
非嚴(yán)格意義上來(lái)講暇韧,下圖中紅框框起來(lái)的部分便可以理解為一個(gè)濾波器勾习,即帶著一組固定權(quán)重的神經(jīng)元。多個(gè)濾波器疊加便成了卷積層懈玻。
3.3 圖像上的卷積
在下圖對(duì)應(yīng)的計(jì)算過(guò)程中,輸入是一定區(qū)域大小(width*height)的數(shù)據(jù)罚勾,和濾波器filter(帶著一組固定權(quán)重的神經(jīng)元)做內(nèi)積后等到新的二維數(shù)據(jù)毅人。
具體來(lái)說(shuō)吭狡,左邊是圖像輸入,中間部分就是濾波器filter(帶著一組固定權(quán)重的神經(jīng)元)丈莺,不同的濾波器filter會(huì)得到不同的輸出數(shù)據(jù)划煮,比如顏色深淺、輪廓缔俄。相當(dāng)于如果想提取圖像的不同特征弛秋,則用不同的濾波器filter,提取想要的關(guān)于圖像的特定信息:顏色深淺或輪廓俐载。
如下圖所示
在CNN中蟹略,濾波器filter(帶著一組固定權(quán)重的神經(jīng)元)對(duì)局部輸入數(shù)據(jù)進(jìn)行卷積計(jì)算。每計(jì)算完一個(gè)數(shù)據(jù)窗口內(nèi)的局部數(shù)據(jù)后瞎疼,數(shù)據(jù)窗口不斷平移滑動(dòng)科乎,直到計(jì)算完所有數(shù)據(jù)。這個(gè)過(guò)程中贼急,有這么幾個(gè)參數(shù):
a. 深度depth:神經(jīng)元個(gè)數(shù)茅茂,決定輸出的depth厚度。同時(shí)代表濾波器個(gè)數(shù)太抓。
b. 步長(zhǎng)stride:決定滑動(dòng)多少步可以到邊緣空闲。
c.填充值z(mì)ero-padding:在外圍邊緣補(bǔ)充若干圈0,方便從初始位置以步長(zhǎng)為單位可以剛好滑倒末尾位置走敌,通俗地講就是為了總長(zhǎng)能被步長(zhǎng)整除碴倾。
cs231n課程中有一張卷積動(dòng)圖,貌似是用d3js 和一個(gè)util 畫(huà)的掉丽,我根據(jù)cs231n的卷積動(dòng)圖依次截取了18張圖跌榔,然后用一gif 制圖工具制作了一gif 動(dòng)態(tài)卷積圖。如下gif 圖所示
可以看到:
兩個(gè)神經(jīng)元捶障,即depth=2僧须,意味著有兩個(gè)濾波器。
數(shù)據(jù)窗口每次移動(dòng)兩個(gè)步長(zhǎng)取3*3的局部數(shù)據(jù)项炼,即stride=2担平。
-
zero-padding=1。
然后分別以兩個(gè)濾波器filter為軸滑動(dòng)數(shù)組進(jìn)行卷積計(jì)算锭部,得到兩組不同的結(jié)果暂论。
如果初看上圖,可能不一定能立馬理解啥意思拌禾,但結(jié)合上文的內(nèi)容后取胎,理解這個(gè)動(dòng)圖已經(jīng)不是很困難的事情:
左邊是輸入(773中,7*7代表圖像的像素/長(zhǎng)寬湃窍,3代表R扼菠、G摄杂、B 三個(gè)顏色通道)
中間部分是兩個(gè)不同的濾波器Filter w0、Filter w1
-
最右邊則是兩個(gè)不同的輸出
隨著左邊數(shù)據(jù)窗口的平移滑動(dòng)循榆,濾波器Filter w0 / Filter w1對(duì)不同的局部數(shù)據(jù)進(jìn)行卷積計(jì)算析恢。
值得一提的是:
左邊數(shù)據(jù)在變化,每次濾波器都是針對(duì)某一局部的數(shù)據(jù)窗口進(jìn)行卷積秧饮,這就是所謂的CNN中的局部感知機(jī)制映挂。
打個(gè)比方,濾波器就像一雙眼睛盗尸,人類視角有限柑船,一眼望去,只能看到這世界的局部泼各。如果一眼就看到全世界鞍时,你會(huì)累死,而且一下子接受全世界所有信息扣蜻,你大腦接收不過(guò)來(lái)逆巍。當(dāng)然,即便是看局部莽使,針對(duì)局部里的信息人類雙眼也是有偏重锐极、偏好的。比如看美女芳肌,對(duì)臉灵再、胸、腿是重點(diǎn)關(guān)注亿笤,所以這3個(gè)輸入的權(quán)重相對(duì)較大翎迁。
與此同時(shí),數(shù)據(jù)窗口滑動(dòng)净薛,導(dǎo)致輸入在變化汪榔,但中間濾波器Filter w0的權(quán)重(即每個(gè)神經(jīng)元連接數(shù)據(jù)窗口的權(quán)重)是固定不變的,這個(gè)權(quán)重不變即所謂的CNN中的參數(shù)(權(quán)重)共享機(jī)制罕拂。
- 再打個(gè)比方,某人環(huán)游全世界全陨,所看到的信息在變爆班,但采集信息的雙眼不變。btw辱姨,不同人的雙眼 看同一個(gè)局部信息
所感受到的不同柿菩,即一千個(gè)讀者有一千個(gè)哈姆雷特,所以不同的濾波器 就像不同的雙眼雨涛,不同的人有著不同的反饋結(jié)果枢舶。
-
我第一次看到上面這個(gè)動(dòng)態(tài)圖的時(shí)候懦胞,只覺(jué)得很炫,另外就是據(jù)說(shuō)計(jì)算過(guò)程是“相乘后相加”凉泄,但到底具體是個(gè)怎么相乘后相加的計(jì)算過(guò)程
則無(wú)法一眼看出躏尉,網(wǎng)上也沒(méi)有一目了然的計(jì)算過(guò)程。本文來(lái)細(xì)究下后众。首先胀糜,我們來(lái)分解下上述動(dòng)圖,如下圖
接著蒂誉,我們細(xì)究下上圖的具體計(jì)算過(guò)程教藻。即上圖中的輸出結(jié)果1具體是怎么計(jì)算得到的呢?其實(shí)右锨,類似wx + b括堤,w對(duì)應(yīng)濾波器Filter w0,x對(duì)應(yīng)不同的數(shù)據(jù)窗口绍移,b對(duì)應(yīng)Bias b0悄窃,相當(dāng)于濾波器Filter w0與一個(gè)個(gè)數(shù)據(jù)窗口相乘再求和后,最后加上Bias b0得到輸出結(jié)果1登夫,如下過(guò)程所示:
然后濾波器Filter w0固定不變广匙,數(shù)據(jù)窗口向右移動(dòng)2步,繼續(xù)做內(nèi)積計(jì)算恼策,得到0的輸出結(jié)果
4 CNN之激勵(lì)層狮斗,池化層绽乔,全連接層
4.1 ReLU激勵(lì)層
第一節(jié)倆篇博客介紹了激活函數(shù)sigmoid,但實(shí)際梯度下降中碳褒,sigmoid容易飽和折砸、造成終止梯度傳遞,且沒(méi)有0中心化沙峻。咋辦呢睦授,可以嘗試另外一個(gè)激活函數(shù):ReLU,其圖形表示如下
下面我們看一下本文的離例子中relu激活函數(shù)具體操作:
最后删顶,我們將上面所提到的卷積竖螃,池化,激活放在一起逗余,就是下面這個(gè)樣子:
4.2 池化pool層
前頭說(shuō)了坚弱,池化,簡(jiǎn)言之关摇,即取區(qū)域平均或最大荒叶,如下圖所示(圖引自cs231n)
CNN中使用的另一個(gè)有效的工具被稱為“池化(Pooling)”。池化可以將一幅大的圖像縮小输虱,同時(shí)又保留其中的重要信息些楣。池化背后的數(shù)學(xué)頂多也就是小學(xué)二年級(jí)水平。它就是將輸入圖像進(jìn)行縮小宪睹,減少像素信息愁茁,只保留重要信息。通常情況下亭病,池化都是22大小鹅很,比如對(duì)于max-pooling來(lái)說(shuō),就是取輸入圖像中22大小的塊中的最大值罪帖,作為結(jié)果的像素值促煮,相當(dāng)于將原始圖像縮小了4倍。(注:同理整袁,對(duì)于average-pooling來(lái)說(shuō)菠齿,就是取2*2大小塊的平均值作為結(jié)果的像素值。)
上圖所展示的是取區(qū)域最大坐昙,即上圖左邊部分中 左上角2x2的矩陣中6最大绳匀,右上角2x2的矩陣中8最大,左下角2x2的矩陣中3最大炸客,右下角2x2的矩陣中4最大疾棵,所以得到上圖右邊部分的結(jié)果:6 8 3 4。很簡(jiǎn)單不是痹仙?
4.3全連接層(Fully connected layers)
根據(jù)結(jié)果判定為"X":
【綜合上述所有結(jié)構(gòu)】
5 綜合演練
參數(shù)
f:過(guò)濾器大小
s:步長(zhǎng)