白话详细解读(二)-----AlexNet
一、AlexNet簡介
2012年,Alex Krizhevsky可以算作是LeNet的一個(gè)更深和更廣的版本,可以用來學(xué)習(xí)更加復(fù)雜的對象。
Alex的要點(diǎn)
- 1.用ReLU得到非線性,用ReLU非線性函數(shù)作為激活函數(shù)
- 2.使用dropout的trick在訓(xùn)練期間有選擇性的忽略隱藏層神經(jīng)元,來減緩學(xué)習(xí)模型的過擬合
- 3.使用重疊最大池進(jìn)行池化操作,避免平均池的平均效果
- 4.使用GPU可以減少訓(xùn)練時(shí)間,這比CPU處理快了10倍,所以可以被用于更大的數(shù)據(jù)集和圖像上。
二、AlexNet細(xì)節(jié)介紹
2.1 局部響應(yīng)歸一化(LRN)
推薦閱讀:https://blog.csdn.net/program_developer/article/details/79430119
在神經(jīng)生物學(xué)上有一個(gè)"側(cè)抑制"的概念,指的是被激活的神經(jīng)元會(huì)抑制相鄰神經(jīng)元。歸一化的目的就是"抑制",局部響應(yīng)歸一化就是借鑒側(cè)抑制的思想來實(shí)現(xiàn)局部抑制。尤其是我們使用Relu的時(shí)候,這種抑制會(huì)很管用。
2.2 數(shù)據(jù)增強(qiáng)(Data Augmentation)
有一種觀點(diǎn)認(rèn)為,神經(jīng)網(wǎng)絡(luò)是靠數(shù)據(jù)喂出來的,如果能夠增加訓(xùn)練數(shù)據(jù),提供海量數(shù)據(jù)進(jìn)行訓(xùn)練,則能夠有效提升算法的準(zhǔn)確率,因?yàn)檫@樣可以有效避免過擬合(overfitting),從而可以進(jìn)一步增大、加深網(wǎng)絡(luò)結(jié)構(gòu)。而當(dāng)訓(xùn)練數(shù)據(jù)有限時(shí),可以通過一些變換從已有的訓(xùn)練數(shù)據(jù)集中生成一些新的數(shù)據(jù),以快速地?cái)U(kuò)充訓(xùn)練數(shù)據(jù)。
其中,最簡單、最通用的圖像數(shù)據(jù)變形的方式:水平翻轉(zhuǎn)圖像,從原始圖像中隨機(jī)裁剪、平移變換、顏色變換、光照變換。
AlexNet在訓(xùn)練時(shí),在數(shù)據(jù)增強(qiáng)時(shí)是這樣處理的:
- (1)隨機(jī)裁剪,對256256大小的圖片進(jìn)行隨機(jī)裁剪到224224,然后進(jìn)行水平翻轉(zhuǎn),這樣就相當(dāng)于將樣本數(shù)量增加了((256-224)^2)*2 = 2048倍。
- (2)測試的時(shí)候,對左上、右上、左下、右下、中間分別做了5次裁剪,然后翻轉(zhuǎn),共10個(gè)裁剪,之后對結(jié)果求平均。作者說,如果不進(jìn)行隨機(jī)裁剪,大網(wǎng)絡(luò)基本上都過擬合。
- (3)對RGB空間做PCA(主成分分析),然后對主成分做一個(gè)(0,0.1)的高斯擾動(dòng),也就是對顏色、光照做變換,結(jié)果使錯(cuò)誤率又下降了1%。
2.3 dropout
推薦閱讀:https://blog.csdn.net/program_developer/article/details/80737724
2.3.1 dropout簡介
引入dropout主要是為了防止過擬合。在神經(jīng)網(wǎng)絡(luò)中Dropout通過修改神經(jīng)網(wǎng)絡(luò)本身結(jié)構(gòu)來實(shí)現(xiàn),對于某一層的神經(jīng)元,通過定義的概率(通常取0.5)將神經(jīng)元置為0,這個(gè)神經(jīng)元就不參與前向和后向傳播,就如同在網(wǎng)絡(luò)中被刪除了一樣,同時(shí)保持輸入層和輸出層神經(jīng)元的個(gè)數(shù)不變,然后按照神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)方法進(jìn)行參數(shù)更新。在下一次迭代中,又重新隨機(jī)刪除一些神經(jīng)元(將神經(jīng)元置為0),直至訓(xùn)練結(jié)束。
Dropout應(yīng)該算是AlexNet中的一個(gè)很大的創(chuàng)新,Dropout也可以看成是一種模型組合,每次生成的網(wǎng)絡(luò)結(jié)構(gòu)都不一樣,通過組合多個(gè)模型的方式能夠有效地減少過擬合,Dropout只需要兩倍地訓(xùn)練時(shí)間即可實(shí)現(xiàn)模型組合的效果,非常高效。
2.3.2 dropout具體工作流程
假設(shè)我們要訓(xùn)練這樣一個(gè)神經(jīng)網(wǎng)絡(luò),如下圖所示:
如上圖所示,這是一個(gè)正常的神經(jīng)網(wǎng)絡(luò)
輸入是x,輸出是y,正常的流程是:我們首先把x通過網(wǎng)絡(luò)進(jìn)行前向傳播,然后把誤差反向傳播以決定如何更新參數(shù),讓網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)。使用Dropout之后,過程變成如下:
- 1.首先隨機(jī)(臨時(shí))刪掉網(wǎng)絡(luò)中一半的隱藏神經(jīng)元,輸入輸出神經(jīng)元保持不變,(下圖虛線為部分臨時(shí)被刪除的神經(jīng)元)
- 2.然后把輸入x通過修改后的網(wǎng)絡(luò)前向傳播,然后把得到的損失結(jié)果通過修改的網(wǎng)絡(luò)反向傳播。一小批訓(xùn)練樣本執(zhí)行完這個(gè)過程后,在沒有被刪除的神經(jīng)元上按照隨機(jī)梯度下降法更新對應(yīng)的參數(shù)(w,b)。
- 然后重復(fù)執(zhí)行這一過程:
- 恢復(fù)被臨時(shí)刪掉的神經(jīng)元(此時(shí)被刪掉的神經(jīng)元恢復(fù)原樣,而沒有被刪掉的神經(jīng)元已經(jīng)有所更新)
- 從隱藏層神經(jīng)元中隨機(jī)選擇一個(gè)一半大小的子集臨時(shí)刪掉(備份被刪掉的神經(jīng)元的參數(shù))
- 對一小批訓(xùn)練樣本,先前向傳播然后反向傳播損失,并根據(jù)隨機(jī)梯度下降法更新參數(shù)(w,b)(沒有被刪掉的那一部分神經(jīng)元得到更新,刪掉的神經(jīng)元保持被刪除前的結(jié)果)
- 不斷重復(fù)這一過程。
2.3.2 dropout在神經(jīng)網(wǎng)絡(luò)中的使用
(1)在訓(xùn)練模型階段
無可避免的,在訓(xùn)練網(wǎng)絡(luò)的每個(gè)單元都要添加一道概率流程。
對應(yīng)的公式變化如下:
- 沒有Dropout的網(wǎng)絡(luò)計(jì)算公式:
- 采用Dropout的網(wǎng)絡(luò)計(jì)算公式:
上面公式Bernoulli函數(shù)是為了生成概率r向量,也就是隨機(jī)生成一個(gè)0、1的向量。
代碼層面實(shí)現(xiàn)讓某個(gè)神經(jīng)元以概率P停止工作,其實(shí)就是讓他的激活函數(shù)值以概率P變?yōu)?.比如我們某一層的網(wǎng)絡(luò)神經(jīng)元的個(gè)數(shù)為1000個(gè),其激活函數(shù)輸出值為y1、y2、y3、…、y1000,我們將Dropout的比率置為0.5,那么這一層神經(jīng)元經(jīng)過Dropout之后,1000個(gè)神經(jīng)元會(huì)有大約400個(gè)的值被置為0.
(2)在測試模型階段
預(yù)測模型的時(shí)候,每一個(gè)神經(jīng)單元的權(quán)重參數(shù)要乘以概率p。
測試階段Dropout公式:
2.4 重疊最大池化(Overlapping Pooling)
一般的池化(Pooling)是不重疊的,池化區(qū)域的窗口大小與步長相同,如下圖所示:
在AlexNet中使用的池化(Pooling)卻是可重疊的,也就是說,在池化的時(shí)候,每次移動(dòng)的步長小于池化的窗口長度。AlexNet池化的大小為3*3的正方形,每次池化移動(dòng)步長為2,這樣就會(huì)出現(xiàn)重疊。重疊池化可以避免過擬合,這個(gè)策略貢獻(xiàn)了0.3%的Top-5錯(cuò)誤率。
三、AlexNet 網(wǎng)絡(luò)結(jié)構(gòu)
3.1 網(wǎng)絡(luò)結(jié)構(gòu)全貌
AlexNet模型介紹如下:
- 1.AlexNet共8層,包括5個(gè)卷積層和3個(gè)全連接層
- 2.每一層都使用了Relu函數(shù)作為激活函數(shù)
- 3.AlexNet有一個(gè)特殊的計(jì)算層-LRN層,開辟性的使用了LRN(局部相應(yīng)歸一化)層
在PyTorch的version包中是包含AlexNet的官方實(shí)現(xiàn)的,我們直接使用官方版本看下網(wǎng)絡(luò)的大致結(jié)構(gòu):
3.2 計(jì)算
這里詳細(xì)描述了每一層的結(jié)構(gòu)及輸入輸出的相關(guān)計(jì)算。
四、參考文獻(xiàn)
- 1.https://blog.csdn.net/program_developer/article/details/80737724
- 2.https://blog.csdn.net/program_developer/article/details/79430119
- 3.ImageNet Classification with Deep Convolutional Neural Networks
總結(jié)
以上是生活随笔為你收集整理的白话详细解读(二)-----AlexNet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022十大科技趋势
- 下一篇: GoogLeNet补充(Inceptio