編者按:最近小編在搜集CNN卷積計(jì)算方面的資料,希望能出一份清晰明了的圖文列表,但即便是在CNN介紹已經(jīng)泛濫的今天,一篇好的、簡單易懂的博客文章都是那么稀缺。今天,小編就先編譯加州大學(xué)洛杉磯分校學(xué)生Adit Deshpande的幾篇入門文章,希望能給新手讀者帶來幫助。
簡介
單從字面上看,卷積神經(jīng)網(wǎng)絡(luò)這個(gè)詞聽起來就像是生物學(xué)和數(shù)學(xué)的詭異組合,里面可能還摻了一點(diǎn)計(jì)算機(jī)科學(xué)的意味,但這種神經(jīng)網(wǎng)絡(luò)一直在為計(jì)算機(jī)視覺領(lǐng)域默默貢獻(xiàn)著最具影響力的創(chuàng)新。2012年是神經(jīng)網(wǎng)絡(luò)蓬勃發(fā)展的第一年,Alex Krizhevsky利用它們?cè)诋?dāng)年的ImageNet競賽中贏得了勝利,把分類錯(cuò)誤率從原來的26%降低到了15%,這在當(dāng)時(shí)簡直是驚天之舉。
從那之后,許多公司開始把深度學(xué)習(xí)納入自家的核心產(chǎn)品中:Facebook把神經(jīng)網(wǎng)絡(luò)用于自動(dòng)標(biāo)記算法,Google把神經(jīng)網(wǎng)絡(luò)用于圖像搜索,亞馬遜把它們用于商品推薦,Pinterest把它們用于主頁的個(gè)性化,而Instagram則開始用神經(jīng)網(wǎng)絡(luò)改進(jìn)搜索架構(gòu)。
而在這些神經(jīng)網(wǎng)絡(luò)中,應(yīng)用最為廣泛的就是今天我們要聊的CNN。以圖像處理為例,我們來看看CNN是怎么幫助進(jìn)行圖像分類的。
輸入和輸出
圖像分類指的是輸入一張圖像后,神經(jīng)網(wǎng)絡(luò)輸出一個(gè)關(guān)于這個(gè)圖像的類,或是圖像屬于某類的概率的任務(wù)。對(duì)于人類而言,這是我們從出生那一刻起就開始不斷學(xué)習(xí)的技能之一,而且隨著年齡的增長,人們處理這種任務(wù)會(huì)越來越輕松自然。
無需二次思考,我們就能快速無縫識(shí)別身處的環(huán)境和周圍的所有物體。當(dāng)看到一幅圖或是觀察周圍環(huán)境時(shí),我們幾乎是下意識(shí)地調(diào)用以往學(xué)習(xí)的所有知識(shí),為場景中的各個(gè)對(duì)象一一打上標(biāo)簽。
我們看到的 vs. 計(jì)算機(jī)看到的
但計(jì)算機(jī)不同。我們把圖像輸入計(jì)算機(jī)后,它“看”到的其實(shí)是一組像素值。這些像素值的數(shù)量會(huì)根據(jù)圖像的大小和分辨率發(fā)生改變,如果輸入圖像是一張JPG格式的彩色圖像,它的像素為480×480,那么計(jì)算機(jī)得到的數(shù)組就是480×480×3(這里3表示RGB值)。
這個(gè)數(shù)組里的每一個(gè)值都介于0—225之間,描述了對(duì)應(yīng)像素的強(qiáng)度。雖然這些值對(duì)分類任務(wù)來說毫無意義,但它們是計(jì)算機(jī)可以用的唯一輸入。這就帶出了另一個(gè)更直白的圖像分類任務(wù)描述:它其實(shí)是把像素值數(shù)組作為輸入,然后輸出圖像屬于某一類的具體概率,如80%(貓)、15%(狗)、5%(鳥)。
我們想讓計(jì)算機(jī)做什么
既然知道了理想的輸入和輸出,那我們面臨的下一個(gè)問題就是如何讓計(jì)算機(jī)解決這個(gè)任務(wù)。我們希望它能區(qū)分所有圖像,然后找出狗之所以是狗、貓之所以是貓的獨(dú)特特征。這是人類的本能反應(yīng)。當(dāng)我們看到包含狗的圖像時(shí),如果圖像里出現(xiàn)了一些明確的識(shí)別特征,如狗爪子和四條小短腿,我們可以迅速將其歸類。
同樣的,計(jì)算機(jī)分辨貓狗的做法是觀察邊緣、曲線等低層次特征,然后把這些放進(jìn)一系列卷積層中進(jìn)一步提取更多抽象概念。當(dāng)然,這只是CNN進(jìn)行圖像分類的一般概述,在下一節(jié)中我們會(huì)具體說明。
在開始正題前,我們先來探討一下“卷積神經(jīng)網(wǎng)絡(luò)”這個(gè)詞。當(dāng)你第一次接觸這個(gè)術(shù)語時(shí),你會(huì)不會(huì)覺得這應(yīng)該是神經(jīng)科學(xué)或生物學(xué)方面的東西?其實(shí)這種感覺是正確的,CNN是生物學(xué)家對(duì)動(dòng)物的視覺研究成果的一個(gè)衍生物。
視覺皮層中存在一塊對(duì)視野特定區(qū)域尤為敏感的細(xì)胞。1962年,Hubel和Wiesel對(duì)視覺神經(jīng)細(xì)胞做了一個(gè)實(shí)驗(yàn),實(shí)驗(yàn)表結(jié)果明,只有在存在特定方向邊緣的情況下,大腦中的一些神經(jīng)細(xì)胞個(gè)體才會(huì)響應(yīng)。他們發(fā)現(xiàn)所有這些神經(jīng)細(xì)胞都位于一個(gè)柱狀結(jié)構(gòu)中,而且能產(chǎn)生視覺感知。這種在特定任務(wù)的系統(tǒng)內(nèi)部尋找特定組件的思想正是如今許多計(jì)算機(jī)任務(wù)的核心,它也是CNN背后的基礎(chǔ)。
讓我們回到CNN,簡而言之,它的一般流程就是:輸入圖像——卷積層、非線性層、池化層(下采樣)、完全連接層——輸出分類/概率。那么這些層分別都做了什么呢?
第一層 - 數(shù)學(xué)視角
CNN的第一層是一個(gè)卷積層。我會(huì)假裝你還記得神經(jīng)網(wǎng)絡(luò)的輸入和輸出分別是什么,所以在這里我們假設(shè)輸入圖像是一張像素為32×32的彩色JPG,相應(yīng)的,CNN的輸入就是一個(gè)32×32×3的像素值數(shù)組。那么作為第一層的卷積層究竟有什么用?如下圖所示,我們可以把卷積層想象成一個(gè)發(fā)光的手電筒,它從左上角開始檢查,光照范圍是5×5。現(xiàn)在,想象一下用手電筒一塊塊檢查完所有區(qū)域。
在機(jī)器學(xué)習(xí)術(shù)語中,這個(gè)手電筒是filter(neuron/kernel),每次照亮的這塊5×5的區(qū)域是receptive field(感受野)。filter也是一個(gè)數(shù)組(權(quán)重/參數(shù)),而且深度必須和輸入圖像深度一致,這樣才能確保計(jì)算。在我們的例子中,filter的具體尺寸就是5×5×3。
隨著手電筒從左上角開始逐漸照亮周圍區(qū)域,圖像正在卷積,這時(shí)filter的數(shù)組會(huì)與原圖像像素值數(shù)組相乘(計(jì)算點(diǎn)積),在我們的例子中,它需要進(jìn)行75次乘法運(yùn)算,然后把這些乘積相加得到一個(gè)值。檢查完第一塊5×5后,讓我們把手電筒往右挪一個(gè)像素繼續(xù)計(jì)算點(diǎn)積,之后繼續(xù)往右挪一個(gè)像素,以此類推。
已知原輸入是32×32×3,filter尺寸5×5×3,當(dāng)手電筒掃完整片區(qū)域后,最后我們?cè)陔[藏層獲得的是一個(gè)28×28×1的數(shù)組(窗口逐格挪動(dòng),邊界少2;3個(gè)顏色通道合并成1個(gè))。它也被稱為activation map(加激活函數(shù))或feature map。
注:如果這里我們用了兩個(gè)5×5×3的filter,那最后的映射結(jié)果會(huì)是28×28×2。filter越多,空間維度保留地越好。
第一層 - 高層次的視角
知道了具體的數(shù)學(xué)計(jì)算步驟后,我們似乎還是不清楚卷積層的作用,所以這里我們從高層次的視角再看一遍。
每個(gè)filter都可以被看作是特征標(biāo)識(shí)符( feature identifiers),這里的特征指的是直線邊緣、曲線、黑白等,它們是每個(gè)圖像的都具備的最簡單的特征。假設(shè)我們有一個(gè)7×7×3的能檢測(cè)曲線的filter,它會(huì)給帶有曲線像素結(jié)構(gòu)的區(qū)域更高數(shù)值。(請(qǐng)忽略filter的深度,只把它看成一個(gè)數(shù)組)
上圖就是這個(gè)filter的可視化,它在曲線區(qū)域賦予了更高的權(quán)重,因此當(dāng)圖像感受野和它相乘時(shí),相應(yīng)區(qū)域的值會(huì)很高。
假設(shè)輸入圖像是一只小老鼠的簡筆畫。當(dāng)filter從左上角開始卷積時(shí),窗口先接觸到老鼠尾部。請(qǐng)記住一點(diǎn),我們必須計(jì)算filter與圖像原始像素?cái)?shù)組和乘積。
這個(gè)圓潤的曲線和filter的理想曲線形狀相似,相乘后,它們產(chǎn)生了一個(gè)很大的值。
但是,如果這時(shí)我們把窗口移到老鼠頭部,輸出結(jié)果就很差了。我們要注意一點(diǎn),就是filter的輸出是個(gè)activation map(必定要ReLu一下),所以在這個(gè)只包含一個(gè)filter的簡單示例中,第一個(gè)卷積層在圖像左上角的區(qū)域得到了高值,而對(duì)右上角不會(huì)有激活反應(yīng)。這就起到了“過濾”的效果。
當(dāng)然這只是一個(gè)filter,一個(gè)只能分辨向右彎曲的曲線的filter,在真實(shí)實(shí)踐中,我們可以設(shè)置大量不同的filter來獲得更全面的activation map,如檢測(cè)直線的、色彩的。
注:這里的曲線、直線、色彩都是假設(shè),事實(shí)上我們并不清楚CNN捕捉的特征是什么,我們只能從數(shù)據(jù)中看出它有沒有得到新特征,切勿認(rèn)為計(jì)算機(jī)看到的就等同于人眼看到的。
CS 231N課程
越來越深的網(wǎng)絡(luò)
現(xiàn)在在一些經(jīng)典CNN架構(gòu)中,卷積層之間偶爾也會(huì)出現(xiàn)一些其他層,感興趣的讀者可以去了解一下這些層分別是什么,或者分別有什么作用,但總的來說,它們的出現(xiàn)都是為了增強(qiáng)神經(jīng)網(wǎng)絡(luò)的穩(wěn)定性并控制過擬合。從某種角度上說,CNN一般長這樣:
常規(guī)的CNN包含兩個(gè)卷積層就夠了,一些更高級(jí)的可能會(huì)存在多個(gè)卷積層的情況。就上圖而言,最后一個(gè)完全連接層是非常重要的,但我們把它放到下一節(jié)再介紹,先聊聊之前的各個(gè)步驟。把圖像輸入神經(jīng)網(wǎng)絡(luò)后,第一個(gè)卷積層輸出的是activation map,這時(shí)網(wǎng)絡(luò)提取到了圖像中的一些低層次特征,就像人類眼中的邊緣和曲線。
用ReLu激活后,CNN把a(bǔ)ctivation map輸入第二個(gè)卷積層,在這里,filter過濾的就是activation map中的特征,這是一個(gè)從低層次特征中提取高層次特征的過程,雖然我們不知道計(jì)算機(jī)看到了什么,但如果拿人類學(xué)習(xí)來類比,這一步可以被理解為從之前看到的邊緣、曲線中找出能組成半圓、正方形的線條組合。
卷積層越多,我們能提取到的高層次特征就越多,神經(jīng)網(wǎng)絡(luò)對(duì)像素空間就越敏感。反過來看,這時(shí)網(wǎng)絡(luò)復(fù)雜度也高了,容易產(chǎn)生過擬合。
全連接層
有了高層次特征,現(xiàn)在我們就能品嘗CNN的精華——全連接層了。無論之前是卷積層的輸出還是ReLu、池化層的輸出,全連接層基本只接受一個(gè)輸入,并輸出一個(gè)N維向量,其中N是必須從中選擇的分類數(shù)。如果你想要分類手寫數(shù)字,這時(shí)N就是10,因?yàn)橛?0個(gè)數(shù)字。
這個(gè)N維向量中的每個(gè)數(shù)字代表屬于某個(gè)類別的概率。例如,如果全連接層的輸出是[0 .1 .1 .75 0 0 0 0 .05],那么圖像是1的概率就是10%,圖像是2概率是10%,圖像是3的概率是75%,圖像是9的概率則是5%(注意:還有其他方法可以表示輸出,這里只展示softmax方法)。
簡而言之,全連接層的作用就是觀察前一層的輸出(一般是包含高層次特征的activation map),然后確定哪些特征與特定類最相關(guān)。以人類類比,如果要辨別圖像里的是不是狗,我們會(huì)注意里面有沒有爪子、四肢;如果要辨別是不是鳥,翅膀和喙就特別重要。全連接層會(huì)賦予這些相關(guān)性更強(qiáng)的特征更多權(quán)重,以便當(dāng)我們計(jì)算權(quán)重和上一層之間的乘積時(shí),我們可以得到圖像屬于不同類別的正確概率。
訓(xùn)練
最后就到了CNN最重要的部分——訓(xùn)練了。在閱讀前文時(shí),我們可能有諸多疑惑:filter是怎么知道自己要找哪些低層次特征的?全連接層又是怎么篩選activation map的?計(jì)算機(jī)能自動(dòng)選取filter中的權(quán)重嗎?很顯然,這一切都是由經(jīng)典的反向傳播來實(shí)現(xiàn)的。
在我們剛出生的時(shí)候,一切都是新的,我們不知道什么是狗,也不知道什么是鳥。同樣的,當(dāng)一個(gè)CNN被剛寫出來的時(shí)候,它的世界也才剛起步,所有數(shù)值都是隨機(jī)選取的,filter不知道自己要篩選什么特征,全連接層也無法在activation map里放大有效信息。而隨著年齡的增長,我們的父母和老師逐漸向我們展示了這個(gè)多彩的世界,以及和它緊密相關(guān)的諸多標(biāo)簽。訓(xùn)練就是CNN學(xué)習(xí)的過程,通過查看數(shù)據(jù)集中成千上萬的圖片,神經(jīng)網(wǎng)絡(luò)也能慢慢從中捕捉到特征,并學(xué)會(huì)正確分類。
反向傳播由4個(gè)不同步驟組成:正向傳遞、損失函數(shù)、反向傳遞和權(quán)重更新。
正向傳遞時(shí),我們輸入一張圖像,一個(gè)尺寸為32×32×3的像素值數(shù)組,然后將其傳遞給整個(gè)網(wǎng)絡(luò)。在我們的第一個(gè)訓(xùn)練示例中,由于所有權(quán)重/filter值都是隨機(jī)初始化的,因此輸出結(jié)果可能類似[.1 .1 .1 .1 .1 .1 .1 .1 .1],它在分類上“不偏不倚”。
損失函數(shù)開啟了“反向”的第一步。當(dāng)網(wǎng)絡(luò)現(xiàn)有權(quán)重?zé)o法提取低層次特征時(shí),這就意味著它沒法得出合理的分類結(jié)果。但是記住一點(diǎn),我們用的是訓(xùn)練數(shù)據(jù),它包含圖像和標(biāo)簽兩種信息,這就意味著我們能用損失函數(shù)計(jì)算預(yù)測(cè)標(biāo)簽和真實(shí)標(biāo)簽的差異,差異越小,CNN預(yù)測(cè)正確的可能性就越大,性能也越好。損失函數(shù)有很多,但其中最常用的MSE(均方誤差):
既然目的是把損失值降到最低,那這就成了一個(gè)優(yōu)化問題——找出對(duì)輸出影響最大的輸入,也就是dL / dW,其中W是特定層的權(quán)重。
現(xiàn)在,我們要做的是通過網(wǎng)絡(luò)進(jìn)行反向傳遞,確定哪些權(quán)重對(duì)損失影響最大,并找到調(diào)整它們的方法從而減少損失。一旦我們計(jì)算出這個(gè)導(dǎo)數(shù),我們就會(huì)進(jìn)入最后一步,權(quán)重更新。
學(xué)習(xí)率(learning rate)是一個(gè)可以自定義調(diào)整的超參數(shù),它影響著著CNN的收斂速度。如果學(xué)習(xí)率過大,權(quán)重更新的幅度就很大,這時(shí)CNN能快速收斂,但它也帶來一個(gè)問題,就是權(quán)重的精度不夠,無法得出最優(yōu)解。
正向傳遞、損失函數(shù)、反向傳遞和權(quán)重更新的過程構(gòu)成一輪訓(xùn)練迭代。CNN會(huì)對(duì)參與訓(xùn)練的每組圖像(batch)進(jìn)行進(jìn)行固定次數(shù)的迭代。一旦你完成了最后一個(gè)訓(xùn)練樣本的參數(shù)更新,這時(shí)網(wǎng)絡(luò)的性能更好了,各層的權(quán)值也終于調(diào)整正確了。
下期預(yù)告
本文介紹了CNN的一些基礎(chǔ)知識(shí),包括filter的作用、各層的作用等,但還未介紹網(wǎng)絡(luò)架構(gòu)、批量歸一化、損失函數(shù)選擇、數(shù)據(jù)增強(qiáng)、正則化方法等內(nèi)容。新人可以依靠本文對(duì)CNN建立初步認(rèn)識(shí),部分重要內(nèi)容我們會(huì)在下一篇文章中詳談。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4781瀏覽量
101177 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8441瀏覽量
133088 -
cnn
+關(guān)注
關(guān)注
3文章
353瀏覽量
22337
原文標(biāo)題:面向新手的CNN入門指南(一)
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
使用Python卷積神經(jīng)網(wǎng)絡(luò)(CNN)進(jìn)行圖像識(shí)別的基本步驟
討論紋理分析在圖像分類中的重要性及其在深度學(xué)習(xí)中使用紋理分析
如何將DS_CNN_S.pb轉(zhuǎn)換為ds_cnn_s.tflite?
一文詳解CNN
圖像分類的方法之深度學(xué)習(xí)與傳統(tǒng)機(jī)器學(xué)習(xí)
簡單好上手的圖像分類教程!
![簡單好上手的<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>教程!](http://file.elecfans.com/web1/M00/51/DF/o4YBAFsPtHmAaTplAAGo0ECzBWc757.gif)
全卷積網(wǎng)絡(luò)FCN進(jìn)行圖像分割
如何使用CNN對(duì)可穿戴傳感器進(jìn)行數(shù)據(jù)分類
![如何使用<b class='flag-5'>CNN</b>對(duì)可穿戴傳感器<b class='flag-5'>進(jìn)行</b>數(shù)據(jù)<b class='flag-5'>分類</b>](https://file.elecfans.com/web1/M00/D6/E2/o4YBAF_lrFGATLB5AABK1gf0_bQ245.png)
基于特征交換的卷積神經(jīng)網(wǎng)絡(luò)圖像分類算法
![基于特征交換的卷積神經(jīng)網(wǎng)絡(luò)<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>算法](https://file.elecfans.com/web1/M00/E6/9C/pIYBAGBYRCeAc0x_AAGjjY2uNjw582.png)
《自動(dòng)化學(xué)報(bào)》:基于小樣本學(xué)習(xí)的圖像分類技術(shù)綜述
![《自動(dòng)化學(xué)報(bào)》:基于小樣本學(xué)習(xí)的<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>技術(shù)綜述](https://file.elecfans.com/web2/M00/1C/DD/pYYBAGGN39iAG-riAAA05YGyl7o585.png)
使用CNN進(jìn)行2D路徑規(guī)劃
CNN圖像分類策略
![<b class='flag-5'>CNN</b><b class='flag-5'>圖像</b><b class='flag-5'>分類</b>策略](https://file1.elecfans.com/web2/M00/B8/CF/wKgaomWI-WOADHeQAAASBayhDGs260.jpg)
評(píng)論