CNN及LeNet介紹

從神經網絡到卷積神經網絡(CNN)

我們知道神經網絡的結構是這樣的:

 

那捲積神經網絡跟它是什麼關係呢?
其實卷積神經網絡依舊是層級網絡,只是層的功能和形式做了變化,可以說是傳統神經網絡的一個改進。比如下圖中就多了許多傳統神經網絡沒有的層次。

 

定義

簡而言之,卷積神經網絡(Convolutional Neural Networks)是一種深度學習模型或類似於人工神經網絡的多層感知器,常用來分析視覺圖像。卷積神經網絡的創始人是着名的計算機科學家Yann LeCun,目前在Facebook工作,他是第一個通過卷積神經網絡在MNIST數據集上解決手寫數字問題的人。

 

卷積神經網絡的架構

 


如上圖所示,卷積神經網絡架構與常規人工神經網絡架構非常相似,特別是在網絡的最後一層,即全連接。此外,還注意到卷積神經網絡能夠接受多個特徵圖作爲輸入,而不是向量。

 

卷積神經網絡的層級結構

  • 數據輸入層/ Input layer
  • 卷積計算層/ CONV layer
  • ReLU激勵層 / ReLU layer
  • 池化層 / Pooling layer
  • 全連接層 / FC layer

1.數據輸入層

該層要做的處理主要是對原始圖像數據進行預處理,其中包括:

  • 去均值:把輸入數據各個維度都中心化爲0,如下圖所示,其目的就是把樣本的中心拉回到座標系原點上。
  • 歸一化:幅度歸一化到同樣的範圍,如下所示,即減少各維度數據取值範圍的差異而帶來的干擾,比如,我們有兩個維度的特徵A和B,A範圍是0到10,而B範圍是0到10000,如果直接使用這兩個特徵是有問題的,好的做法就是歸一化,即A和B的數據都變爲0到1的範圍。
  • PCA/白化:用PCA降維;白化是對數據各個特徵軸上的幅度歸一化

去均值與歸一化效果圖:

 

去相關與白化效果圖:

 

2.卷積計算層

這一層就是卷積神經網絡最重要的一個層次,也是“卷積神經網絡”的名字來源。
在這個卷積層,有兩個關鍵操作:

  • 局部關聯。每個神經元看做一個濾波器(filter)
  • 窗口(receptive field)滑動, filter對局部數據計算

先介紹卷積層遇到的幾個名詞:

  • 深度/depth(解釋見下圖)
  • 步長/stride (窗口一次滑動的長度)
  • 填充值/zero-padding

填充值是什麼呢?以下圖爲例子,比如有這麼一個5 * 5的圖片(一個格子一個像素),我們滑動窗口取2*2,步長取2,那麼我們發現還剩下1個像素沒法滑完,那怎麼辦呢?

 

那我們在原先的矩陣加了一層填充值,使得變成6*6的矩陣,那麼窗口就可以剛好把所有像素遍歷完。這就是填充值的作用。

 

卷積的計算(注意,下面藍色矩陣周圍有一圈灰色的框,那些就是上面所說到的填充值)


這裏的藍色矩陣就是輸入的圖像,粉色矩陣就是卷積層的神經元,這裏表示了有兩個神經元(w0,w1)。綠色矩陣就是經過卷積運算後的輸出矩陣,這裏的步長設置爲2。

 

藍色的矩陣(輸入圖像)對粉色的矩陣(filter)進行矩陣內積計算並將三個內積運算的結果與偏置值b相加(比如上面圖的計算:2+(-2+1-2)+(1-2-2) + 1= 2 - 3 - 3 + 1 = -3),計算後的值就是綠框矩陣的一個元素。

 

下面的動態圖形象地展示了卷積層的計算過程:

 

參數共享機制

  • 在卷積層中每個神經元連接數據窗的權重是固定的,每個神經元只關注一個特性。神經元就是圖像處理中的濾波器,比如邊緣檢測專用的Sobel濾波器,即卷積層的每個濾波器都會有自己所關注一個圖像特徵,比如垂直邊緣,水平邊緣,顏色,紋理等等,這些所有神經元加起來就好比就是整張圖像的特徵提取器集合。
  • 需要估算的權重個數減少: AlexNet 1億 => 3.5w
  • 一組固定的權重和不同窗口內數據做內積: 卷積

3.激勵層

把卷積層輸出結果做非線性映射。

 

 

CNN採用的激勵函數一般爲ReLU(The Rectified Linear Unit/修正線性單元),它的特點是收斂快,求梯度簡單,但較脆弱,圖像如下。

 

激勵層的實踐經驗:
①不要用sigmoid!不要用sigmoid!不要用sigmoid!
② 首先試RELU,因爲快,但要小心點
③ 如果2失效,請用Leaky ReLU或者Maxout
④ 某些情況下tanh倒是有不錯的結果,但是很少

4.池化層

池化層夾在連續的卷積層中間, 用於壓縮數據和參數的量,減小過擬合。
簡而言之,如果輸入是圖像的話,那麼池化層的最主要作用就是壓縮圖像

這裏再展開敘述池化層的具體作用。

  1. 特徵不變性,也就是我們在圖像處理中經常提到的特徵的尺度不變性,池化操作就是圖像的resize,平時一張狗的圖像被縮小了一倍我們還能認出這是一張狗的照片,這說明這張圖像中仍保留着狗最重要的特徵,我們一看就能判斷圖像中畫的是一隻狗,圖像壓縮時去掉的信息只是一些無關緊要的信息,而留下的信息則是具有尺度不變性的特徵,是最能表達圖像的特徵。
  2. 特徵降維,我們知道一幅圖像含有的信息是很大的,特徵也很多,但是有些信息對於我們做圖像任務時沒有太多用途或者有重複,我們可以把這類冗餘信息去除,把最重要的特徵抽取出來,這也是池化操作的一大作用。
  3. 在一定程度上防止過擬合,更方便優化。

     

     

    池化層用的方法有Max pooling 和 average pooling,而實際用的較多的是Max pooling。
    這裏就說一下Max pooling,其實思想非常簡單。

     


    對於每個2 * 2的窗口選出最大的數作爲輸出矩陣的相應元素的值,比如輸入矩陣第一個2 * 2窗口中最大的數是6,那麼輸出矩陣的第一個元素就是6,如此類推。

5.全連接層

兩層之間所有神經元都有權重連接,通常全連接層在卷積神經網絡尾部。也就是跟傳統的神經網絡神經元的連接方式是一樣的:

 

一般CNN結構依次爲

1.INPUT
2.[[CONV -> RELU]N -> POOL?]M
3.[FC -> RELU]*K
4.FC

卷積神經網絡之訓練算法

1.同一般機器學習算法,先定義Loss function,衡量和實際結果之間差距。
2.找到最小化損失函數的W和b, CNN中用的算法是SGD(隨機梯度下降)。

卷積神經網絡之優缺點

優點
  •共享卷積核,對高維數據處理無壓力
  •無需手動選取特徵,訓練好權重,即得特徵分類效果好
缺點
  •需要調參,需要大樣本量,訓練最好要GPU
  •物理含義不明確(也就說,我們並不知道沒個卷積層到底提取到的是什麼特徵,而且神經網絡本身就是一種難以解釋的“黑箱模型”)

卷積神經網絡之典型CNN

•LeNet,這是最早用於數字識別的CNN
•AlexNet, 2012 ILSVRC比賽遠超第2名的CNN,比
•LeNet更深,用多層小卷積層疊加替換單大卷積層。
•ZF Net, 2013 ILSVRC比賽冠軍
•GoogLeNet, 2014 ILSVRC比賽冠軍
•VGGNet, 2014 ILSVRC比賽中的模型,圖像識別略差於GoogLeNet,但是在很多圖像轉化學習問題(比如object detection)上效果奇好

重點介紹下LeNet

LeNet-5是Yann LeCun等人在多次研究後提出的最終卷積神經網絡結構,一般LeNet即指代LeNet-5。

LeNet-5包含七層,不包括輸入,每一層都包含可訓練參數(權重),當時使用的輸入數據是32*32像素的圖像。下面逐層介紹LeNet-5的結構,並且,卷積層將用Cx表示,子採樣層則被標記爲Sx,完全連接層被標記爲Fx,其中x是層索引。

層C1是具有六個5*5的卷積核的卷積層(convolution),特徵映射的大小爲28*28,這樣可以防止輸入圖像的信息掉出卷積核邊界。C1包含156個可訓練參數和122304個連接。

層S2是輸出6個大小爲14*14的特徵圖的子採樣層(subsampling/pooling)。每個特徵地圖中的每個單元連接到C1中的對應特徵地圖中的2*2個鄰域。S2中單位的四個輸入相加,然後乘以可訓練係數(權重),然後加到可訓練偏差(bias)。結果通過S形函數傳遞。由於2*2個感受域不重疊,因此S2中的特徵圖只有C1中的特徵圖的一半行數和列數。S2層有12個可訓練參數和5880個連接。

層C3是具有16個5-5的卷積核的卷積層。前六個C3特徵圖的輸入是S2中的三個特徵圖的每個連續子集,接下來的六個特徵圖的輸入則來自四個連續子集的輸入,接下來的三個特徵圖的輸入來自不連續的四個子集。最後,最後一個特徵圖的輸入來自S2所有特徵圖。C3層有1516個可訓練參數和156 000個連接。

層S4是與S2類似,大小爲2*2,輸出爲16個5*5的特徵圖。S4層有32個可訓練參數和2000個連接。

層C5是具有120個大小爲5*5的卷積核的卷積層。每個單元連接到S4的所有16個特徵圖上的5*5鄰域。這裏,因爲S4的特徵圖大小也是5*5,所以C5的輸出大小是1*1。因此S4和C5之間是完全連接的。C5被標記爲卷積層,而不是完全連接的層,是因爲如果LeNet-5輸入變得更大而其結構保持不變,則其輸出大小會大於1*1,即不是完全連接的層了。C5層有48120個可訓練連接。

F6層完全連接到C5,輸出84張特徵圖。它有10164個可訓練參數。這裏84與輸出層的設計有關。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章