卷积神经网络之 - Alexnet
本文建議閱讀時(shí)間 20 min
論文地址:
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
2012 年, AlexNet 橫空出世。這個(gè)模型的名字來源于論?第一作者的姓名 Alex Krizhevsky。AlexNet 使?了 8 層卷積神經(jīng)?絡(luò),并以很?的優(yōu)勢(shì)贏得了 ImageNet 2012 圖像識(shí)別挑戰(zhàn)賽冠軍。
top1: 37.5%
top5: 17.0%
6 千萬參數(shù) 650000 個(gè)神經(jīng)元
與 LeNet 相比較
第?,與相對(duì)較小的 LeNet 相?, AlexNet 包含 8 層變換,其中有 5 層卷積和 2 層全連接隱藏層,以及 1 個(gè)全連接輸出層。AlexNet 第?層中的卷積窗?形狀是 11×11。因?yàn)?ImageNet 中絕?多數(shù)圖像的?和寬均? MNIST 圖像 的?和寬? 10 倍以上, ImageNet 圖像的物體占?更多的像素,所以需要更?的卷積窗?來捕獲物體。第?層中的卷積窗?形狀減?到 5×5 ,之后全采? ?3×3。此外,第?、第?和第五個(gè)卷積層之后都使用了窗?形狀為 3×3 、步幅為 2 的最?池化層。?且, AlexNet 使用的卷積通道數(shù)也?于 LeNet 中的卷積通道數(shù)數(shù)?倍。
第?,AlexNet 將 sigmoid 激活函數(shù)改成了更加簡單的 ReLU 激活函數(shù)。???, ReLU 激活函數(shù)的計(jì)算更簡單,例如它并沒有 sigmoid 激活函數(shù)中的求冪運(yùn)算。另???,ReLU 激活函數(shù)在不同的參數(shù)初始化?法下使模型更容易訓(xùn)練。這是由于當(dāng) sigmoid 激活函數(shù)輸出極接近 0 或 1 時(shí),這些區(qū)域的梯度幾乎為 0,從?造成反向傳播?法繼續(xù)更新部分模型參數(shù);? ReLU 激活函數(shù)在正區(qū)間的梯度恒為 1。因此,若模型參數(shù)初始化不當(dāng), sigmoid 函數(shù)可能在正區(qū)間得到幾乎為 0 的梯度,從?令模型?法得到有效訓(xùn)練。
Relu 比 Sigmoid 的效果好在哪里?
Sigmoid 的導(dǎo)數(shù)只有在 0 的附近時(shí)有較好的激活性,而在正負(fù)飽和區(qū)域的梯度趨向于 0, 從而產(chǎn)生梯度彌散的現(xiàn)象,而 relu 在大于 0 的部分梯度為常數(shù),所以不會(huì)有梯度彌散現(xiàn)象。Relu 的導(dǎo)數(shù)計(jì)算的更快。Relu 在負(fù)半?yún)^(qū)的導(dǎo)數(shù)為 0, 所以神經(jīng)元激活值為負(fù)時(shí),梯度為 0, 此神經(jīng)元不參與訓(xùn)練,具有稀疏性。
第三, AlexNet 通過丟棄法(dropout)來控制全連接層的模型復(fù)雜度。? LeNet 并沒有使用丟棄法。
第四,AlexNet 引?了?量的圖像增?,如翻轉(zhuǎn)、裁剪和顏?變化,從?進(jìn)?步擴(kuò)?數(shù)據(jù)集來緩解過擬合。
代碼實(shí)現(xiàn)
import?time import?torch from?torch?import?nn,?optim import?torchvisionclass?AlexNet(nn.Module):def?__init__(self):super(AlexNet,?self).__init__()self.conv?=?nn.Sequential(nn.Conv2d(1,?96,?11,?4),?#?in_channels,?out_channels,?kernel_size,?stride,?paddingnn.ReLU(),nn.MaxPool2d(3,?2),?#?kernel_size,?stride#?減小卷積窗口,使用填充為2來使得輸入與輸出的高和寬一致,且增大輸出通道數(shù)nn.Conv2d(96,?256,?5,?1,?2),nn.ReLU(),nn.MaxPool2d(3,?2),#?連續(xù)3個(gè)卷積層,且使用更小的卷積窗口。除了最后的卷積層外,進(jìn)一步增大了輸出通道數(shù)。#?前兩個(gè)卷積層后不使用池化層來減小輸入的高和寬nn.Conv2d(256,?384,?3,?1,?1),nn.ReLU(),nn.Conv2d(384,?384,?3,?1,?1),nn.ReLU(),nn.Conv2d(384,?256,?3,?1,?1),nn.ReLU(),nn.MaxPool2d(3,?2))#?這里全連接層的輸出個(gè)數(shù)比LeNet中的大數(shù)倍。使用丟棄層來緩解過擬合self.fc?=?nn.Sequential(nn.Linear(256*5*5,?4096),nn.ReLU(),nn.Dropout(0.5),nn.Linear(4096,?4096),nn.ReLU(),nn.Dropout(0.5),#?輸出層。由于這里使用Fashion-MNIST,所以用類別數(shù)為10,而非論文中的1000nn.Linear(4096,?10),)def?forward(self,?img):feature?=?self.conv(img)output?=?self.fc(feature.view(img.shape[0],?-1))return?output模型特性
SGD, 128 batch-size, momentum=0.9, weight decay=0.0005, 學(xué)習(xí)率 = 0.01
所有卷積層都使用 ReLU 作為非線性映射函數(shù),使模型收斂速度更快
在多個(gè) GPU 上進(jìn)行模型的訓(xùn)練,不但可以提高模型的訓(xùn)練速度,還能提升數(shù)據(jù)的使用規(guī)模
使用 LRN 對(duì)局部的特征進(jìn)行歸一化,結(jié)果作為 ReLU 激活函數(shù)的輸入能有效降低錯(cuò)誤率
重疊最大池化(overlapping max pooling),即池化范圍 z 與步長 s 存在關(guān)系 z>s 避免平均池化(average pooling)的平均效應(yīng)
使用隨機(jī)丟棄技術(shù)(dropout)選擇性地忽略訓(xùn)練中的單個(gè)神經(jīng)元,避免模型的過擬合(也使用數(shù)據(jù)增強(qiáng)防止過擬合)
貢獻(xiàn) / 意義
AlexNet 跟 LeNet 結(jié)構(gòu)類似,但使?了更多的卷積層和更?的參數(shù)空間來擬合?規(guī)模數(shù)據(jù)集 ImageNet。它是淺層神經(jīng)?絡(luò)和深度神經(jīng)?絡(luò)的分界線。
雖然看上去 AlexNet 的實(shí)現(xiàn)? LeNet 的實(shí)現(xiàn)也就多了??代碼而已,但這個(gè)觀念上的轉(zhuǎn)變和真正優(yōu)秀實(shí)驗(yàn)結(jié)果的產(chǎn)?令學(xué)術(shù)界付出了很多年。
備注:公眾號(hào)菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)。
往期精彩回顧那些年做的學(xué)術(shù)公益-你不是一個(gè)人在戰(zhàn)斗適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)AI基礎(chǔ)下載(第一部分)備注:加入本站微信群或者qq群,請(qǐng)回復(fù)“加群”加入知識(shí)星球(4500+用戶,ID:92416895),請(qǐng)回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的卷积神经网络之 - Alexnet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络之 - VGGNet
- 下一篇: 卷积神经网络之 - Lenet