摘要: 何為卷積神經(jīng)網(wǎng)絡(luò),它來自何方?又要走向何處?跟著作者的節(jié)奏,一起來開始探索CNN吧。
卷積神經(jīng)網(wǎng)絡(luò)聽起來像一個奇怪的生物學(xué)和數(shù)學(xué)的組合,但它是計算機(jī)視覺領(lǐng)域最具影響力的創(chuàng)新之一。2012年是卷積神經(jīng)網(wǎng)絡(luò)最流行的一年,因為Alex Krizhevsky用它贏得當(dāng)年的ImageNet競爭(基本上算得上是計算機(jī)視覺的年度奧運(yùn)),它將分類錯誤記錄從26%降至15%,這是驚人的改善。從那時起,深度學(xué)習(xí)開始流行起來,F(xiàn)acebook使用神經(jīng)網(wǎng)絡(luò)進(jìn)行自動標(biāo)記算法,Google進(jìn)行照片搜索,亞馬遜的產(chǎn)品推薦,家庭飼料個性化的Pinterest,以及以搜索為基礎(chǔ)設(shè)施的Instagram。
?
今天我們來看看在圖像處理中如何使用CNN進(jìn)行圖像分類。
1.空間問題
圖像分類是輸入圖像并輸出類(貓,狗等)的任務(wù),或是最能描述圖像的類的概率。對于人類來說,這個任務(wù)是我們從出生的那一刻開始學(xué)習(xí)的第一個技能之一。我們?nèi)祟惸軌蚩焖?,無縫地識別我們所處的環(huán)境以及我們周圍的對象。當(dāng)我們看到一個圖像,甚至只是看著我們周圍的世界,大多數(shù)時候,我們能夠立即刻畫場景,并給每個對象一個標(biāo)簽,所有這些都沒有意識到注意。能夠快速識別模式的這些技能,從先前的知識推測出來,適應(yīng)不同的圖像環(huán)境是我們的特長。我個人覺得這是人類三維視角的獨特的優(yōu)勢,相較于機(jī)器的二維視角。
?
2.輸入和輸出
當(dāng)計算機(jī)看到圖像(將圖像作為輸入)時,它將看到的是像素值的數(shù)組。根據(jù)圖像的分辨率和大小,它會看到一個32 x 32 x 3的數(shù)組(3是RGB值)。我們假設(shè)我們有一個JPG形式的彩色圖像,其大小是480 x 480.代表性的數(shù)組將是480 x 480 x 3。這些數(shù)字中的每一個都給出一個從0到255的值,它描述某個點的像素強(qiáng)度。這些數(shù)字在我們進(jìn)行圖像分類時對我們毫無意義,但它是計算機(jī)可用的唯一輸入。所以,這在人類的潛意識中是非常困難的。
3.我們想要電腦做什么
現(xiàn)在我們知道了問題以及如何輸入和輸出,讓我們考慮一下如何解決這個問題。我們希望電腦能夠區(qū)分所有的圖像,并找出識別狗或識別貓的獨特功能。當(dāng)我們看一只狗的照片時,如果圖片具有可識別的特征,例如爪子或四條腿,我們可以對其進(jìn)行分類。以類似的方式,計算機(jī)能夠通過尋找諸如邊緣和曲線的低級特征,然后通過一系列卷積層來構(gòu)建更抽象的概念來執(zhí)行圖像分類。這是CNN功能的總體概述,我們來詳細(xì)了解一下。
3.1生物連接
首先你要有一點生物學(xué)背景。當(dāng)你第一次聽到“卷積神經(jīng)網(wǎng)絡(luò)”一詞的時候,你可能會想到與神經(jīng)科學(xué)或生物學(xué)有關(guān)的東西。CNN確實從生物學(xué)中的視覺皮質(zhì)獲得啟發(fā),視覺皮層是具有對視野的特定區(qū)域敏感的細(xì)胞區(qū)域,而且特定區(qū)域一般很小。這個想法在1962年由Hubel和Wiesel的實驗產(chǎn)生的。Hubel和Wiesel發(fā)現(xiàn),所有這些神經(jīng)元都被組織在一個柱狀結(jié)構(gòu)中,并且它們一起能夠產(chǎn)生視覺感知。具有特定任務(wù)(視覺皮層中的神經(jīng)元細(xì)胞尋找特定特征)的系統(tǒng)內(nèi)的專門組件的想法也是機(jī)器使用的構(gòu)思。也是我們常說的局部感受野:就是輸出圖像某個節(jié)點的響應(yīng)所對應(yīng)的最初的輸入圖像的區(qū)域。這也是CNN的基礎(chǔ)。
4.結(jié)構(gòu)體
接下來我們談?wù)劸唧w細(xì)節(jié)。對CNN做什么的更詳細(xì)的概述將是:拍攝圖像、通過一系列卷積、非線性、池(下采樣)和完全連接的層,并獲得輸出。如我們前面所說,輸出可以是單個類或最能描述圖像的類的概率?,F(xiàn)在,困難的部分是理解這些層中的每一個,首先讓我們進(jìn)入最重要的一個。
4.1第一層:數(shù)學(xué) (Math)
CNN中的第一層總是卷積層。第一件事是要確保你記得是這個轉(zhuǎn)換的輸入,像我們之前提到的,輸入是一個32 x 32 x 3的像素數(shù)組。解釋轉(zhuǎn)換層的最好方法是想象一下閃光在圖像左上方的手電筒,這個手電筒的光線覆蓋著5×5的區(qū)域。而現(xiàn)在,我們可以想象這個手電筒可以滑過輸入圖像的所有區(qū)域。在機(jī)器學(xué)習(xí)術(shù)語中,這種手電筒被稱為濾波器(或有時稱為神經(jīng)元或內(nèi)核),并且其閃爍的區(qū)域稱為接收場。現(xiàn)在這個過濾器也是數(shù)字?jǐn)?shù)組(數(shù)字稱為權(quán)重或參數(shù))。一個非常重要的注意事項是,該濾波器的深度必須與輸入深度相同(這樣才可以確保數(shù)學(xué)運(yùn)算),因此濾波器的尺寸為5 x 5 x 3。
譯者注:濾波器:filter(帶著一組固定權(quán)重的神經(jīng)元)對局部輸入數(shù)據(jù)進(jìn)行卷積計算。
現(xiàn)在,我們來看看濾波器的第一個位置。當(dāng)濾波器在輸入圖像周圍滑動或卷積時,它將濾波器中的值與圖像的原始像素值(AKA運(yùn)算單元乘法)相乘。所以你將等到一個數(shù)字,請記住,這個數(shù)字只是代表濾波器位于圖像左上方的代表?,F(xiàn)在,我們對每個位置重復(fù)此過程。(下一步是將濾鏡向右移動1個單位,然后再次向右移動1個,依此類推。)每個位置都會產(chǎn)生一個數(shù)字,濾波器將所有位置的滑動后,你會發(fā)現(xiàn)剩下的是28 x 28 x 1的數(shù)字?jǐn)?shù)組,我們稱之為激活圖或特征圖。你得到一個28 x 28陣列的原因是,有784個不同的位置,一個5 x 5的過濾器可以適應(yīng)32 x 32的輸入圖像。這些784個數(shù)字被映射到一個28×28陣列。
?
現(xiàn)在我們使用兩個5 x 5 x 3的過濾器,而不是一個。那么我們的輸出將是28 x 28 x 2.通過使用更多的濾鏡,我們可以更好地保留空間維度。
4.2高層次視角(high-level perspective)#e#
4.2高層次視角(high-level perspective)
我們來談一談從高層次視角看這個卷積實際在做什么。這些濾波器中的每一個都可以被認(rèn)為是特征標(biāo)識符。當(dāng)我說特征時,我指的是直邊、簡單的顏色和曲線。假設(shè)我們第一個濾波器為7 x 7 x 3,將成為一個曲線檢測器。(在本節(jié)中,我們忽略了濾波器為3單位深的事實,為了簡單起見,僅考慮濾波器和圖像的頂層深度)。作為曲線檢測器,濾波器將具有像素結(jié)構(gòu),其中存在的是沿著曲線形狀的區(qū)域的更高的數(shù)值(記住,我們正在談?wù)摰倪@些過濾器只是數(shù)字?。?/p>
?
現(xiàn)在,讓我們回想一下數(shù)學(xué)上的可視化。當(dāng)我們在輸入的左上角有這個過濾器時,它是該區(qū)域中濾波器和像素值之間的計算乘法?,F(xiàn)在,讓我們舉一個我們要分類的圖像的例子,讓我們把過濾器放在左上角。
?
記?。何覀円龅氖菍V波器中的值與圖像的原始像素值相乘。
?
在輸入圖像中,如果存在類似于該濾波器表示的曲線的形狀,則所有乘法相加在一起將導(dǎo)致較大的值!現(xiàn)在我們來看看當(dāng)我們移動過濾器時會發(fā)生什么。
?
值要低得多!這是因為圖像部分中沒有任何響應(yīng)曲線濾波器中的內(nèi)容。請記住,此轉(zhuǎn)換圖層的輸出是激活圖。因此,在一個濾波器卷積的簡單情況下(如果該濾波器是曲線檢測器),那么激活圖將顯示圖像中最可能出現(xiàn)曲線的區(qū)域。在這個例子中,我們的28 x 28 x 1激活圖的左上角值將為6600。我們的激活圖中右上角的值將為0,因為輸入中沒有任何內(nèi)容導(dǎo)致過濾器被激活(或者更簡單地說,原始圖像的該區(qū)域中沒有曲線)。記住,這只是一個濾波器。它用于檢測向外和向右彎曲的線條。我們也可以使用其他濾波器,用于向左或直邊彎曲的線條。
?
4.3深入網(wǎng)絡(luò)
在傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)中,其他層次之間非常分明。我強(qiáng)烈地建議有興趣的人閱讀并理解他們的功能和效果,但總體來說,它們提供了非線性的維度,有助于提高網(wǎng)絡(luò)的魯棒性和控制過度。經(jīng)典的CNN架構(gòu)如下所示:
然而,最后一層是非常重要的,我稍后會介紹。讓我們回顧一下我們剛剛所學(xué)到的東西。
我們討論了第一個轉(zhuǎn)換層中的濾波器被設(shè)計為檢測什么。它們檢測低級特征,如邊緣和曲線。可以想象,為了預(yù)測圖像是否是一種對象,我們需要網(wǎng)絡(luò)能夠識別更高級別的特征,例如手或爪子或耳朵。所以讓我們考慮第一個轉(zhuǎn)換層之后的網(wǎng)絡(luò)輸出。當(dāng)我們通過另一個轉(zhuǎn)換層時,第一個轉(zhuǎn)換層的輸出成為第二個轉(zhuǎn)換層的輸入。
當(dāng)我們談?wù)摰谝粚訒r,輸入只是原始圖像。然而,當(dāng)我們談?wù)摰诙€轉(zhuǎn)換層時,輸入是從第一層產(chǎn)生的激活圖。因此,輸入的每一層基本上都描述了原始圖像中出現(xiàn)某些低級特征的位置。現(xiàn)在當(dāng)你應(yīng)用一組濾波器(通過第二個轉(zhuǎn)換層)時,輸出將是表示較高級特征的激活圖。這些特征的類型可以是半圓(曲線和直邊的組合)或正方形(幾條直邊的組合)。當(dāng)你通過網(wǎng)絡(luò)并通過更多的轉(zhuǎn)換層時,你將獲得代表越來越復(fù)雜特征的激活圖。
4.4完全連接層
現(xiàn)在我們可以檢測到這些高級特征,接下來就是一個完全連接的層。該層基本上接收一個輸入卷(volume)(無論是在其前面的conv或ReLU或池層的輸出),并輸出N維向量,其中N是程序必須選擇的類的數(shù)量。例如,如果你想要一個數(shù)字分類程序,N將是10,因為有10位數(shù)字。該N維向量中的每個數(shù)字表示某一類的概率。例如,如果用于數(shù)字分類程序的結(jié)果向量是[0,1,1,75,0,0 ,0,0,0,05],則這表示圖像為1的概率為10%,10%的概率為圖像是2,圖像為3的概率為75%,圖像為9的概率為5%。(注:還有其他方式可以表示輸出,但我只是顯示softmax方法。)
這個完全連接層可以查看上一層的輸出(表示高級特征的激活圖),并確定與特定類最相關(guān)的特征。例如,如果程序預(yù)測某些圖像是狗,則在激活圖中將具有高值,這些圖表示諸如爪或四條腿等高級特征。類似地,如果程序預(yù)測某些圖像是鳥,它將具有高值的激活圖,代表高級特征,如翅膀或喙等。完全連接層最后輸出的是一個概率。
?
4.5訓(xùn)練
這是我有意沒有提到的神經(jīng)網(wǎng)絡(luò)的另一個方面,它可能是最重要的部分。第一個轉(zhuǎn)換層中的濾波器如何查找邊和曲線?完全連接層如何看激活圖?每個層中的濾波器如何知道這是什么值?計算機(jī)能夠調(diào)整其濾波器值(或權(quán)重)的方式是通過稱為反向傳播的訓(xùn)練過程。
在進(jìn)行反向傳播之前,我們必須先退后一步,談一談神經(jīng)網(wǎng)絡(luò)為了工作需要什么。現(xiàn)在我們都出生了,我們不知道什么是貓或狗或鳥。以類似的方式,在CNN啟動之前,權(quán)重或濾波器值被隨機(jī)化。過濾器不知道如何尋找邊緣和曲線。然而,隨著年齡的增長,我們的父母和老師向我們展示了不同的圖片,并給了我們相應(yīng)的標(biāo)簽。給予圖像和標(biāo)簽其實就是CNN的訓(xùn)練過程。我們有一個訓(xùn)練集,有成千上萬的狗,貓和鳥的圖像,而且每個圖像都有一個標(biāo)簽。
回到backprop(反向傳播)
反向傳播可以分為四個不同的部分:正向傳遞,損失函數(shù),后向傳遞和權(quán)重更新。在我們的第一個訓(xùn)練中,由于所有權(quán)重或濾波器值都被隨機(jī)初始化,所以輸出可能會像[.1 .1 .1 .1 .1 .1 .1 .1 .1]。具有當(dāng)前權(quán)重的網(wǎng)絡(luò)不能尋找那些低級特征,因此不能對分類有什么合理的結(jié)論。記住,我們現(xiàn)在正在使用的是訓(xùn)練數(shù)據(jù),該數(shù)據(jù)同時具有圖像和標(biāo)簽。例如,輸入的第一個訓(xùn)練圖像為3,圖像的標(biāo)簽為[0 0 0 1 0 0 0 0 0 0]。損失函數(shù)可以以許多不同的方式定義,但常見的是MSE(均方誤差),它是?倍(實際預(yù)測)平方。
現(xiàn)在,我們想要達(dá)到預(yù)測標(biāo)簽(ConvNet的輸出)與訓(xùn)練標(biāo)簽相同的點(這意味著我們的網(wǎng)絡(luò)獲得了預(yù)測能力)。為了達(dá)到目的,我們要盡量減少損失量。將其視為微積分中的優(yōu)化問題,我們希望了解哪些輸入直接地導(dǎo)致了網(wǎng)絡(luò)的丟失。
?
現(xiàn)在,我們想要做的是執(zhí)行一個向后傳遞的網(wǎng)絡(luò),這是決定哪些權(quán)重有助于損失,并找到調(diào)整方式,以使損失減少。這是權(quán)重更新。這時我們把所有權(quán)重和更新,以便它們沿梯度的相反方向改變。
?
向前傳遞>損失函數(shù)>向后傳遞>參數(shù)更新是一個訓(xùn)練迭代。該程序?qū)γ拷M訓(xùn)練圖像(通常稱為批次)重復(fù)此過程以進(jìn)行固定次數(shù)的迭代。一旦完成了最后一個訓(xùn)練示例的參數(shù)更新,網(wǎng)絡(luò)應(yīng)該被訓(xùn)練得很好,以保證層的權(quán)重得到調(diào)整。
4.6測試
最后,要看我們的CNN是否有效,我們有一套不同的圖像和標(biāo)簽,并通過CNN傳遞圖像。我們將輸出與地面事實進(jìn)行比較,看看我們的網(wǎng)絡(luò)是否正常工作!
5.總結(jié):
雖然這篇文章應(yīng)該是了解CNN的一個好的開始,但絕不是全面的概述。這篇文章中沒有討論包括非線性和匯集層以及網(wǎng)絡(luò)的超參數(shù),如濾波器大小,步幅和填充。還沒有討論如網(wǎng)絡(luò)架構(gòu),批量歸一化,梯度消失,dropout,初始化,非凸優(yōu)化,偏差,損失函數(shù)的選擇,數(shù)據(jù)增加,正則化方法,反向傳播的修改等問題。如果你想要了解這些,請繼續(xù)關(guān)注我!
評論
查看更多