卷積神經網路原理

卷積神經網路原理

貼一下我們討論班的CNNPPT

第一章先簡單的介紹一下卷積神經網路是什麼,讓大家有一個大概的認識

這裡默認大家對神經網路已經有了了解

其實這些應用歸根到底還是分類,CNN在分類任務上面有著很不錯的表現。

這一章我們要詳細的講一下卷積神網路的模型結構,探索一下什麼是卷積,卷積神經網路和傳統神經網路有什麼不同

此處動圖效果不顯示,其實卷積是圖像處理的一種基本操作,在通訊原理,多項式,微積分,物理科學等領域中都有用到。另外GPU處理卷積的速度非常快,適合做並行處理。其實卷積的過程就是拿著一個卷積核在圖片上面劃拉,並對卷積核與圖像重合的部分相乘再累加。對於沒有重疊的部分,可以認為是乘以0

卷積分為寬卷積,等卷積和窄卷積,顧名思義就是卷積的結果相比於原始矩陣的大小,寬卷積就是比原始矩陣大,窄卷積就是比原始矩陣小。

裡面其實是個動圖,可以在網上找到,這裡不單獨貼上去了。

吐過卷積,可以產生不同的效果。

如果擴大卷積核,並且適當調整卷積核的權值,可以得到更加精細美觀的畫面,我們手機中的有一些圖像效果就是通過卷積操作來實現的

和全連接網路不同,局部感受野就是後面的神經元只連接前面那一層的一部分神經元,通常是一個n*n的區域。這樣做是有科學依據的,在對人眼的研究中,發現人眼的一個神經元只感知一小塊的圖像,人看到的圖像就是很多小圖像經過經過幾層神經元的整合處理後的圖像。這樣很大程度上減少了連接權值,並且降低了計算量。

權值共享就是後面每個神經元的這100個參數是相同的,(每個神經元都有100個不同的參數,不同神經元之間這一百個參數是相同的,也就是說每個神經元用的是同一個卷積核去卷積圖像)。權值共享的含義就是你可以拿個特徵過濾器在整個圖像上面劃拉,去尋找這個濾波器所表示的特徵。局部感知+權值共享契合卷積的過程,卷積核的大小和局部感知區域的大小一樣,權值共享可以讓你拿著同一個卷積核去整個圖像上滑動著找特徵,和卷積的過程一樣。這一百個權值就是卷積核裡面的權值,不過這個過程還有點模式匹配的感覺。

舉個例子(可能不太恰當),想分辨一張圖片是不是人,我們先拿一個過濾鼻子特徵的卷積核去找圖像裡面有沒有鼻子的特徵,找完鼻子這個特徵之後,僅靠有沒有鼻子的特徵還不能分辨圖像裡面的到底是不是人,那我們就需要再拿一個過濾嘴這個特徵的卷積核再去「看一遍」這個圖像,等你用了足夠多的卷積核,找到了足夠多的特徵之後才能判斷這個圖像到底是不是人。

卷積定義:不同的學科領域定義不是完全一樣

卷積過程:可以簡單的理解為卷積核在被卷積矩陣上面劃拉

卷積作用:銳化浮雕等,我們這裡用來提取特徵

局部感受:就是卷積核大小

權值共享:卷積和滑動的結果

多卷積核:多方面的特徵

局部感受+權值共享=卷積操作

優點:計算快,有生物學理論依據,

上圖展示了在四個通道上的卷積操作,有兩個卷積核,生成兩個通道

多說一點,上面的方式太過粗糙了,統一用一個卷積核對三個通道進行卷積會損失一些通道信息,通常不用那個方法。所以我們每個通道都用一個「卷積核」來進行卷積,然後把各個通道卷積的結果相加得到最終結果。分別卷積這三個通道的卷積核代表一個卷積核,這個下面會講。

雖然前面的步驟已經簡化了很多計算,但是這樣還不夠。在得到特徵圖之後,我們還要對相鄰區域上的特徵點進行聚合統計。就是取一個邊長為n的正方形區域的平均值 (或最大值)。

這樣做還有另外的原因,首先就是實現圖片的「靜態性」。這裡所說的「靜態性」就是圖像平移,旋轉等的不變性。即若對某個區域做了池化,即使圖像平移/旋轉幾個像素,得到的輸出值也基本一樣,因為每次最大值運算得到的結果總是一樣的。

另外就是防止過擬合,因為神經網路記不住原來的特徵結果了。

這個過程也是去除多餘的無用信息,保留關鍵的有用信息的過程,起到了信息篩選的作用。

層數不多怎麼能叫深度學習呢,哈哈

上面這張圖基本上就反應出來了卷積神經網路的計算過程了

這個卷積神經網路旨在說明計算過程,並沒有進行過實際的實驗

論文Notes on Convolutional Neural Networks中,池化之前輸入激活函數的時候,每個特徵圖都有一個乘性偏置β和一個加性偏置b,也給出了這兩個變數的調整公式,但是代碼中的結構並沒有出現β這個參數,而是卷積核變成了以前的N倍,N是上一層特徵圖的數量,這裡我的理解是代碼中的CNN結構對論文裡面的結構進行了改進,原因是多用幾個卷積核可以更好地描述卷積結果和輸出的非線性關係,而β只能描述卷積結果和輸出的線性關係,並且β也只是卷積核成比例的時候的一種特例,所以用多個卷積核可以進行更好地擬合。

另外,用多個卷積核還省了一步求導過程,使得計算過程變得簡單了很多。最後對這些卷積核參數的梯度計算,也就相當於卷積的逆過程,歸根到底還是卷積操作,而GPU對卷積操作是非常快的,可以通過GPU加速來加快訓練過程,這樣雖然訓練參數增減了,但是訓練速度反而也增加了

訓練過程和普通的反向傳播沒什麼區別,就是對卷積層的反向傳播比較特殊,也是可以由卷積來實現的。

機器學習的三要素是:模型,策略和演算法。

對於卷積神經網路來說,

模型:傳統神經網路加卷積操作

策略:損失函數,和普通的神經網路類似

演算法:梯度下降演算法,多了一個卷積的「逆3操作」

現在單純的卷積神經網路已經是爛大街的東西了,需要與其他模型結合才更有生命力

因為一個詞是不能被拆開的,所以卷積核的寬度要和詞向量一樣寬

注意這裡的一般用最大值池化,原因下面會講

得到特徵向量之後就要做池化操作,這裡池化一般用最大值池化,並且每一個特徵圖都只輸出一個池化後的值。因為文本的長度一般是不固定的,這就導致特徵圖的大小也是不固定的,這就給後面的分類帶來了很多麻煩,所以如果每個卷積核最後只輸出一個值的話,那麼不關卷積核的尺寸是多大,輸入矩陣的維度如何變化,總是能夠得到一個和卷積核種類個數相同大小的輸出結果,然後傳入下一層的分類器。因為分類器無法對變長的特徵進行分類。

代碼部分就自己看吧,因為TensorFlow版本升級,一年前的代碼可能在新版本的TensorFlow上面運行會有一些問題,但是就是一些函數搬家,或者改名,網上一查就能查到。

????

D??+

ark-srD??

推薦閱讀:

談談神經網路的deep和shallow
機器學習讀書筆記:模型評估與選擇
歸一化 正則化 標準化
自然語言處理(NLP)數據集整理

TAG:深度學習DeepLearning | 機器學習 | 卷積神經網路CNN |