小學(xué)三年級必修課《卷積神經(jīng)網(wǎng)絡(luò)(CNN)卷在哪里?》

今天的主題是卷積神經(jīng)網(wǎng)絡(luò)(與之相對的是全鏈接神經(jīng)網(wǎng)絡(luò)),一起來看看它為何能夠成功地用在圖像識別領(lǐng)域。公式有點(diǎn)少,配圖有點(diǎn)多,擁有小學(xué)三年級的基礎(chǔ)知識就能看懂。
1. 生物神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是一種仿生模型,因此先帶大家了解一下生物神經(jīng)元
的結(jié)構(gòu)與工作原理,如下圖神經(jīng)元所示:

一個(gè)神經(jīng)元是一個(gè)可以接收、發(fā)射脈沖信號的細(xì)胞。在細(xì)胞體
(核心)之外有樹突
與軸突
,樹突接收其它神經(jīng)元的脈沖信號, 而軸突將神經(jīng)元的輸出脈沖傳遞給其它神經(jīng)元。 一個(gè)神經(jīng)元傳遞給不同神經(jīng)元的輸出是相同的,并且在突觸
部分發(fā)生信息的交換傳遞。
無數(shù)個(gè)生物神經(jīng)元的組合就形成了生物神經(jīng)網(wǎng)絡(luò),具備了處理復(fù)雜信息的能力。

2. 人工神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)模仿了生物神經(jīng)網(wǎng)絡(luò)的工作原理,對應(yīng)的形式在下圖中列舉了出來:

輸入變量先后經(jīng)過加權(quán)求和與非線性變換之后得到輸出。
大多數(shù)時(shí)候?yàn)榱吮WC數(shù)據(jù)的合理性(如非負(fù)性)會引入偏差參與計(jì)算。

在整個(gè)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中,我們所要做的就是確定上圖中的那些權(quán)重參數(shù)(w)與偏差參數(shù)(b)。當(dāng)然,激活函數(shù)f(x)?的選擇也非常重要。
我們?yōu)槭裁匆?jīng)歷激活函數(shù)這一步?
可以看出加權(quán)和是線性運(yùn)算,假設(shè)如下圖所示去掉了激活函數(shù)這一步。當(dāng)神經(jīng)元組網(wǎng)后,無論多少個(gè)線性運(yùn)行疊加后都是線性的,也就失去了深層神經(jīng)網(wǎng)絡(luò)的意義,因此需要非線性的激活函數(shù)來增加非線性。

一個(gè)神經(jīng)元的功能其實(shí)就是求得輸入向量與權(quán)向量的內(nèi)積后,經(jīng)一個(gè)非線性傳遞函數(shù)得到一個(gè)標(biāo)量結(jié)果。多個(gè)神經(jīng)元連接起來,就形成了類似大腦的神經(jīng)網(wǎng)絡(luò)。如下圖:

通常一個(gè)完整的神經(jīng)網(wǎng)絡(luò)包含三個(gè)部分:
輸入層
隱藏層
輸出層
本文所說的卷積神經(jīng)網(wǎng)絡(luò)
(Convolutional Neural Network,?CNN)就是一種用卷積運(yùn)算代替了上述矩陣乘法(加權(quán)和)的神經(jīng)網(wǎng)絡(luò),這種體代可以是全部的,也可以是部分的。
3. 卷積神經(jīng)網(wǎng)絡(luò) CNN
CNN為什么會產(chǎn)生?為什么CNN被廣泛應(yīng)用于圖像識別?
當(dāng)使用全連接的神經(jīng)網(wǎng)絡(luò)時(shí),因?yàn)橄噜弮蓪又g的神經(jīng)元都是有邊相連的,當(dāng)輸入層的特征維度非常高時(shí)(如圖片),全連接網(wǎng)絡(luò)需要被訓(xùn)練的參數(shù)就會非常多,導(dǎo)致訓(xùn)練效率低下,而CNN可以通過訓(xùn)練少量的參數(shù)從而進(jìn)行特征提取。
圖圖將按下圖所示順序介紹CNN的結(jié)構(gòu):

3.1 輸入層
輸入層通常是一張圖片的RGB三個(gè)通道的圖像:

3.2 卷積層(CONV)
卷積層就是用來提取圖像的特征的,它是識別圖像最核心的部分;不同的卷積核可以得到不同的特征;如下圖所示,該卷積核提取到了邊緣特征。
假設(shè)我們現(xiàn)在有一張m^2(m=8)大小的圖像(下圖左),并有一個(gè)大小是n^2(n=3)的卷積核(下圖中)。我們讓這個(gè)卷積核在圖片上滑行,從左上角開始一行一行滑動(dòng),每次滑動(dòng)步長為1,每一次滑動(dòng)都會對應(yīng)圖片上的9個(gè)像素,讓卷積核中的數(shù)字與圖片中對應(yīng)的像素值先相乘再相加得到一個(gè)新數(shù)值(卷積),最后得到一個(gè)新的圖片(下圖右)。
特別地,卷積后得到的圖片大小是(m-n+1)(m-n+1)。

可以看出。卷積核這一結(jié)構(gòu)使得卷積神經(jīng)網(wǎng)絡(luò)能夠利用輸入圖像數(shù)據(jù)的二維結(jié)構(gòu)。

3.3 激活層(ReLU)
激活層主要對卷積層的輸出進(jìn)行一個(gè)非線性映射,在CNN中一般為ReLU函數(shù)
。

ReLU函數(shù)保留大于0的值,即保留特征比較好的值,將特征小于0的值舍去(從下圖的對比中可以看出一些不重要的細(xì)節(jié)特征都被舍去啦)。這對于圖像來說也具有另外的實(shí)際意義:從卷積層計(jì)算得來的RGB數(shù)據(jù)可能是負(fù)值,經(jīng)過ReLU函數(shù)之后可以全部變?yōu)楹侠淼腞GB值。

至于為什么要進(jìn)行非線性映射,前文已經(jīng)提到過是為了使得多層的神經(jīng)網(wǎng)絡(luò)具有實(shí)際意義,否則無論多少層線性的映射最終都會與單層的感知機(jī)等效。我們現(xiàn)在來看一下為什么引入ReLU函數(shù)而不是sigmoid等其它函數(shù)。
1 采用sigmoid等函數(shù),反向傳播求誤差梯度時(shí),求導(dǎo)涉及除法,計(jì)算量大;而采用ReLU激活函數(shù),整個(gè)過程的計(jì)算量節(jié)省很多。
2 對于深層網(wǎng)絡(luò),sigmoid函數(shù)反向傳播時(shí),很容易就會出現(xiàn)梯度消失的情況(在sigmoid接近飽和區(qū)時(shí),變換太緩慢,導(dǎo)數(shù)趨于0,這種情況會造成信息丟失,從而無法完成深層網(wǎng)絡(luò)的訓(xùn)練。
3 ReLU會使一部分神經(jīng)元的輸出為0,減少了參數(shù)的相互依存關(guān)系,緩解了過擬合問題的發(fā)生。
3.4 池化層(POOL)
池化過程在一般在卷積和激勵(lì)過程之后進(jìn)行。池化的本質(zhì),其實(shí)就是降采樣(subsampling),或者說對輸入的圖像數(shù)據(jù)進(jìn)行降維壓縮,以加快運(yùn)算速度。?這樣也能夠很大程度避免過擬合的發(fā)生,提高神經(jīng)網(wǎng)絡(luò)的泛化能力。
我們?yōu)槭裁纯梢赃M(jìn)行池化??圖像中的相鄰像素傾向于具有相似的值,因此通常卷積層相鄰的輸出像素也具有相似的值。這意味著,卷積層輸出中包含的大部分信息都是冗余的。池化層解決了這個(gè)問題。這個(gè)層所做的就是通過減小輸入的大小降低輸出值的數(shù)量。

池化一般通過簡單的最大值、最小值或平均值操作完成。以下是池大小為2*2的最大池化層的示例:

進(jìn)行上述的池化后,可以將輸入數(shù)據(jù)變?yōu)樵紨?shù)據(jù)的25%大小。再如下圖的池化結(jié)果(為1/9的池化)

3.5 全連接層(Full Connection)
全連接層的作用,就是將前面經(jīng)過卷積以及池化后高度抽象化的特征進(jìn)行整合,然后可以進(jìn)行歸一化,對各種分類情況都輸出一個(gè)概率,之后可以根據(jù)全連接得到的概率進(jìn)行分類。
在完成池化之后,輸出還是二維的圖像數(shù)據(jù),我們需要利用Flatten
操作將二維數(shù)據(jù)展平為一維數(shù)據(jù)。

3.6 輸出層(OUTPUT)
全連接層的下一層就是網(wǎng)絡(luò)的輸出層,輸出結(jié)果通常是圖像屬于某個(gè)分類的概率。
全文結(jié)束
查看個(gè)人主頁獲得更多作品