Lecture 7:Convolutional Neural Networks
1. 卷積神經(jīng)網(wǎng)絡(luò)的提出
1.1 全連接神經(jīng)網(wǎng)絡(luò)的缺點
? ? 我們在之前提到的神經(jīng)網(wǎng)絡(luò)是“全連接神經(jīng)網(wǎng)絡(luò)”(Fully Connected Network)。它的特點是層與層之間是完全連接的,這就導(dǎo)致了一個問題,參數(shù)特別多,我們用分辨率比較低的圖片還好,那種比較高清(1920*1080)的怎么辦?參數(shù)太多導(dǎo)致計算速度變慢,根本不能用,因此,我們迫切需要一種能減少計算方案,但是有不會降低準(zhǔn)確率太嚴(yán)重的辦法。
1.2 一個想法
? ? 參數(shù)太多怎么辦?砍啊,把網(wǎng)絡(luò)不全連接,改成一個稀疏的不就行了,但是怎么改?不能隨機(jī)刪吧,于是我們引入“卷積”這一操作,卷積在數(shù)學(xué)上是一個積分的形式,但是很顯然,咱們現(xiàn)在做的東西除了反向傳播沒連續(xù)的,下面簡單介紹一下哎卷積。
1.3 卷積神經(jīng)網(wǎng)絡(luò)中的卷積
? ? 卷積其實是一種比較簡單的運(yùn)算(當(dāng)然反向傳播就更麻煩了,對了,CNN的反向傳播,我就不做了【滑稽.jpg】,可以自己試試)。我們先簡單點的看一下卷積
其中
也就是

把一張圖片用卷積核過一遍,結(jié)果就是簡單的元素之間相乘之后相加。而且一個卷積核使用一組參數(shù)就把整張圖片處理一遍,極大的減少了使用的參數(shù)量。
1.4 邊緣檢測示例
? ? 這樣的操作有什么意義呢?我們看下面一個例子
我們可以看到,原始圖片的0和10的分界線,被我們的卷積核檢測出來了,相對的位置數(shù)值特別大,但是其他位置,數(shù)值相對較小。但是如果我們換一個卷積核呢?
我們更換卷積核之后發(fā)現(xiàn),生成的數(shù)字全是0。我們可以將第一個卷積核看作是一個垂直邊緣檢測器,第二個看作水平邊緣檢測器。這就是卷積的作用,很明顯,他對特征的處理還是比較到位的,甚至有點可解釋了,而相比較,全連接神經(jīng)網(wǎng)絡(luò)是完全不知道他在干什么。
2. 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
2.1 卷積層 Convolutional Layer
? ? 從名字就可以看出,卷積層就是執(zhí)行卷積操作的層。下面詳細(xì)介紹一下。
? ? 在我們?nèi)粘J褂弥?,圖片是以RGB三通道的形式存在的,比如一張1080的圖片,他其實是的矩陣,而顏色信息也很重要,畢竟物體識別什么的,肯定是要看顏色的,因此,我們自然可以聯(lián)想到,卷積核也是有三維的,比如說,我們使用一個
的卷積核去處理上述矩陣,最后會變成一個
的矩陣,但是就如上面的邊緣檢測示例,我們只用一個卷積核肯定是不夠的,一層只檢測一個垂直邊緣也太挫了,所以,我們在一層多放幾個卷積核,但是注意,這幾個卷積核是分別獨(dú)立的,他們各自使用自己的參數(shù)處理一遍圖片,各自得到一張圖片,然后,我們把這些圖片排成一列,比如說,我們用了32個過濾器,那么現(xiàn)在,我們的數(shù)據(jù)就是一個
的矩陣了。后一層如果還是卷積層的話,那么他的卷積核就必須是深度為32的,必須將上一層同一個位置的所有數(shù)據(jù)一起處理,這樣才能得到結(jié)果,卷積核如果深度不是完全覆蓋的話就沒有意義。想像一下,我上一個過濾器得出了一個位置有垂直線,水平線,那么我下一層的過濾器就可以組合出一個十字出來,如果深度方向割裂開,就會破壞這些關(guān)系,因此卷積層的不同卷積核深度就是輸入數(shù)據(jù)矩陣深度。
? ? 還有一個需要注意的地方就是步長,上面我們看到的卷積操作都是一步一步走的,其實,這是可以跳步走的,因此我們有一個步長,來控制這個問題。還有個問題,如果一張圖片橫向只有10個單位,我們使用大小為3的卷積核步長為3,最后剩下一部分怎么辦?我們可以填充,把這張圖片那些空缺的地方有一些數(shù)字填充,比如說0,這樣卷積操作就可以繼續(xù)下去了。
? ? 綜上所述,一個卷積層有連四個數(shù)字參數(shù):卷積核大小(filter),卷積核個數(shù)(通道數(shù))
(kernel),步長
(stride),填充大小
(padding)。
? ?權(quán)重數(shù)量:以上面的例子為例,參數(shù)一共有個(沒有計算偏置,卷積層也可以有那個
的
)
2.2 池化層 Pooling Layer
? ?池化層一定程度上是簡化的卷積層,卷積層是各元素之間相乘,池化層就是直接取最大值,或者取平均值。
? ?一開始我也沒注意,池化層是不改變深度的,只在二維平面上做操作。
? ?我一開始見到這種結(jié)構(gòu)感覺好奇怪,這種東西要它干什么用……再加一層卷積不得了?,F(xiàn)在看到的解釋是,可以進(jìn)一步減少參數(shù)量,同時可以進(jìn)一步提取feature,說了跟沒說一樣是吧……反正現(xiàn)在的網(wǎng)絡(luò)都會帶上pooling……就加上吧。
3.經(jīng)典網(wǎng)絡(luò)結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)那么多種層怎么用是個學(xué)問,其實這是個超參數(shù),不一定越深越好,淺了當(dāng)然也不行,我們看一些經(jīng)典的結(jié)構(gòu),以加深我們的了解。
3.1 LeNet-5

3.2 AlexNet

3.3 GoogleLeNet
這張圖輸入在下面。
GoogleLeNet由于我沒用過,所以了解不是很深,等有時間會出專題分析原論文。

3.4 VGGNet
VGGNet是為了驗證網(wǎng)絡(luò)深度對準(zhǔn)確度的影響而做的實驗,使用了五種網(wǎng)絡(luò),分別如下
我們可以看到,確實增加深度對網(wǎng)絡(luò)正確率有好的影響。

3.5 ResNet&DenseNet
這是我之前做的一個PPT,直接放上來了【滑稽.jpg】
ResNet應(yīng)該是Highway Network的簡化版本(我覺得是),Highway Network對于神經(jīng)網(wǎng)絡(luò)不同層之間的跳躍連接做了普遍的推導(dǎo)(所以我沒看下去,式子太多,對于一個淑芬60+的人我就不說什么了),感興趣的可以看一下。