AlexNet詳解3


Reference.

Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural Networks [J]. Advances in Neural Information Processing Systems, 2012, 25(2):2012.
https://code.google.com/p/cuda-convnet/


說來慚愧,看了深度學習快五個月了,前幾周的Paper Review上剛剛注意到AlexNet,那果斷用啊,話說LeNet雖然好用,那也是快20年以前的網絡結構了,AlexNet是2012年的結構,不管怎么說肯定好呀。貼一張網絡結構的歷史


鬧,這個AlexNet就是我今天要講的東西

AlexNet是2012年ImageNet競賽冠軍獲得者Alex Krizhevsky設計的,這個網絡結構和LeNet有什么區別呢?

1 卷積神經網絡的組成部分

套路是一樣的,先介紹一下深度學習的卷積神經網絡(ConvNet)的組成吧。

1.1 卷積層(Convolutional Layer)

這個不多說,學過信號的都大概知道卷積是個什么玩意兒,不懂的話可以參考額。。。別參考了,好好學基礎知識去吧~要說明的一點是這個卷積的過程很好地模擬了人的視覺神經系統的過程,聽老師說人眼看東西也就是一個卷積的過程哦,這個我可不能保證哦~


卷積的動態過程

1.2 降采樣層(Pooling Layer)

降采樣就是用一個值來代替一塊區域,這個值可以是區域的平均值,最大值,最小值等等,反正有代表性就好了,這個層的目的就是減少數據量。


降采樣過程

1.3 激活函數層(Activation Layer)

激活函數的作用是把卷積后的結果壓縮到某一個固定的范圍,這樣可以一直保持一層一層下去的數值范圍是可控的。比如一些常見的激活函數

  • sigmoid:控制在[0, 1]
  • tanh:控制在[-1, 1]
  • ReLU:控制在[0, 正無窮]
  • 還有好多新的激活函數,這兒就不舉例了,知道它們的作用就OK

    我用的是ReLU激活函數

1.4 標准化層(Normalization Layer)


沒什么大不了的,就用了個公式來標准化一下

1.5 全連接層(Full Connected Layer)

全連接層給人的感覺就是人工神經網絡的那樣,把所有的網絡結點都用一些帶權重的值連接起來。這個層一般出現在CNN的后面部分,這個層很長,可以作為圖像的特征向量來用,也有論文是把全連接層放到SVM,RF,Adaboost,ANN等傳統的分類器里頭分類,來代替CNN最后的softmax層,那我也做過這個實驗,得到的結果並不好,我不知道這些大牛是怎么弄的。這兒打個問號?


顧名思義,所有的結點都是連接起來的,這兒的權重會特別多,因為全連接了嘛

1.6 扔掉層(Dropout Layer)

這個層我不知道怎么翻,反正作用就是把一些沒用的結點給扔掉。

  • 這個思路參考了人的大腦的實際運行狀態,研究表明大腦在分析圖像的過程中真正被激活的神經元並不多,具體哪些被激活靠得就是先前的學習,和留下來的記憶。那如果沒有這個dropout層,我們的CNN在判斷所有的圖像是相當於所有的結點都激活了,這樣和現實的情況不符,所以我們要模擬大腦,把一下沒什么用的結點給扔掉。
  • 這個層的作用是加快運算速度,防止過擬合,讓網絡更加的普適,更加有所謂的“魯棒性”——裝個逼,其實就是更好哈哈:)
  • 實現的方法是設置一個閾值,如果這個結點與結點之間的權重高於這個值,那么說明這是強關系,我們保留,如果權重低於這個值,說明關系不大,我們把它扔掉得了。!!這個實現方法說錯了,特別感謝@hzzzol同學的指正,正確的解釋應該是:
  • Dropout是在訓練過程中以一定概率1-p將隱含層節點的輸出值清0,而用bp更新權值時,不再更新與該節點相連的權值。什么意思,就是這個就是個概率問題,和權值的大小,激活程度無關哦,被抽中的結點無條件被丟掉。(Dropout簡單理解DropConnect簡單理解

由於權重太多,那我們就把一些沒用的扔掉
  • 這個層常常出現在全連接層的地方,因為全連接層中的結點與結點連接太多了,消耗了CNN中絕大多數的內存資源,而這中間有一大部分是沒有必要的。

    你看,最后幾層多浪費!

2 LeNet與AlexNet

以上是對CNN的一個簡單的闡述,當然啰,比較瑣碎,一個完整的CNN結構是由多個1)卷積層,2)降采樣層,3)激活函數層,4)標准化層,5)全連接層和6)扔掉層 有序地拼接而成的,那么又來了這個問題,LeNet和AlexNet的拼法到底有什么不同呢?

2.1 LeNet

再次祭出這幅經典的LeNet圖


太經典啦!


LeNet的成功應用案例是手寫字體的識別,就是給一堆手寫的阿拉伯數字,用網絡來判斷這是個什么字。應用的就是當時的郵局等地方,還有門牌號。其實傳統的分類器已經可以做到很好的水平了(正確率在96%吧大概),那LeNet作為新起之秀,正確率達到了98%,那在當時就很有名啊,賺了好多好多錢呢,然后卷積神經網絡的研究就開始火了呀。到了2012出現AlexNet,以卷積神經網絡為核心的深度學習就開始燙了哈哈。
我們可以看到LeNet中有1)卷積層,2)降采樣層(就是Subsampling),和3)全連接層,當然嘍,應該是由激活函數層的,只是圖中沒有畫,當時用的應該是sigmoid函數吧,反正現在不用了。你可以發現剛剛提到的扔掉層(dropout)和標准化層沒有用誒,為什么呢,因為
當時還沒有這個啊==b
可以注意到LeNet的

  • 輸入尺寸是32*32像素
  • 卷積層:3個
  • 降采樣層:2個
  • 全連接層:1個
  • 輸出:10個類別(數字0-9的概率)

然后softmax根據網絡輸出,也就是這個圖像是0-9的概率值大小來判斷輸入的是多少,比如輸出的是個結點,4的值是0.9,其他都是0.001這樣的,那么就是說這個輸入的圖像就是4了,然后根據這個輸出的概率,我們可以排列一下輸入圖像輸入某一類的概率值,從大到小,取3個比如,ImageNet競賽的規則就是這三個里頭有一個是對的就當你的網絡預測是對的,不然就是預測錯誤。

2.2 AlexNet

我個人的感覺是AlexNet更強調了全連接層的作用,它用了兩個全連接層,那么為了減少權重的數目,才引出了dropout這個概念,其他的區別其實不能叫做區別

  • 輸入尺寸:227*227像素(因為競賽的需要)
  • 卷積層:好多(因為輸入尺寸的需要)
  • 降采樣層:好多(因為輸入尺寸的需要)
  • 標准化層:這個反正就是一個公式
  • 輸出:1000個類別(因為競賽的需要)

這兒要說明一下:不要以為卷積層的個數、降采樣層的個數、卷積核的尺寸、卷積核的個數這些網絡細節會對最后的訓練結果產生什么了不得的影響,這些就按照你的輸入圖像的尺寸來就行了。沒有什么說頭,你也可以去參考現在已經有的網絡結構去設計,都可以的。這些參數大多都是手動調的,依據就是看看學習的結果如何。

放一下AlexNet的結構圖


整體AlexNet結構圖

卷積神經網絡的結構並不是各個層的簡單組合,它是由一個個“模塊”有機組成的,在模塊內部,各個層的排列是有講究的。比如AlexNet的結構圖,它是由八個模塊組成的。


模塊一

模塊二

模塊一和模塊二是CNN的前面部分,

卷積-激活函數-降采樣-標准化

構成了一個計算模塊,這個可以說是一個卷積過程的標配,CNN的結構就是這樣,從宏觀的角度來看,就是一層卷積,一層降采樣這樣循環的,中間適當地插入一些函數來控制數值的范圍,以便后續的循環計算。


模塊三、四

模塊三和四也是兩個卷積過程,差別是少了降采樣,原因就跟輸入的尺寸有關,特征的數據量已經比較小了,所以沒有降采樣,這個都沒有關系啦。


模塊五

模塊五也是一個卷積過程,和模塊一、二一樣事兒的,就是重復重復。好了,可以總結一下,模塊一到五其實都是在做卷積運算,根據輸入的圖像尺寸在適當決定哪幾層要用降采樣。然后再加上一些必要的函數來控制數值,就可以了。模塊五輸出的其實已經是6\6的小塊兒了(一般我設計都是到1\1的小塊,由於ImageNet的圖像大,所以6\6也正常的。)
為什么原來輸入的227\
227像素的圖像會變成6\*6這么小呢,主要原因是歸功於降采樣,當然啰,卷積層也會讓圖像變小,如圖,一層層的下去,圖像越來越小


CNN過程

模塊六

模塊七、八

模塊六和七就是所謂的全連接層了,全連接層就和人工神經網絡的結構一樣的,結點數超級多,連接線也超多,所以這兒引出了一個dropout層,來去除一部分沒有足夠激活的層,其實我記的沒錯的話這個思想在ANN里頭早就有了。
模塊八就是一個輸出的結果,結合上softmax做出分類。有幾類,輸出幾個結點,每個結點保存的是屬於該類別的概率值。:)


好了,講完了,就醬。
GoogLeNet和VGG我現在還沒有看呢,估計應該套路和LeNet和AlexNet差不多,可能網絡的深度加了,超大規模的GPU了,或者網絡更加精簡了,反正整體的思路是不變的,我回頭還是要看一看的:)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM