【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-AlexNet

30.jpg

前言

本文主要CNN系列論文解讀——AlexNet的簡介、模型結(jié)構(gòu)鹤盒、參數(shù)計算、網(wǎng)絡(luò)結(jié)構(gòu)的代碼實現(xiàn)等侦副。原文發(fā)表于語雀文檔侦锯,排版更好看,目錄如下:
【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-AlexNet · 語雀?www.yuque.com

更多CNN論文解讀系列:

【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-AlexNet
【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-VGG
【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-Network in Network
【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-GoogLeNet
【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-ResNet
【論文解讀】CNN深度卷積神經(jīng)網(wǎng)絡(luò)-DenseNet
有用的話秦驯,請點個贊哦:)


1.簡介

最早將CNN用于圖像分類領(lǐng)域的是90年代提出的LeNet尺碰,不過由于其效果并沒有大幅領(lǐng)先傳統(tǒng)的機(jī)器學(xué)習(xí),故用的人比較少。 AlexNet是2012年論文《ImageNet Classification with Deep ConvolutionalNeural Networks》中提出的一種卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)亲桥,并在12年的ImageNet分類賽上以大幅優(yōu)勢領(lǐng)先第二名洛心,從而使得深度卷積神經(jīng)網(wǎng)絡(luò)CNN在圖像分類上的應(yīng)用掀起一波熱潮,除此以外AlexNet有很多開創(chuàng)的進(jìn)展题篷,譬如使用Relu激活函數(shù)大幅提升訓(xùn)練速度词身,采用了先進(jìn)的Dropout,數(shù)據(jù)擴(kuò)增番枚,雙GPU并行訓(xùn)練等法严。AlexNet成為后面卷積神經(jīng)網(wǎng)絡(luò)模型的效仿對象和標(biāo)桿。

還有一點户辫,論文中采取了一種新的正則化方法:局部響應(yīng)歸一化/正則化Local Respose Normalization(LRU)在之后被證明并無多少實際效果渐夸,故很少有應(yīng)用,而Dropout的方式則得到了大規(guī)模的繼承渔欢。

1.1 資源下載

【2012】【AlexNet】imagenet-classification-with-deep-convolutional-neural-networks.pdf

2.Abstract

Abstract

We trained a large, deep convolutional neural network to classify the 1.2 million high-resolution images in the ImageNet LSVRC-2010 contest into the 1000 different classes. On the test data, we achieved top-1 and top-5 error rates of 37.5% and 17.0% which is considerably better than the previous state-of-the-art. The neural network, which has 60 million parameters and 650,000 neurons, consists of five convolutional layers, some of which are followed by max-pooling layers,and three fully-connected layers with a final 1000-way softmax. To make training faster, we used non-saturating neurons and a very efficient GPU implementation of the convolution operation. To reduce overfitting in the fully-connected layers we employed a recently-developed regularization method called “dropout”that proved to be very effective. We also entered a variant of this model in the ILSVRC-2012 competition and achieved a winning top-5 test error rate of 15.3%,compared to 26.2% achieved by the second-best entry.

翻譯

我們訓(xùn)練了一個大型的深度卷積神經(jīng)網(wǎng)絡(luò)墓塌,將ImageNet ILSVRC -2010競賽中的120萬幅高分辨率圖像分類為1000個不同的類。在測試數(shù)據(jù)上奥额,我們的分別top-1和top-5錯誤率分別為37.5%和17.0%苫幢,比之前的水平有了很大的提高。該神經(jīng)網(wǎng)絡(luò)有6000萬個參數(shù)和65萬個神經(jīng)元垫挨,由5個卷積層(其中一些是Max pooling池化層)和3個全連接層(最后的1000路softmax層)組成韩肝。為了使訓(xùn)練更快,我們使用了非飽和神經(jīng)元和一個非常高效的GPU卷積運(yùn)算方式(p.s.使用了Relu和雙路GPU)九榔。為了減少全連通層的過擬合哀峻,我們采用了一種最近開發(fā)的正則化方法“Dropout”,該方法被證明是非常有效的哲泊。我們還在ILSVRC-2012比賽中加入了該模型的一個變體剩蟀,并以top-5測試錯誤率15.3%獲勝,而第二名則是26.2%切威。

3.網(wǎng)絡(luò)結(jié)構(gòu)

3.1 示意圖

由于當(dāng)年的GPU限制育特,使用的是兩個GTX580雙路并行的訓(xùn)練模式(GTX 580 GPU只有3GB的內(nèi)存),且訓(xùn)練了5~6天才得到。論文中的網(wǎng)絡(luò)結(jié)構(gòu)圖如下:

image

現(xiàn)在的GPU可以訓(xùn)練足夠大的CNN網(wǎng)絡(luò)先朦,這里合并一下缰冤,網(wǎng)絡(luò)如下:

image

3.2 layer設(shè)計

整個AlexNet網(wǎng)絡(luò)共12層,包括輸入層×1喳魏、卷積層×5棉浸、池化層×3、全連接層×3截酷,示意圖中隱藏了池化層涮拗。

第1層輸入層: 輸入為224×224×3 三通道的圖像乾戏。

第2層Conv層: 輸入為224×224×3,經(jīng)過96個kernel size為11×11×3的filter,stride = 4卷積后得到shape為55×55×96的卷積層三热。P.S.個人猜測:這里(224-11)/4 + 1 = 54.25鼓择,為了不丟棄特征,故多滑動了一步為55就漾,或者和雙路GPU的設(shè)計有關(guān)呐能?!按照論文中filter size和stride的設(shè)計抑堡,輸入的圖片尺寸應(yīng)該為227×227×3摆出。

第3層Max-pooling層: 輸入為55×55×96,經(jīng)Overlapping pooling(重疊池化)pool size = 3,stride = 2后得到尺寸為27×27×96 的池化層

第4層Conv層: 輸入尺寸為27×27×96首妖,經(jīng)256個5×5×96的filter卷積偎漫,padding=same得到尺寸為27×27×256的卷積層

第5層池化層: 輸入為27×27×256,有缆,經(jīng)pool size = 3,stride = 2的重疊池化象踊,得到尺寸為13×13×256的池化層。

第6~8層Conv層: 第6層輸入為13×13×256棚壁,經(jīng)384個3×3×256的filter卷積得到13×13×384的卷積層杯矩。 第7層輸入為13×13×384,經(jīng)384個3×3×384的filter卷積得到13×13×384的卷積層袖外。 第8層輸入為13×13×384史隆,經(jīng)256個3×3×384的filter卷積得到13×13×256的卷積層。 這里可見曼验,這三層卷積層使用的kernel前兩個維度都是3×3泌射,只是通道維不同。

第9層Max-pooling層: 輸入尺寸為13×13×256鬓照,經(jīng)pool size = 3,stride = 2的重疊池化得到尺寸為6×6×256的池化層魄幕。該層后面還隱藏了flatten操作,通過展平得到9216個參數(shù)后與之后的全連接層相連颖杏。

第10~12層Dense層: 第10~12層神經(jīng)元個數(shù)分別為4096,4096,1000坛芽。其中前兩層在使用relu后還使用了Dropout對神經(jīng)元隨機(jī)失活留储,最后一層全連接層用softmax輸出1000個分類。

3.3參數(shù)計算

根據(jù)論文描述咙轩,AlexNet中有65萬個神經(jīng)元腾么,包括了6000萬個參數(shù)腮考。下面我們進(jìn)行參數(shù)計算,由于池化層不涉及參數(shù)計算,我們重點關(guān)注5個卷積層和最后3個全連接層恕稠。

image

4.論文解讀

1. 介紹

得益于GPU的發(fā)展柑土,我們可以構(gòu)建大尺寸的CNN網(wǎng)絡(luò),而且當(dāng)數(shù)據(jù)集規(guī)模和GPU能力更強(qiáng)時,訓(xùn)練效果會更好偎肃;最終的AlexNet網(wǎng)絡(luò)包含5個卷積層和3個全連接層,這個深度很重要:去掉任何卷積層(每個不超過模型參數(shù)的1%)都會導(dǎo)致性能表現(xiàn)低下浑此。

2. 數(shù)據(jù)集

這一節(jié)介紹了ImageNet數(shù)據(jù)集和ILSVRC的來源累颂。ImageNet是一個包含超過1500萬張高分辨率圖像的數(shù)據(jù)集,屬于大約22000個類別凛俱。這些圖片是從網(wǎng)上收集來的紊馏,并由人工貼標(biāo)簽者使用Amazon的土耳其機(jī)器人眾包工具進(jìn)行標(biāo)記。從2010年開始蒲犬,作為Pascal Visual Object Challenge的一部分朱监,每年都會舉辦一場名為ImageNet大型視覺識別挑戰(zhàn)賽(ILSVRC)的比賽。ILSVRC使用ImageNet的一個子集原叮,每個類別大約有1000張圖片赫编。總共大約有120萬張訓(xùn)練圖像篇裁、5萬張驗證圖像和15萬張測試圖像沛慢。

3. 網(wǎng)絡(luò)結(jié)構(gòu)The Architecture

3.1 非線性Relu

比較了在CIFAR-10數(shù)據(jù)集下,一個4層卷積的網(wǎng)絡(luò)結(jié)構(gòu)达布,在以tanh和relu作為激活單元時損失和訓(xùn)練輪數(shù)的關(guān)系团甲,得出結(jié)論:使用ReLUs進(jìn)行深度卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的速度比使用tanh訓(xùn)練的速度快幾倍

image

3.2 多GPU并行訓(xùn)練

論文中展示的多GPU并行訓(xùn)練是在當(dāng)時GPU的內(nèi)存較小的情況下,采用的無奈操作黍聂,得益于現(xiàn)在GPU內(nèi)存的高速發(fā)展躺苦,此類操作如今沒有使用的必要了。

3.3 LRN

論文中提出产还,采用LRN局部響應(yīng)正則化可以提高模型的泛化能力匹厘,所以在某些層應(yīng)用了ReLU后,加上了LRN使得top-1和top-5的錯誤率分別降低了1.4%和1.2%脐区。但是由于實際作用不大愈诚,后面LRN的方式并沒有被人們廣泛使用 3.4 Overlapping Pooling 論文中的Maxpooling采用的是重疊池化,傳統(tǒng)池化時卷積核提取的每一小塊特征不會發(fā)生重合牛隅,譬如kernel size記為z×z,步長stride記為s,當(dāng)z = s時炕柔,就不會發(fā)生重合,當(dāng)z > s時媒佣,就會發(fā)生重合匕累,即重疊池化。AlexNet訓(xùn)練中的stride為2默伍,kernel size為z = 3欢嘿,使用的就是重疊池化衰琐。 **

4. 降低過擬合

4.1 數(shù)據(jù)擴(kuò)增

為了降低過擬合,提高模型的魯棒性炼蹦,這里采用了兩種Data Augmentation數(shù)據(jù)擴(kuò)增方式

  • 1.生成圖像平移和水平反射羡宙。通過從256×256幅圖像中提取隨機(jī)224×224塊圖像(及其水平反射),并在這些提取的圖像上訓(xùn)練我們的網(wǎng)絡(luò)框弛。這將我們的訓(xùn)練集的大小增加了2048倍
  • 2.改變了訓(xùn)練圖像中RGB通道的強(qiáng)度辛辨。在整個imagenet訓(xùn)練集中對RGB像素值集執(zhí)行PCA操作

4.2 Dropout

訓(xùn)練采用了0.5丟棄率的傳統(tǒng)Dropout,對于使用了Dropout的layer中的每個神經(jīng)元瑟枫,訓(xùn)練時都有50%的概率被丟棄斗搞。所以每次輸入時,神經(jīng)網(wǎng)絡(luò)都會對不同的結(jié)構(gòu)進(jìn)行采樣慷妙,但是所有這些結(jié)構(gòu)都共享權(quán)重僻焚。這種技術(shù)減少了神經(jīng)元之間復(fù)雜的相互適應(yīng),因為神經(jīng)元不能依賴于其他神經(jīng)元的存在膝擂。因此虑啤,它被迫獲得更健壯的特征。測試時使用所有的神經(jīng)元架馋,但將它們的輸出乘以0.5狞山。 論文中還提到了:Dropout使收斂所需的迭代次數(shù)增加了一倍

5.學(xué)習(xí)細(xì)節(jié)

訓(xùn)練使用的是小批量隨機(jī)梯度下降,batch size = 128,動量momentum為0.9叉寂,weight deay權(quán)重衰減為0.0005萍启;每一層的權(quán)重初始化為均值1標(biāo)準(zhǔn)差0.01的正態(tài)分布,在第2,4,5卷積層和全連接層中的bias初始化為常數(shù)1屏鳍,其余層則為0.所有層采用了相同的初始化為0.01的學(xué)習(xí)率勘纯,不過可以手動調(diào)整。整個訓(xùn)練過程在兩臺NVIDIA GTX 580 3GB gpu上用了5到6天的時間钓瞭,120萬張圖像的訓(xùn)練集驳遵,大約90輪迭代。 論文中提到:weight deay對模型的學(xué)習(xí)很重要山涡。換句話說堤结,這里的重量衰減不僅僅是一個正則化器:它減少了模型的訓(xùn)練誤差。

7.討論

論文中指出:一個大型的鸭丛、深度的卷積神經(jīng)網(wǎng)絡(luò)能夠在一個高度挑戰(zhàn)的數(shù)據(jù)集上使用純監(jiān)督學(xué)習(xí)獲得破紀(jì)錄的結(jié)果霍殴。如果去掉AlexNet網(wǎng)絡(luò)中的任意個卷積層,整體性能就會下降約2%系吩,可見,網(wǎng)絡(luò)的深度很重要妒蔚。

5.代碼實現(xiàn)

這里使用tensorflow2.0實現(xiàn)網(wǎng)絡(luò)結(jié)構(gòu)穿挨,而不是完整的訓(xùn)練月弛。

import tensorflow as tf
# tf版本為2.0.0
net = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(filters=96, kernel_size=11, strides=4, activation='relu'),
    tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
    tf.keras.layers.Conv2D(filters=256, kernel_size=5, padding='same', activation='relu'),
    tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
    tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same', activation='relu'),
    tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same', activation='relu'),
    tf.keras.layers.Conv2D(filters=256, kernel_size=3, padding='same', activation='relu'),
    tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(4096, activation='relu'),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(4096, activation='relu'),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(1000, activation='softmax')
])

# 輸出每一層的shape
X = tf.random.uniform((1,227,227,3)) # 這里為了演示正確,輸入改為227而不是論文中的224
for layer in net.layers:
    X = layer(X)
    print(layer.name, 'output shape\t', X.shape)

輸出:

conv2d output shape  (1, 55, 55, 96)
max_pooling2d output shape   (1, 27, 27, 96)
conv2d_1 output shape    (1, 27, 27, 256)
max_pooling2d_1 output shape     (1, 13, 13, 256)
conv2d_2 output shape    (1, 13, 13, 384)
conv2d_3 output shape    (1, 13, 13, 384)
conv2d_4 output shape    (1, 13, 13, 256)
max_pooling2d_2 output shape     (1, 6, 6, 256)
flatten output shape     (1, 9216)
dense output shape   (1, 4096)
dropout output shape     (1, 4096)
dense_1 output shape     (1, 4096)
dropout_1 output shape   (1, 4096)
dense_2 output shape     (1, 1000)

在《動手學(xué)深度學(xué)習(xí)》-tf2.0版一書中科盛,有完整的訓(xùn)練代碼帽衙。不過由于ImageNet規(guī)模較大,故數(shù)據(jù)集使用的是Fashion-MNIST贞绵,完整訓(xùn)練可參考:深度卷積神經(jīng)網(wǎng)絡(luò)(AlexNet)

6.總結(jié)

  • 1.AlexNet和LeNet設(shè)計上有一脈相承之處厉萝,也有區(qū)別。為了適應(yīng)ImageNet中大尺寸圖像榨崩,其使用了大尺寸的卷積核谴垫,從11×11到5×5到3×3,AlexNet的卷積層和全連接層也帶來更多的參數(shù)6000萬(LeNet只有6萬)母蛛,這一全新設(shè)計的CNN結(jié)構(gòu)在圖像分類領(lǐng)域取大幅超越傳統(tǒng)機(jī)器學(xué)習(xí)翩剪,自此之后CNN在圖像分類領(lǐng)域被廣泛應(yīng)用。
  • 2.使用了Relu替換了傳統(tǒng)的sigmoid或tanh作為激活函數(shù)彩郊,大大加快了收斂前弯,減少了模型訓(xùn)練耗時。
  • 3.使用了Dropout秫逝,提高了模型的準(zhǔn)確度恕出,減少過擬合,這一方式再后來也被廣泛采用违帆。
  • 4.使用數(shù)據(jù)了2種數(shù)據(jù)擴(kuò)增技術(shù)浙巫,大幅增加了訓(xùn)練數(shù)據(jù),增加模型魯棒性前方,減少過擬合狈醉。
  • 5.使用了LRN正則化、多GPU并行訓(xùn)練的模式(不過之后并沒有被廣泛應(yīng)用)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠险,一起剝皮案震驚了整個濱河市苗傅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌班巩,老刑警劉巖渣慕,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抱慌,居然都是意外死亡逊桦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門抑进,熙熙樓的掌柜王于貴愁眉苦臉地迎上來强经,“玉大人,你說我怎么就攤上這事寺渗∧淝椋” “怎么了兰迫?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炬称。 經(jīng)常有香客問我汁果,道長,這世上最難降的妖魔是什么玲躯? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任据德,我火速辦了婚禮,結(jié)果婚禮上跷车,老公的妹妹穿的比我還像新娘棘利。我一直安慰自己,他們只是感情好姓赤,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布赡译。 她就那樣靜靜地躺著,像睡著了一般不铆。 火紅的嫁衣襯著肌膚如雪蝌焚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天誓斥,我揣著相機(jī)與錄音只洒,去河邊找鬼。 笑死劳坑,一個胖子當(dāng)著我的面吹牛毕谴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播距芬,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涝开,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了框仔?” 一聲冷哼從身側(cè)響起舀武,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎离斩,沒想到半個月后银舱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡跛梗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年寻馏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片核偿。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡诚欠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轰绵,我是刑警寧澤家乘,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站藏澳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耀找。R本人自食惡果不足惜翔悠,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望野芒。 院中可真熱鬧蓄愁,春花似錦、人聲如沸狞悲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摇锋。三九已至丹拯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荸恕,已是汗流浹背乖酬。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留融求,地道東北人咬像。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像生宛,于是被迫代替她去往敵國和親县昂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容