天天看點

卷積神經網絡的特點和應用

英文名:convolutional neural network

是一種前饋神經網絡,即表明沒有環路,普通神經網絡的 BP 算法隻是用于友善計算梯度,也是前饋神經網絡。

是深度學習結構的一種,是一種深度、前饋神經網絡。

可以使用 BP 算法進行訓練

ConvNet architectures make the explicit assumption that the inputs are images, which allows us to encode certain properties into the architecture

卷積神經網絡的前提:輸入是二維結構或者三維結構,但起比較大作用的是空間次元(spacial),深度那一維并沒有太明顯的作用。

是寬和高,不包含深度

https://www.zhihu.com/question/22298352

這條知乎解釋得非常清楚!

卷積的離散和連續解釋,其實就是求和符号和積分符号換一下而已

CNN 中卷積的展現在于,在神經元的感受野裡的輸入和權重濾波器做點積,然後權重濾波器對整個輸入在空間次元上一邊移動一邊做點積,然後求和,是以跟一般的卷積是在時間上移動不同的是,這裡是在空間上移動。

卷積神經網絡的特點和應用

這是二維離散卷積的表達方式,因為權重濾波器是在空間上移動,空間上是有高和寬兩個次元的

濾波器是權重濾波器,是待學習的參數

輸出資料體才是卷積層神經元

不同的濾波器的權重不同,表達的是對圖檔要素的關注點不同,比如說如果某個濾波器對紅色敏感,即對于紅色的像素點會有正向輸出,那麼掃描一張大部分是紅色的圖檔的時候,該濾波器得到的 activation map 會有大面積的正向輸出。是以說,濾波器是不同的特征提取器。

濾波器在輸入資料體空間上移動,得到一張 activation map,多個濾波器(個數是超參數)都與輸入資料體進行卷積,會得到多張在深度方向上堆疊在一起的 activation maps,然後呢,下一層的濾波器會把這些 activation maps 的結果相結合作為輸入,而不是把一個濾波器在空間移動後的點積結果相加,因為濾波器在掃描完整個輸入體之後,得到的是一張 activation map,而不是一個值哦!所謂卷積中移動求和的概念,應該是展現在把點積的結果彙聚成一張 activation map,這也算是求了個和吧!然後一個卷積層的輸出就是多個 maps 在深度方向上的疊加。

一張 activation map 其實就是濾波器權重參數與小塊輸入的點積+偏置,然後組在一起!

activation map 其實是這樣的:

卷積神經網絡的特點和應用

如圖所示:28×28 個神經元的輸出,每個神經元都隻看它的感受野的輸入,每個神經元的權重和偏置相同。神經元的輸出也是 wx+b

上面的圖隻說明了一張 activation map,其實多張 activation maps 就是深度方向上堆疊在一起的神經元的輸出,隻不過深度方向上的神經元不會共享權重和偏置,但深度方向上重疊的神經元的感受野是一樣的。

卷積神經網絡的特點和應用

原始圖像假如是一個 32×32×3 的輸入資料體,經過一層卷積層的輸出(假設有 6 個 3×3×3 的濾波器 with pading1),則變成了一個 32326 的輸出資料體,也就是說,圖檔的表達由原來的輸入資料體來表達,變成了現在的輸出資料體來表達。

每一個卷積層的參數個數是(濾波器的感受野×輸入深度+1)×濾波器個數,比如濾波器的感受野是 3×3×3,個數是 6,則這一層卷積層的參數個數是(9+1)×6=60 個,其中加的那個 1 是偏置,也就是說一個輸出資料體的整個深度切片上的神經元共享同一個權重向量,和同一個偏置,不同的深度切片的權重和偏置不同

卷積層接受 W1×H1×D1 的輸入資料體(width, height, depth)

卷積層輸出 W2×H2×D2 的輸出資料體

需要 4 個超參數:K\F\S\P

K 代表濾波器個數,F 是神經元視野即濾波器大小,S 是 stride 步長,P 是 padding

根據超參數,可以由輸入資料體的大小,計算出輸出資料體的大小

W2=(W1-F+2P)/S+1

H2=(H1-F+2P)/S+1

D2=K

因為參數共享,是以總共有 F.F.D1.K 個權重和 K 個偏置參數

sc231n 視訊中補充了一些可以進行卷積層計算的 API,其中提到一些計算架構

Torch 是一個科學計算架構,内置大量的機器學習算法,GPU first 特性。LuaJIT 語言接口,底層是 C/CUDA 實作。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 是一個深度學習架構,Caffe -Caffe is a deep learning framework made with expression, speed, and modularity in mind

Lasagne 是 Theano 中的一個輕量級的庫,用于建立和訓練神經網絡

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

max pooling 和 average pooling 是兩種常見的方法

輸入的資料體是 W1×H1×D1,輸出資料體是 W2×H2×D2

超參數有兩個 F/S,F 是 spacial extent,S 是 stride 即步長

W2=(W1-F)/S+1

H2=(H1-F)/S+1

D2=D1

沒有參數,因為 pooling layer 計算的是 a fixed function of the input

對 pooling layers,不常用 zero padding

最後是一個 spacial size 減少,但深度依然是濾波器個數的全連接配接層,這一層的資料體會全部和輸出進行全連接配接

無論是教學視訊還是學習資料裡都提到了 ReLU 層,這其實讓人難以了解,至少給我帶來了困擾,因為 ReLU 隻不過是一種神經元激活函數而已,後來經過和大家的讨論,得出的結論是:其實就是卷積層的神經元的激活函數是 ReLU 函數而已,即 f(W×X+b) 中的 f,其中 W 和 X 之間是卷積而不是傳統 MLP 中的點積。

AlexNet -> ZFNet -> VGGNet -> GoogLeNet -> ResNet

目前的趨勢是使用更小的 filter 和更深的結構

另外一個趨勢是抛棄 pooling 和 FC 層,隻留下 CONV 層

根據另一個同學的學習結論,CNN 不但可以運用于圖像,還可以運用于 NLP 即自然語言處理,不過在卷積層的參數設定,以及池化層的參數設定上有些不同,如下圖所示。這是對自然語言語句進行二分類的 CNN 結構圖,論文是《ASensitiveAnalysisOfCNNForSentenceClassification》。

卷積神經網絡的特點和應用

①濾波器的空間視野,寬度需要與詞向量的長度一緻,高度可以自由調節,由高度的不同形成多個卷積層,同樣的高度下可以由濾波器個數這個超參數形成多個 activation maps

②圖中的步長為 1,是以綠色的高度為 3 的濾波器得到的 activation map 的高度就為 5,黃色的高度為 2 的濾波器得到的 activation map 的高度就為 6,這裡的圖像可以認為是側面視角,寬度與濾波器寬度一緻,看不到而已。

③池化層是 1-max pooling,即整張 activation map 中隻選擇一個最大值!是以從 6 張 activation map 中就産生了一個一進制的特征向量

④最後的 softmax 層就是把這個一進制的特征向量作為輸入,用來得到句子的類别

除了這些參數外,論文中還提出了一些有趣的結論,這裡不一一列舉,具體看論文:

①濾波器的視野(高度)選擇,最好選擇效果最好值的緊鄰值,比如說 7 效果最好,那麼就沒有必要嘗試 2,應該嘗試 6 和 8 作為下一個卷積層的視野高度

上一篇: CSS随筆