Overview:CNN發展史(待續)
目錄
I. 基礎知識
在對CNN進行概覽之前,請先務必清楚以下問題:
機器學習基礎知識:
- 什麼是“全連線”?
- 前向傳播和反向傳播各自的作用是?為什麼需要反向傳播?
- 什麼是感知機?其致命缺陷是什麼?
- 常見的啟用函式有哪些?“啟用”了什麼特性?(非線性,最直接解決了亦或問題)
深度學習基礎知識:
- 常見的損失函式有哪些?最好能知道是怎麼得到的(比如由最大似然推出)。
- 常見的優化方法有哪些?利弊如何?
- 抑制過擬合最簡單的方法是什麼?
- 什麼是泛化能力?
- Dropout目的?如何實現?測試階段需要用嗎?
- 什麼是梯度消失?有哪些解決方式?(RNN→LSTM,sigmoid、tanh→ReLU,Batch Normalization,GoogLeNet中的輔助損失函式等)
- Batch Normalization目的?如何實現?
- 什麼是梯度爆炸?有哪些解決方式?
CNN基礎知識:
- 離散卷積怎麼實現?
- 假設有一個單通道28x28的圖片,使用尺寸為5x5,步長為1的3個卷積核(濾波器),則卷積層尺寸為?(3x24x24)
- 相比於全連線網路,CNN的兩大創新點是什麼,使得它易於訓練,又能學習到較高階的特徵?(稀疏連線和引數共享)
- 什麼是感受野?層數越大,該層單元的感受野會越大嗎?
- 什麼是轉置卷積?(參見我的部落格及其參考連結)
- 什麼是池化?引數共享和最大池化,分別為CNN引入了什麼特性?
(平移等變性和平移不變性。如果是分離引數的卷積輸出的池化,那麼會引入多種特徵的不變性,比如旋轉不變性)
以下內容的提綱,參考中科院PPT:《CNN近期進展與實用技巧》。
而具體內容,為筆者閱讀論文後的學習總結。
II. 早期嘗試
CNN的演化脈絡:
1. Neocognitron, 1980
1959年Hubel等人提了對視覺皮層的功能劃分:
受此啟發,1980年,Kunihiko Fukushima提出了Neocognitron,可用於手寫數字識別等模式識別任務。
Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position
創新點:Neocognitron使用了兩種細胞:simple cell和complex cell,並且讓二者級聯工作。
前者直接提取特徵,後者處理特徵的畸變,比如平移等,使Neocognitron具有平移不變性。
2. LeCun, 1989
A. 概況
Yann Le Cun是第一個在計算機視覺領域(手寫郵政編碼識別問題)使用CNN的人。
Backpropagation Applied to Handwritten Zip Code Recognition
我們知道,引入先驗知識,也就是引入限制,可以增強網路的泛化能力。
那麼,我們應該如何引入呢?
LeCun認為,引入先驗最基本的原則(方法)是:在保證計算能力不變的情況下,儘可能減少冗餘引數。
該原則的解釋是:一可以減小 entropy ,二可以減小 VC 維數,因此可以增強泛化能力。
個人理解:對同一個問題,如果引數較多,要麼是問題比較複雜,要麼是先驗知識不夠,假設空間大。
如果在保證 computational power 不下降的情況下,儘可能減少引數,也就等同於引入了儘可能多的先驗知識,縮小了假設空間。
現在的問題就是:如何實現這一點?
LeCun將要說明:我們可以通過構造特殊的 network architecture ,來實現這一點。
B. Feature maps & Weight sharing
與之前識別工作的最顯著不同之處在於:
- 該網路是端到端的,即直接利用 low-level information ,而不是從 feature vectors 開始。
- 網路中所有的連線都是自適應的,而之前的工作中前幾層的連線引數是手動選擇的。
具體設計:
首先網路繼承了特徵提取的方式:
提取 local features ,整合在一起,然後再形成 higher order features 。
其優勢在前人工作中已被證實。
一個目標的特徵有很多而且各不相同,因此我們應該:
用 a set of feature detectors 來檢測這些特徵。
一個相同的特徵可能出現在各個位置,因此:
我們可以採用 Rumelhart 等人在1986年提出的 weight sharing 方法,在較小的計算代價下,在各個位置上檢測出該特徵。
綜合上述兩點,第一個隱藏層應該是一個 feature maps ,每一個 plane 內部共享引數、表示一種特徵。
由於某特徵的具體位置資訊不那麼重要,因此該層可以比輸入層小。
C. 網路設計
D. 實驗
- 非線性啟用單元採用 scaled hyperbolic tangent Symmetric functions ,收斂更快。但在函式輸入值特別大或特別小時,學習也會很慢。
- 損失函式為MSE。
- 輸出單元採用 sigmoid ,保證loss不會過大(梯度也會很大)。
- 目標輸出要求在 sigmoid 的擬線性區,保證梯度不會產生於 sigmoid 的平坦區域。
- 在一個小範圍內隨機初始化,目的同上。
- 隨機梯度下降,收斂更快。
- 擬牛頓法調節學習率,讓下降更可靠。
最終效果:在數字識別領域當然是 state of the art ~
3. LeNet, 1998
這篇文章是引用過萬的綜述性文章,對當時手寫數字識別的方法做了概述。
Gradient-based learning applied to document recognition
文章中提到了許多有意思的歷史:
在過去,特徵提取是重中之重,甚至會被整體手工設計。
原因是,過去分類器的分類任務比較簡單,類別差距大,因此假設空間比較小。
因此,分類器的準確性很大程度上取決於該低維空間的擬合程度,特徵提取就顯得尤為關鍵。
但時過境遷,隨著計算機效能提升、資料庫日益擴大和越來越棒的深度學習技術的出現,設計者不再需要仔細設計特徵提取器,而可以更依賴於真實資料,並且構造出足夠複雜的假設。
該綜述長達46頁,我們重點說一下CNN的經典構架:LeNet-5。
LeNet-5有7層:
- 輸入層,尺寸大於任何一個字母,以保證每個字母都會出現在第七層單元的感受野的中心。
- 中間五層分別是:卷積層→降取樣層→卷積層→降取樣層→卷積層。
- 第一個卷積層使用了六種濾波器,因此具有六個通道的 feature maps 。
- 第二個卷積層上升到16個通道。每一個通道與前6個通道的關係都不一樣,見上圖,目的是破壞對稱性,迫使每個通道學習不同的特徵(理想情況是互補特徵)。
- 在全連線層,特徵進行內積和非線性啟用。
- 最後是輸出層,10種數字對應10個輸出單元,分別計算輸出向量和該分類參考向量的歐式距離。
引數要麼是+1要麼是-1,主要是因為輸出向量的每一個元素都用sigmoid歸一化,其值域就是[-1,+1]。
比如,[1 -1...-1]和[1 -1...-1]距離是0,[-1 1 -1...-1]和[1 -1...-1]距離是8。
在統計學上,如果真實概率模型是高斯分佈,那麼對於線性迴歸,最大化關於w的對數似然,和最小化MSE是等價的。
而輸出層就是一個線性迴歸問題,並且我們可以假設簡單先驗為高斯分佈。具體參見《DEEP LEARNING》。
那麼為什麼不用0-9這十個數字來分類呢?
一是上述理由闡述了 distributed codes 在衡量距離時的合理性;
二是實驗證明,當類別較多時,這種 place code 效果非常差。因為只讓大多數輸出為0,只有1個輸出非0是很困難的;
三是如果輸入的不是字元,place code 更難拒絕判斷。
III. 歷史性突破:AlexNet, 2012
1. Historic
AlexNet competed in the ImageNet Large Scale Visual Recognition Challenge in 2012.
The network achieved a top-5 error of 15.3%, more than 10.8 percentage points lower than that of the runner up.
因此,AlexNet引爆了深度學習的熱潮,我們稱之為歷史性突破。
ImageNet classification with deep convolutional neural networks
2. 困難之處
AlexNet解決的最直接問題,就是 ImageNet 影象分類問題,訓練集高清圖片容量達到120萬,類別達1000種;神經網路引數達到6000萬個,神經元達65萬個,問題複雜度可想而知。
訓練如此大規模的網路,顯然是困難的。
本文在開頭也說明了問題的複雜性:即便是 ImageNet 這樣龐大的資料集,也無法 specify 這一複雜的問題。
也就是說,假設空間有很大的未知區域。
因此,我們需要許多先驗知識,來補償那些訓練集中沒有的資料。
3. 選擇CNN
CNN 是理想的模型,因為它通常能為天然圖片(測試圖片)帶來強大而正確的假設,即統計穩定性(平移不變性)和畫素的位置依賴性(也就是二者兼顧的意思)。
最重要的是,它的計算成本相對較低。
4. 本文貢獻
本文主要貢獻有:
- 提出的網路結構,在影象分類比賽中達到了驚人的效果。
- 編寫了高度優化的 GPU 2D 卷積實現,並已公開。但該實現偏硬體,新手建議從caffe入手。
- 採取了許多抑制過擬合的措施;雖然資料庫很大,但是引數也很多,過擬合很嚴重。
- 該網路只包含5個卷積層,引數量只佔了不到5%,但缺一不可(效果會變差);發現深度很重要。
- 當前的工作僅僅受到硬體水平的限制,還有很大的發展空間。
5. 網路設計
根據重要性依次排序,該網路有以下創新:
A. ReLU
之前使用的 tanh 和 sigmoid 啟用函式都存在飽和區。
改用無飽和的 ReLU ,收斂速度可以達到數倍於 tanh !
實驗:同一個4層卷積網路,要求在 CIFAR-10 上達到25%準確率,分別測試 ReLU (實線)和 tanh (虛線),如圖。
B. Training on Multiple GPUs
2個 GPU 協同,最直接的作用是加快了訓練速度。
作者嘗試將網路改為單GPU,同時保證引數數量不變,速度略遜於雙 GPUs 。
其次,這兩個 GPU 實際上是有互動的。與獨立工作相比,互動將準確率提高了1.2%以上。
最後,當時的 GPU 效能不夠強大,視訊記憶體只有3GB。
這種協同的思想可以將大任務分解為多個小任務執行。
C. Local Response Normalization
在真實神經元中,存在一種側邊抑制效應 lateral inhibition 。
簡單來說,就是在一個小區域內,如果有一個神經元被啟用,那麼其附近的神經元會相對受到抑制。
換句話說,這是一種促進神經元區域性競爭的機制。但這一點其實有點牽強。
受此啟發,AlexNet 在某些層的非線性啟用以後採用 Local Response Normalization ,公式如圖:
ReLU 的原始輸出就是 \(\alpha_{x,y}^i\) ,位於第 \(i\) 個核的 \((x,y)\) 位置。
抑制是在不同核之間發生的,如圖,在當前核的左右共 \(n\) 個通道上進行,核序號不要超過上限 \(N\) 和下限 \(0\) 。
顯然,如果鄰域記憶體在較大的 \(\alpha_{x,y}^j\) 而自身很小,那麼除後將會小的可憐;如果反之,那麼影響不大。
這樣就拉開了“貧富差距”。
作者說明,該 trick 使得準確率提高了1.2%以上。
但據各路大神反饋,該 trick 基本無效。
D. Overlapping Pooling
實驗證明,重疊池化可以更好地抑制過擬合,使準確率提高約0.4%和0.3%。
6. 抑制過擬合設計
A. Data Augmentation
最簡單的抑制過擬合技術,就是 label-preserving transformations 。
簡單來說,就是讓影象進行各種不影響目標本質的變換,擴大資料量。
該網路採用的是簡單的變換,不需要儲存,並且用 CPU 即可實現,不影響正在計算上一個 batch 的 GPU 。
- 映象對稱變換;
- 影象光照強度和色彩變換。
第二點具體而言:
- 先提取 RGB 三通道分量;
- 對每一個通道分別進行主成分分析,提取出主成分;
- 然後再進行三通道的隨機係數線性組合。
個人認為,先主成分分析可以減少資料量吧~
以上方案在抑制過擬合的同時,讓準確率提升了至少1%。
B. Dropout
如果我們有多個不同的模型合作進行預測,那麼泛化誤差將會有效降低。
問題是,訓練多個模型的計算成本很高昂。
Dropout 為我們提供了新思路:讓這些模型分享相同的權重係數,但神經元的輸出結果不盡相同。
這樣,我們就相當於得到了許多模型。
具體而言,是讓 hidden neuron 的輸出有50%的概率被置零。
這樣,每次反向傳播時,參考的 loss 都是由不同模型計算得到的。
總的來說,Dropout 技術打破了神經元之間的依賴性,強迫網路學習更魯棒的神經元連線。
我們只在全連線層使用,因為全連線層的連線非常多。
在測試階段不採用 Dropout 。
Dropout 會延長收斂時間,但能有效抑制過擬合。
7. 討論
作者發現,去掉網路中任意一箇中間層,都會讓整體表現下降2%左右。因此深度非常重要。
為了簡化計算,作者並沒有採用無監督的 pre-training 。
儘管 pre-training 可能可以在不提高資料量的同時,提升網路效能。
最後,深層次網路可以用於視訊,以利用時間相關性。
IV. 網路加深
1. VGG Net, 2014
VGG 的深度是前所未有的,卷積層達到10個,全連線層有3個。
VGG 獲得了 ImageNet2014 的分類賽冠軍和定位賽亞軍,並且泛化能力非常好。
Very deep convolutional networks for large-scale image recognition
重要貢獻:探究了深度和濾波器尺寸的權衡問題,發現深度遠比濾波器尺寸重要。
為了探究這一問題,濾波器尺寸固定為3x3,網路深度逐漸加深,同時進行實驗。
為了保證客觀,VGG Net 沿用了 AlexNet 的配置(ReLU等),但放棄了 LRN ,並且認為該 trick 不僅無效而且冗餘。
下表是實驗的幾種配置,從左到右深度遞增,對比效果:
下表可以看到,不僅深度越深效果更好,而且多尺度訓練的效果也更好:
下表是當時各種網路的測試結果對比:
2. MSRA-Net, 2015
Convolutional neural networks at constrained time cost
時間成本控制很重要,特別是處理線上實時任務,多使用者請求,移動終端處理等時。
這篇文章的重點就是時間成本控制。作者提到:
Most of the recent advanced CNNs are more timeconsuming than Krizhevsky et al.’s [14] original architecture in both training and testing.
The increased computational cost can be attributed to the increased width1 (numbers of filters) [21, 24, 1], depth (number of layers) [22, 23], smaller strides [21, 24, 22], and their combinations.
在實驗中,時間成本是一個固定指標。因此當網路深度增加時,濾波器的深度或尺寸就需要減小。
換句話說,本文的實驗秉承著 trade off 的原則。
本文實驗獲得了以下幾個重要結論:
- 網路深度是保證準確率的核心指標,比其餘引數都重要,應該在 trade off 中傾斜考慮。
這個結論並非簡單直接得到的,因為其他文章僅僅是堆疊更多層,但這篇文章是做了一個 trade off 來控制一定的時間成本。 - 當網路深度過度增加時,網路會存在退化現象,哪怕沒有 trade off 也是如此。
該現象為何凱明 ResNet 的創新埋下了伏筆。
最直接的效果是,作者僅用 AlexNet 40% 的複雜度,GPU 速度快20%,就實現了高4.2%的分類準確率。