2019年7月26日 星期五

學習經典卷積神經網路一 (LeNet、AlexNet、VGGNet)

說明

簡單紀錄以下幾個經典卷積神經網路 ( AlexNet 、 VGGNet 、 Google Inception Net 、 ResNet ) 的概念及創新技術點。下圖為他們出現的順序及時間,其中AlexNet的出現為整個CNN的發展,帶來相當重大的一個突破。



並且它們分別在 ILSVRC ( ImageNet Large Scale Visual Recognition Challenge ) 比賽項目中取得如下的成就:
  1. AlexNet - 2012年冠軍 ( top-5 錯誤率 16.4%,使用額外資料可達15.3%,8層神經網路)
  2. VGGNet - 2014 年亞軍 ( top-5 錯誤率7.3%,19層神經網路 ) 
  3. Google Inception Net - 2014 年冠軍 ( top-5 錯誤率 6.7%,22層神經網路 ) 
  4. ResNet - 2015 年的冠軍 ( top-5 錯誤率 3.57% ,152 層神經網路 )

ILSVRC 的 top-5 錯誤率在最近幾年取得重大突破,而主要的突破點都是在深度學習和卷積神經網路,成績的大幅提升幾乎都伴隨著卷積神經網路的層數加深。目前在 ImageNet50 資料集上人眼能夠達到的錯誤率大約在 5.1%,而 ILSVRC 2015年冠軍 ResNet  (152層 ) 的成績已能夠達到錯誤率 3.57%。代表神經網路已基本解決了 ImageNet 資料集上的圖片分類問題。

「ILSVRC 層數」的圖片搜尋結果


LeNet (論文連結)

1998年,由電腦科學家Yann LeCun等提出的LeNet5採用了基於梯度的反向傳播演算法對網路進行有監督的訓練,Yann LeCun在機器學習、計算機視覺等都有傑出貢獻,被譽為卷積神經網路之父。 
LeNet5網路通過交替連接的卷積層 (Convolutions) 和池化層 (Subsampling),將原始影像逐漸轉換為一系列的特徵,之後再將這些特徵傳遞給全連接層 (Full Connection) 進行分類,並成功應用於手寫體識別。學術界對於卷積神經網路的關注,也正是開始於LeNet5網路的提出。LeNet網路架構如下。




卷積神經網路的特點在於 區域性連線 (Local Receptive Field)、權值共享 (Shared Weights)。
(1) 區域性連線 (Local Receptive Field)卷積網路的節點僅和其前一層的部分節點相連線,只用來學習區域性特徵。區域性感知結構的構思理念來源於動物視覺的皮層結構,其指的是動物視覺的神經元在感知外界物體的過程中起作用的只有一部分神經元。在計算機視覺中,影象中的某一塊區域中,畫素之間的相關性與畫素之間的距離同樣相關,距離較近的畫素間相關性強,距離較遠則相關性就比較弱,由此可見區域性相關性理論也適用於計算機視覺的影象處理領域。這種區域性連線的方式大幅減少了引數數量,加快了學習速率,同時也在一定程度上減少了過擬合的可能。


(2) 權值共享 (Shared Weights) 在卷積神經網路中,神經元對應的權值是相同的。由於權值相同,因此可以減少訓練的引數量。共享的權值和偏置也被稱作卷積核。

(3) 池化 (Pooling) - 池化層是卷積神經網路中另一個重要的概念,它實際上是一種形式的降採樣。透過將鄰近的區域內的特徵點整合得到新的特徵,用更高層的抽象表示圖像特徵達到降低維度的結果。並且因為區域降維的關係,具有對鄰近小區域抗干擾的能力。同時也減少了過度擬合 (over-fitting) 的情況。目前常見的作法有 mean-pooling、max-pooling和stochastic-pooling等三種,其中又以最大池化層 (Max-pooling) 最為常見。

AlexNet 

由深度學習大神 Hinton 的學生 Alex 於 2012年提出的深度卷積神經網路模型 AlexNet,將 LeNet 模型的思想發揚光大,把 CNN 的基本原理應用到了很深很寬的網路中。AlexNet 使用到的新技術點如下:

(1) ReLU - AlexNet成功使用 ReLU 作為 CNN 的啟動函數,並驗證其效果在較深的網路超過了 Sigmoid,成功解決了 Sigmoid 在網路較深時的梯度消失問題。

(2) Dropout - 訓練時使用 Dropout 隨機忽略一部分神經元,以避免模型過度擬合。

(3) 使用重疊的最大池化 ( max pooling ) - 此前 CNN 中普遍使用平均池化,而 AlexNet 中則全部使用最大池化,避免平均池化的模糊化效果。並且 AlexNet 提出讓步長比池化核的尺寸小,這樣池化層的輸出之間會有重疊和覆蓋,提升了特徵的豐富性。

(4) 提出 LRN 層 - 對局部神經元的活動建立競爭機制,使得其中響應較大的值變得更大,並抑制其他回饋較小的神經元,增強了模型的泛化性。

(5) 使用 CUDA 加速深度卷積網路的訓練

(6) 資料增強 ( data argumentation ) - 透過擷取影像中不同部位的子影像,以及水平翻轉的鏡像影像等作法,增加資料的豐富性,可以大大減輕過度擬合,提升泛化能力。


AlexNet 網路結構如下:
「Alexnet 網路結構」的圖片搜尋結果



VGGNet 

VGGNet 是牛津大學電腦視覺組 ( Visual Geometry Group ) 和 Google DeepMind 公司的研究員一起研發的深度卷積神經網路。

VGGNet 探索了卷積神經網路的深度與其效能之間的關係。透過反覆堆疊 3 x 3 的小型卷積核和 2 x 2 的最大池化層,VGGNet 成功構築了 16 ~ 19 層深的卷積神經網路。VGGNet 相比之前的網路結構,錯誤率大幅下降許多。同時 VGGNet 的拓展性很強,遷移到其他影像資料的泛化性非常好。VGGNet 的特點如下:


(1) 探索卷積神經網路的深度與其效能之間的關係 - 下圖為 VGGNet 各級別的網路結構圖,以及每一級別的參數量,從 11 層的網路一直到 19 層的網路都有詳盡的效能測試。其中 D、E 網路結構,也就是我們常說的 VGGNet-16 和 VGGNet-19。

「VGGNET 各級別參數量」的圖片搜尋結果

VGGNet 擁有 5 段卷積,每一段內有 2 ~ 3 個卷積層,同時每段尾部會連接一個最大池化層用來縮小圖片尺寸。每段內的卷積核數量一樣,越靠後段的卷積核數量越多。

(2) 使用同樣大小的卷積核 - VGGNet 中全部使用了 3 x 3 的卷積核和 2 x 2 的最大池化核。如下圖所示,兩個 3 x 3 的卷積層串聯相當於一個 5 x 5 的卷積層,即一個像素會跟周圍 5 x 5的像素產生關聯,可視為感受區大小為 5 x 5。
 ã€ŒVGGNET 卷積層 等效」的圖片搜尋結果

而 3 個 3 x 3 的卷積層串聯的效果則相當於 1 個 7 x 7 的卷積層。但 3 個串聯的 3 x 3 卷積層,擁有比 1 個 7 x 7 的卷積層更少的參數量,只有後者的 ( 3 * 3 * 3 ) / ( 7 * 7 ) = 55%。最重要的是, 3 個 3 x 3的卷積層擁有比 1 個 7 x 7 的卷積層更多的非線性變換 ( 前者可以使用三次 ReLU啟動函數,而後者只有一次 )。

(3) 採用 Multi-Scale 的方法 - 預測時將原始影像 Scale至不同的尺寸 ,並對不同尺寸進行分類預測,再將不同尺寸的預測結果平均得到最後結果。另外還使用 Multi-Scale的方法做資料增強,將原始影像縮放到不同尺寸,然後再隨機裁 224 x 224 的圖片。



另外Google Inception Net、ResNet則下次有機會再說明了...

參考資料






沒有留言:

張貼留言

apt-get update異常處理

1. 問題描述 系統環境:Ubuntu 18.04.3 LTS 執行apt-get update更新時遇到如下狀況 錯誤訊息: Err:1 http://security.ubuntu.com/ubuntu bionic-security InRe...