1. 概念
英文名:convolutional neural network
是一種前饋神經(jīng)網(wǎng)絡(luò),即表明沒有環(huán)路,普通神經(jīng)網(wǎng)絡(luò)的 BP 算法只是用于方便計(jì)算梯度,也是前饋神經(jīng)網(wǎng)絡(luò)。
是深度學(xué)習(xí)結(jié)構(gòu)的一種,是一種深度、前饋神經(jīng)網(wǎng)絡(luò)。
可以使用 BP 算法進(jìn)行訓(xùn)練
ConvNet architectures make the explicit assumption that the inputs are images, which allows us to encode certain properties into the architecture
卷積神經(jīng)網(wǎng)絡(luò)的前提:輸入是二維結(jié)構(gòu)或者三維結(jié)構(gòu),但起比較大作用的是空間維度(spacial),深度那一維并沒有太明顯的作用。
1.1 空間維度 spacial
是寬和高,不包含深度
1.2 什么是卷積
https://www.zhihu.com/question/22298352
這條知乎解釋得非常清楚!
卷積的離散和連續(xù)解釋,其實(shí)就是求和符號(hào)和積分符號(hào)換一下而已
CNN 中卷積的體現(xiàn)在于,在神經(jīng)元的感受野里的輸入和權(quán)重濾波器做點(diǎn)積,然后權(quán)重濾波器對(duì)整個(gè)輸入在空間維度上一邊移動(dòng)一邊做點(diǎn)積,然后求和,所以跟一般的卷積是在時(shí)間上移動(dòng)不同的是,這里是在空間上移動(dòng)。
這是二維離散卷積的表達(dá)方式,因?yàn)闄?quán)重濾波器是在空間上移動(dòng),空間上是有高和寬兩個(gè)維度的
1.3 濾波器和輸出數(shù)據(jù)體
濾波器是權(quán)重濾波器,是待學(xué)習(xí)的參數(shù)
輸出數(shù)據(jù)體才是卷積層神經(jīng)元
不同的濾波器的權(quán)重不同,表達(dá)的是對(duì)圖片要素的關(guān)注點(diǎn)不同,比如說如果某個(gè)濾波器對(duì)紅色敏感,即對(duì)于紅色的像素點(diǎn)會(huì)有正向輸出,那么掃描一張大部分是紅色的圖片的時(shí)候,該濾波器得到的 activation map 會(huì)有大面積的正向輸出。所以說,濾波器是不同的特征提取器。
1.4 卷積層的輸出
濾波器在輸入數(shù)據(jù)體空間上移動(dòng),得到一張 activation map,多個(gè)濾波器(個(gè)數(shù)是超參數(shù))都與輸入數(shù)據(jù)體進(jìn)行卷積,會(huì)得到多張?jiān)谏疃确较蛏隙询B在一起的 activation maps,然后呢,下一層的濾波器會(huì)把這些 activation maps 的結(jié)果相結(jié)合作為輸入,而不是把一個(gè)濾波器在空間移動(dòng)后的點(diǎn)積結(jié)果相加,因?yàn)闉V波器在掃描完整個(gè)輸入體之后,得到的是一張 activation map,而不是一個(gè)值哦!所謂卷積中移動(dòng)求和的概念,應(yīng)該是體現(xiàn)在把點(diǎn)積的結(jié)果匯聚成一張 activation map,這也算是求了個(gè)和吧!然后一個(gè)卷積層的輸出就是多個(gè) maps 在深度方向上的疊加。
一張 activation map 其實(shí)就是濾波器權(quán)重參數(shù)與小塊輸入的點(diǎn)積+偏置,然后組在一起!
activation map 其實(shí)是這樣的:
如圖所示:28×28 個(gè)神經(jīng)元的輸出,每個(gè)神經(jīng)元都只看它的感受野的輸入,每個(gè)神經(jīng)元的權(quán)重和偏置相同。神經(jīng)元的輸出也是 wx+b
上面的圖只說明了一張 activation map,其實(shí)多張 activation maps 就是深度方向上堆疊在一起的神經(jīng)元的輸出,只不過深度方向上的神經(jīng)元不會(huì)共享權(quán)重和偏置,但深度方向上重疊的神經(jīng)元的感受野是一樣的。
1.5 圖片的表達(dá)轉(zhuǎn)換
原始圖像假如是一個(gè) 32×32×3 的輸入數(shù)據(jù)體,經(jīng)過一層卷積層的輸出(假設(shè)有 6 個(gè) 3×3×3 的濾波器 with pading1),則變成了一個(gè) 32326 的輸出數(shù)據(jù)體,也就是說,圖片的表達(dá)由原來的輸入數(shù)據(jù)體來表達(dá),變成了現(xiàn)在的輸出數(shù)據(jù)體來表達(dá)。
1.6 參數(shù)的個(gè)數(shù)
每一個(gè)卷積層的參數(shù)個(gè)數(shù)是(濾波器的感受野×輸入深度+1)×濾波器個(gè)數(shù),比如濾波器的感受野是 3×3×3,個(gè)數(shù)是 6,則這一層卷積層的參數(shù)個(gè)數(shù)是(9+1)×6=60 個(gè),其中加的那個(gè) 1 是偏置,也就是說一個(gè)輸出數(shù)據(jù)體的整個(gè)深度切片上的神經(jīng)元共享同一個(gè)權(quán)重向量,和同一個(gè)偏置,不同的深度切片的權(quán)重和偏置不同
1.7 卷積層總結(jié)
卷積層接受 W1×H1×D1 的輸入數(shù)據(jù)體(width, height, depth)
卷積層輸出 W2×H2×D2 的輸出數(shù)據(jù)體
需要 4 個(gè)超參數(shù):K\F\S\P
K 代表濾波器個(gè)數(shù),F(xiàn) 是神經(jīng)元視野即濾波器大小,S 是 stride 步長(zhǎng),P 是 padding
根據(jù)超參數(shù),可以由輸入數(shù)據(jù)體的大小,計(jì)算出輸出數(shù)據(jù)體的大小
W2=(W1-F+2P)/S+1
H2=(H1-F+2P)/S+1
D2=K
因?yàn)閰?shù)共享,因此總共有 F.F.D1.K 個(gè)權(quán)重和 K 個(gè)偏置參數(shù)
1.8 補(bǔ)充
sc231n 視頻中補(bǔ)充了一些可以進(jìn)行卷積層計(jì)算的 API,其中提到一些計(jì)算框架
Torch 是一個(gè)科學(xué)計(jì)算框架,內(nèi)置大量的機(jī)器學(xué)習(xí)算法,GPU first 特性。LuaJIT 語言接口,底層是 C/CUDA 實(shí)現(xiàn)。Torch – provides a Matlab-like environment for state-of-the-art machine learning algorithms in lua (from Ronan Collobert, Clement Farabet and Koray Kavukcuoglu)
Caffe 是一個(gè)深度學(xué)習(xí)框架,Caffe -Caffe is a deep learning framework made with expression, speed, and modularity in mind
Lasagne 是 Theano 中的一個(gè)輕量級(jí)的庫,用于建立和訓(xùn)練神經(jīng)網(wǎng)絡(luò)
Theano – CPU/GPU symbolic expression compiler in python (from MILA lab at University of Montreal)。Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently
2. 池化層 pooling layer
max pooling 和 average pooling 是兩種常見的方法
輸入的數(shù)據(jù)體是 W1×H1×D1,輸出數(shù)據(jù)體是 W2×H2×D2
超參數(shù)有兩個(gè) F/S,F(xiàn) 是 spacial extent,S 是 stride 即步長(zhǎng)
W2=(W1-F)/S+1
H2=(H1-F)/S+1
D2=D1
沒有參數(shù),因?yàn)?pooling layer 計(jì)算的是 a fixed function of the input
對(duì) pooling layers,不常用 zero padding
3. full connecting layer
最后是一個(gè) spacial size 減少,但深度依然是濾波器個(gè)數(shù)的全連接層,這一層的數(shù)據(jù)體會(huì)全部和輸出進(jìn)行全連接
4. ReLU 層
無論是教學(xué)視頻還是學(xué)習(xí)資料里都提到了 ReLU 層,這其實(shí)讓人難以理解,至少給我?guī)砹死_,因?yàn)?ReLU 只不過是一種神經(jīng)元激活函數(shù)而已,后來經(jīng)過和大家的討論,得出的結(jié)論是:其實(shí)就是卷積層的神經(jīng)元的激活函數(shù)是 ReLU 函數(shù)而已,即 f(W×X+b) 中的 f,其中 W 和 X 之間是卷積而不是傳統(tǒng) MLP 中的點(diǎn)積。
5. case study
AlexNet -> ZFNet -> VGGNet -> GoogLeNet -> ResNet
6. 趨勢(shì)
目前的趨勢(shì)是使用更小的 filter 和更深的結(jié)構(gòu)
另外一個(gè)趨勢(shì)是拋棄 pooling 和 FC 層,只留下 CONV 層
7. 討論
根據(jù)另一個(gè)同學(xué)的學(xué)習(xí)結(jié)論,CNN 不但可以運(yùn)用于圖像,還可以運(yùn)用于 NLP 即自然語言處理,不過在卷積層的參數(shù)設(shè)置,以及池化層的參數(shù)設(shè)置上有些不同,如下圖所示。這是對(duì)自然語言語句進(jìn)行二分類的 CNN 結(jié)構(gòu)圖,論文是《ASensitiveAnalysisOfCNNForSentenceClassification》。
①濾波器的空間視野,寬度需要與詞向量的長(zhǎng)度一致,高度可以自由調(diào)節(jié),由高度的不同形成多個(gè)卷積層,同樣的高度下可以由濾波器個(gè)數(shù)這個(gè)超參數(shù)形成多個(gè) activation maps
②圖中的步長(zhǎng)為 1,因此綠色的高度為 3 的濾波器得到的 activation map 的高度就為 5,黃色的高度為 2 的濾波器得到的 activation map 的高度就為 6,這里的圖像可以認(rèn)為是側(cè)面視角,寬度與濾波器寬度一致,看不到而已。
③池化層是 1-max pooling,即整張 activation map 中只選擇一個(gè)最大值!因此從 6 張 activation map 中就產(chǎn)生了一個(gè)一元的特征向量
④最后的 softmax 層就是把這個(gè)一元的特征向量作為輸入,用來得到句子的類別
除了這些參數(shù)外,論文中還提出了一些有趣的結(jié)論,這里不一一列舉,具體看論文:
①濾波器的視野(高度)選擇,最好選擇效果最好值的緊鄰值,比如說 7 效果最好,那么就沒有必要嘗試 2,應(yīng)該嘗試 6 和 8 作為下一個(gè)卷積層的視野高度
評(píng)論
查看更多