關於卷積神經網路cnn,網路和文獻中有非常多的資料,我在工作/研究中也用了好一段時間各種常見的model了,就想著簡單整理一下,以備查閱之需。如果讀者是初接觸cnn,建議可以先看一看「deep learning(深度學習)學習筆記整理系列」中關於cnn的介紹[1],是介紹我們常說的lenet為例,相信會對初學者有幫助。
lenet,2023年
alexnet,2023年
googlenet,2023年
vgg,2023年
deep residual learning,2023年
就從lenet說起,可以看下caffe中lenet的配置檔案(點我),可以試著理解每一層的大小,和各種引數。由兩個卷積層,兩個池化層,以及兩個全連線層組成。 卷積都是5*5的模板,stride=1,池化都是max。下圖是乙個類似的結構,可以幫助理解層次結構(和caffe不完全一致,不過基本上差不多)
2023年,imagenet比賽冠軍的model——alexnet [2](以第一作者alex命名)。caffe的model檔案在這裡。說實話,這個model的意義比後面那些model都大很多,首先它證明了cnn在複雜模型下的有效性,然後gpu實現使得訓練在可接受的時間範圍內得到結果,確實讓cnn和gpu都大火了一把,順便推動了有監督dl的發展。
模型結構見下圖,別看只有寥寥八層(不算input層),但是它有60m以上的引數總量,事實上在參數量上比後面的網路都大。
這個圖有點點特殊的地方是卷積部分都是畫成上下兩塊,意思是說吧這一層計算出來的feature map分開,但是前一層用到的資料要看連線的虛線,如圖中input層之後的第一層第二層之間的虛線是分開的,是說二層上面的128map是由一層上面的48map計算的,下面同理;而第三層前面的虛線是完全交叉的,就是說每乙個192map都是由前面的128+128=256map同時計算得到的。
alexnet有乙個特殊的計算層,lrn層,做的事是對當前層的輸出結果做平滑處理。下面是我畫的示意圖:
前後幾層(對應位置的點)對中間這一層做一下平滑約束,計算方法是:
具體開啟alexnet的每一階段(含一次卷積主要計算)來看[2][3]:
具體計算都在圖裡面寫了,要注意的是input層是227*227,而不是*****裡面的224*224,這裡可以算一下,主要是227可以整除後面的conv1計算,224不整除。如果一定要用224可以通過自動補邊實現,不過在input就補邊感覺沒有意義,補得也是0。
和上面基本一樣,唯獨需要注意的是group=2,這個屬性強行把前面結果的feature map分開,卷積部分分成兩部分做。
這裡有一層特殊的dropout層,在alexnet中是說在訓練的以1/2概率使得隱藏層的某些neuron的輸出為0,這樣就丟到了一半節點的輸出,bp的時候也不更新這些節點。
(7)
fc - relu - dropout
(8)fc - softmax
以上圖借用[3],感謝。
googlenet[4][5],14年比賽冠軍的model,這個model證明了一件事:用更多的卷積,更深的層次可以得到更好的結構。(當然,它並沒有證明淺的層次不能達到這樣的效果)
這個model基本上構成部件和alexnet差不多,不過中間有好幾個inception的結構:
是說一分四,然後做一些不同大小的卷積,之後再堆疊feature map。
計算量如下圖,可以看到引數總量並不大,但是計算次數是非常大的。
vgg有很多個版本,也算是比較穩定和經典的model。它的特點也是連續conv多,計算量巨大(比前面幾個都大很多)。具體的model結構可以參考[6],這裡給乙個簡圖。基本上組成構建就是前面alexnet用到的。
下面是幾個model的具體結構,可以查閱,很容易看懂。
這個model是2023年底最新給出的,也是15年的imagenet比賽冠軍。可以說是進一步將conv進行到底,其特殊之處在於設計了「bottleneck」形式的block(有跨越幾層的直連)。最深的model採用的152層!!下面是乙個34層的例子,更深的model見**。
其實這個model構成上更加簡單,連lrn這樣的layer都沒有了。
block的構成見下圖:
ok,到這裡把常見的最新的幾個model都介紹完了,可以看到,目前cnn model的設計思路基本上朝著深度的網路以及更多的卷積計算方向發展。雖然有點暴力,但是效果上確實是提公升了。當然,我認為以後會出現更優秀的model,方向應該不是更深,而是簡化。是時候動一動卷積計算的形式了
機器學習,深度學習,神經網路,深度神經網路
先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...
如何除錯神經網路(深度神經網路)?
神經網路的除錯基本上難於絕大多數的程式,因為大部分的神經網路的錯誤不會以型別錯誤或執行時錯誤顯現,他們只是使得網路難以收斂。如果你是乙個新人,這可能會讓你非常沮喪。乙個有經驗的網路訓練者可以系統的克服這些困難,儘管存在著大量似是而非的錯誤資訊,比如 你的網路訓練的不太好。對缺少經驗的人來說,這個資訊...
深度學習 深度神經網路
神經網路是由乙個個神經元相互連線並按層次排列構成的,深度神經網路是有任意層的神經網路,這裡的深度是指層次的多,而不是神經元數量的多。有任意層,那麼就要有乙個迴圈來負責遍歷每一層進行計算。所以深度神經網路的計算形式,就必須要適應這個迴圈結構。我們先來說說神經元吧 對於多神經元神經網路,其實也是一樣的。...