近年來,一些傳統(tǒng)的領(lǐng)域(計(jì)算機(jī)視覺四瘫、自然語(yǔ)言處理汉嗽、醫(yī)療保健、智能安防等)得到了快速的發(fā)展莲组,也取得了可喜的成果诊胞。此外,也有一些成熟的技術(shù)已經(jīng)運(yùn)用到了我們的實(shí)際生活中锹杈,包括人臉識(shí)別解鎖技術(shù)撵孤、指紋識(shí)別解鎖技術(shù)、迎賓機(jī)器人等竭望。而這一切都源于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)的出現(xiàn)邪码。本文將給大家詳細(xì)梳理一下卷積神經(jīng)網(wǎng)絡(luò)的來龍去脈。
1. 神經(jīng)網(wǎng)絡(luò) Neural Network
其實(shí)咬清,在CNN問世之前闭专,學(xué)術(shù)界的各位大佬就已經(jīng)研究神經(jīng)網(wǎng)絡(luò)多年。神經(jīng)網(wǎng)絡(luò)旧烧,即人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network, ANN)是模仿生物大腦神經(jīng)結(jié)構(gòu)和功能的一種數(shù)學(xué)模型影钉。下圖所示,是人類大腦中的一個(gè)神經(jīng)元掘剪,主要包括樹突平委、細(xì)胞體、軸突等夺谁。每個(gè)神經(jīng)元廉赔,都可以分為:接受區(qū)、觸發(fā)區(qū)匾鸥、傳導(dǎo)區(qū)和輸出區(qū)蜡塌,代表著一個(gè)神經(jīng)元傳導(dǎo)信息的一個(gè)過程。
因此勿负,仿照著上述神經(jīng)元的信息處理和傳導(dǎo)流程馏艾,便設(shè)計(jì)出一個(gè)如下圖所示的簡(jiǎn)易的感知器,它可以接受多個(gè)輸入(接受區(qū)),然后經(jīng)過處理(觸發(fā)區(qū))琅摩,最后產(chǎn)生一個(gè)輸出(輸出區(qū))厚者。
然而,這樣的單層網(wǎng)絡(luò)只能實(shí)現(xiàn)非常簡(jiǎn)單的功能迫吐。而對(duì)于生物神經(jīng)網(wǎng)絡(luò)而言,每個(gè)功能的實(shí)現(xiàn)都是靠著復(fù)雜的神經(jīng)網(wǎng)絡(luò)進(jìn)行傳導(dǎo)账忘,因此志膀,對(duì)于人工神經(jīng)網(wǎng)絡(luò)也是同樣的道理,為了實(shí)現(xiàn)更復(fù)雜的功能鳖擒,我們便將多個(gè)感知器層堆疊起來溉浙,設(shè)計(jì)出了最初的神經(jīng)網(wǎng)絡(luò):
當(dāng)任務(wù)比較簡(jiǎn)單時(shí),這樣的神經(jīng)網(wǎng)絡(luò)就足以應(yīng)對(duì)蒋荚,但是當(dāng)處理圖片等數(shù)據(jù)時(shí)戳稽,層與層之間的連接數(shù)會(huì)快速增長(zhǎng),這也使得計(jì)算變得更為復(fù)雜期升。為了解決這個(gè)問題惊奇,CNN便應(yīng)運(yùn)而成。
2. 卷積神經(jīng)網(wǎng)絡(luò) CNN
如果說神經(jīng)網(wǎng)絡(luò)是受生物大腦的神經(jīng)元啟發(fā)而設(shè)計(jì)出來的播赁,那么卷積神經(jīng)網(wǎng)絡(luò)則是受人類的視覺處理系統(tǒng)的啟發(fā)颂郎。
2.1 人類視覺系統(tǒng)
當(dāng)我們?nèi)祟愒诳吹揭粋€(gè)物體并進(jìn)行識(shí)別時(shí),我們的視覺系統(tǒng)主要經(jīng)過以下幾個(gè)處理步驟:
(1) 攝入原始信號(hào)容为,即瞳孔攝入像素Pixels
(2) 大腦中的V1區(qū)域進(jìn)行初步處理乓序,檢測(cè)物體的邊緣和方向
(3)大腦中的V2區(qū)域來判定物體的形狀
(4)大腦中的V4區(qū)域來進(jìn)行高層次的抽象,然后判定到底是什么物體
我們可以看到人類視覺是經(jīng)過這樣逐層分級(jí)來進(jìn)行認(rèn)知的坎背,那么我們可不可以模仿人類大腦的這個(gè)特點(diǎn)替劈,構(gòu)造一個(gè)多層的神經(jīng)網(wǎng)絡(luò),較低層的識(shí)別初級(jí)的圖像特征得滤,若干底層特征組成更上一層特征陨献,最終通過多個(gè)層級(jí)的組合,最終在頂層做出分類呢耿戚?答案是肯定的湿故,這便是CNN的靈感來源。
那么膜蛔,我們應(yīng)該怎樣來提取這些特征呢坛猪?答案便是使用卷積操作!
2.2 卷積
在傳統(tǒng)的圖像處理中皂股,用一個(gè)模板和一副圖像進(jìn)行進(jìn)行卷積墅茉,讓模板上的原點(diǎn)和圖像上的一點(diǎn)對(duì)齊,然后讓模板上的點(diǎn)和圖片上對(duì)應(yīng)的點(diǎn)相乘,然后將各個(gè)點(diǎn)的乘積相加就斤,就得到圖片上該點(diǎn)的卷積值悍募。圖像處理中常見的mask運(yùn)算都是卷積,廣泛應(yīng)用與圖像濾波洋机。例如下圖坠宴,我們使用卷積操作來對(duì)圖像進(jìn)行平滑操作,一個(gè)典型的8領(lǐng)域平滑绷旗,平滑后每個(gè)點(diǎn)的每個(gè)值都來自于原圖中對(duì)應(yīng)位置和其周邊8個(gè)元素與一個(gè)3X3的矩陣的卷積:
上圖中那個(gè)3X3的矩陣也稱為核喜鼓,這個(gè)核對(duì)圖像進(jìn)行操作,相當(dāng)于對(duì)圖像進(jìn)行了低通濾波衔肢。因此這個(gè)核也被稱為濾波器庄岖。而整個(gè)操作過程也稱作為卷積操作。
2.3 濾波器和卷積神經(jīng)網(wǎng)絡(luò)
那么這個(gè)濾波器和卷積神經(jīng)網(wǎng)絡(luò)存在什么樣的關(guān)系呢角骤?要理解兩者之間的關(guān)系隅忿,讓我們先假設(shè)一個(gè)問題,假設(shè)我們現(xiàn)在要識(shí)別圖像中某種特定的曲線邦尊,也就是我們?yōu)V波器要對(duì)這種曲線輸出很高背桐,而對(duì)其他形狀的曲線輸出很低,而這種效果就很類似于生物神經(jīng)元的激活胳赌。那這個(gè)問題要怎么解決呢牢撼?
(1) 首先,我們先設(shè)計(jì)濾波器和想要識(shí)別的曲線:
(2) 假設(shè)我們要在這張老鼠圖上識(shí)別這個(gè)特定的曲線疑苫,那么我們就讓濾波器在這張圖上移動(dòng)并求卷積:
(3) 那當(dāng)濾波器移動(dòng)到上圖右側(cè)那個(gè)位置時(shí)熏版,按照卷積操作,將濾波器的值和這部分圖像的像素值相乘相加捍掺,得到一個(gè)很大的值(6600)迷扇,那這說明這部分存在著我們要找的特定曲線:
(4) 當(dāng)濾波器移動(dòng)到其他位置時(shí)粪狼,便得到一個(gè)相對(duì)較小的值:
當(dāng)這個(gè)濾波器移動(dòng)完整張圖片的時(shí)候,我們就可以得到一個(gè)激活圖,其中草丧,激活圖上的值高的區(qū)域就代表這個(gè)位置有相應(yīng)的曲線辣卒,值比較低的區(qū)域就代表不存在這個(gè)曲線檬输。
而卷積神經(jīng)網(wǎng)絡(luò)的每一層就相當(dāng)于一系列的濾波器枚粘,第一層的濾波器用來檢測(cè)一些低階特征(邊、角蚊丐、方向等)熙参,隨著卷積層的增加,對(duì)應(yīng)層檢測(cè)到的特征就更加復(fù)雜麦备,比如孽椰,第二層的輸入其實(shí)是第一層的輸出(濾波器激活圖)昭娩,因此第二層便是檢測(cè)這些低階特征的組合情況(如半圓、四邊形等)黍匾,如此累積栏渺,因此可以檢測(cè)到越來越復(fù)雜的特征。而我們訓(xùn)練CNN锐涯,其實(shí)就是訓(xùn)練這些濾波器(weights)磕诊。
3. 完整的卷積神經(jīng)網(wǎng)絡(luò)
一個(gè)典型的神經(jīng)網(wǎng)絡(luò)是由卷積層、池化層和全連接層組成的纹腌。下面我們使用一個(gè)小例子秀仲,來看一下這三個(gè)層具體進(jìn)行了什么操作:
(1)卷積層
讓卷積核在整張圖片上移動(dòng),每次移動(dòng)進(jìn)行一個(gè)卷積操作壶笼,最終得到特征圖。
在CNN中雁刷,我們通常會(huì)在卷積層后邊加一個(gè)激活函數(shù)覆劈,來增加非線形因素,使得整個(gè)網(wǎng)絡(luò)的表達(dá)能力更強(qiáng)沛励。常見的激活函數(shù)有多種责语,在上一篇博客中我已經(jīng)進(jìn)行了詳細(xì)的分析,歡迎大家圍觀《細(xì)談激活函數(shù)》目派。一般在卷積網(wǎng)絡(luò)中較常使用的是ReLU函數(shù)坤候,我們將上述特征矩陣輸入ReLU函數(shù)便得到以下結(jié)果:
(2)池化層
從卷積操作的過程中,我們可以看出企蹭,當(dāng)Image的size增加時(shí)白筹,每層要進(jìn)行的卷積操作就會(huì)增加,這樣會(huì)使得計(jì)算量增加谅摄,為了有效的減少計(jì)算量徒河,CNN提出了另一個(gè)很有效的概念‘池化’。池化就是將輸入的圖像縮小送漠,減少像素點(diǎn)顽照,只保留比較重要的信息。常見的池化方式包括max-pooling(取區(qū)域內(nèi)的最大值)和mean-pooling(取區(qū)域內(nèi)的平均值)闽寡。我們使用2X2的池化區(qū)域?qū)ι鲜鰣D像進(jìn)行max-pooling可以得到以下結(jié)果:
對(duì)特征圖進(jìn)行max-pooling可以保留池化區(qū)域內(nèi)的最大值代兵,這就相當(dāng)于保留了這一塊的最佳匹配結(jié)果。而且從上圖可以看出爷狈,加入池化層減小了圖像的size植影,可以有效的減少計(jì)算量。
(3)全連接層
全連接層在整個(gè)卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用淆院,即通過卷積何乎、激活函數(shù)句惯、池化等深度網(wǎng)絡(luò)后,再經(jīng)過全連接層進(jìn)行識(shí)別分類支救。首先將經(jīng)過卷積抢野、激活函數(shù)、池化的深度網(wǎng)絡(luò)后得到的特征進(jìn)行flatten各墨,然后經(jīng)過全連接層指孤,最終得到分類結(jié)果:
通常,在全連接層的輸出之后也會(huì)使用一個(gè)激活函數(shù)贬堵,比如使用sigmoid函數(shù)恃轩,可以使得輸出值限制在(0,1)這個(gè)區(qū)間內(nèi)。