作者:張旭 編輯:王抒偉 本文4794字27圖,閱讀約11分鐘 算了 想看多久看多久 ![]() 一、卷積層 1.CNN中卷積層的作用 2.卷積層如何工作 3.AlexNet中的卷積層 二、池化層與激活層 1.池化層 2.激活層 三、全連接層 1.全連接層的作用 2.AlexNet中的全連接層 四、Softmax層 1.Softmax的作用 2.AlexNet中的Softmax 五、AlexNet中60M參數 六、CNN的發(fā)展 背景: 2012年AlexNet在ImageNet大賽上一舉奪魁,雖然后來大量比AlexNet更快速更準確的卷積神經網絡結構相繼出現,但是AlexNet作為開創(chuàng)者依舊有著很多值得學習參考的地方,所以下面我們將從AlexNet開刀,理解卷積神經網絡的一般結構。 先看看AlexNet的一些參數和結構圖: 結構圖: 由于當時的顯卡容量問題,AlexNet 的60M個參數無法全部放在一張顯卡上操作,所以采用了兩張顯卡分開操作的形式,其中在C3,R1,R2,R3層上出現交互,所謂的交互就是通道的合并,是一種串接操作。 卷積層: 1.CNN中卷積層的作用:
CNN中的卷積層,在很多網絡結構中會用conv來表示,也就是convolution的縮寫。 卷積層在CNN中扮演著很重要的角色——特征的抽象和提取,這也是CNN區(qū)別于傳統(tǒng)的ANN或SVM的重要不同,在傳統(tǒng)機器學習算法中,我需要人為的指定特征是什么 比如經典的HOG+SVM的行人檢測方案,HOG就是一種特征提取方法。 所以我們送入SVM分類器中的其實HOG提取出來的特征,而不是圖片的本身,所以有時特征提取算法的選擇會比分類模型更為重要。 而在CNN中,特征提取的工作在卷積層自動完成了,越深越寬的卷積層一般來說就會有更好的表達能力,所以CNN是一種端對端的訓練,我們輸入的就是原始的數據,而不是人工提取的特征. 從這個角度上再思考一步的話,其實CNN可以看做一個自學習的特征提取+softmax分類器(這里暫不考慮全連接的邏輯判斷層,因為在后來他就被取消了)。 2.卷積層如何工作: CNN中的卷積層操作與圖像處理中的卷積是一樣的,都是一個卷積核對圖像做自上而下,自左而右的加權求和操作,不同之處在于,在傳統(tǒng)圖像處理中,我們人為指定卷積核,比如Soble,我們可以提取出來圖像的水平邊緣和垂直邊緣特征。 而在CNN中,卷積核的尺寸是人為指定的,但是卷積核內的數全部都是需要不斷學習得到的。 比如一個卷積核的尺寸為3*3*3,分別是寬,高和厚度,那么這一個卷積核中的參數有27個。 在這里需要說明一點: 卷積核的厚度=被卷積的圖像的通道數 這兩個等式關系在理解卷積層中是非常重要的??! 舉一個例子,輸入圖像尺寸5*5*3(寬/高/通道數),卷積核尺寸:3*3*3(寬/高/厚度),步長:1,邊界填充:0,卷積核數量:1。 用這樣的一個卷積核去卷積圖像中某一個位置后,是將該位置上寬3,高3,通道3上27個像素值分別乘以卷積核上27個對應位置的參數,得到一個數,依次滑動,得到卷積后的圖像,這個圖像的通道數為1(與卷積核個數相同),圖像的高寬尺寸如下公式: 3.AlexNet中的卷積層: 在AlexNet中,卷積層是上圖所示的C1…..C5,一共5層。而每次卷積后的結果在上圖中可以看到,比如經過卷積層C1后,原始的圖像變成了55*55的尺寸,一共有96個通道,分布在2張3G內存的顯卡上 所以上圖中一個立方體的尺寸是55*55*48,48是通道數目(后面會詳細的說明).而在這個立方體里面還有一個5*5*48的小立方體,這個就是C2卷積層的核尺寸,48是核的厚度(后面會詳細說明)。 這樣我們就能看到它每一層的卷積核尺寸以及每一層卷積之后的尺寸。我們按照上面的說明,推導下每一層的卷積操作: 輸入層:224*224*3
針對這五層卷積,說明一下三點: 因為:(224-11+3)/4+1=55
所以單張顯卡上的通道數為48,2為顯卡個數。
看下上面這張圖,由于分顯卡操作,上一層的輸出通道數(也就是卷積核的個數)總會是下一層卷積層卷積核厚度的2倍。 但是C3是特殊的,這是為啥呢????? 因為在這里做了通道的合并,也就是一種串接操作,所以一個卷積核卷積的不再是單張顯卡上的圖像,而是兩張顯卡的圖像串在一起之后的圖像,串在一起之后的通道數就是256,所以卷積核的厚度為256。 這也就是為什么,在這個圖上要畫兩個3*3*128的卷積核,他想表達的意思就是實際的卷積核尺寸是3*3*256?。ㄉ厦孢@個結論是個人理解) 池化層與激活層: 嚴格上說池化層與激活層不屬于CNN中的單獨的層,也不記入CNN的層數內,所以我們一般直說AlexNet一共8層,有5層卷積層與3層全連接層。 但是在這里為了邏輯上清晰,就把他們單獨拿出來說明下 1.池化層 池化操作(Pooling)用于卷積操作之后,其作用在于特征融合和降維,其實也是一種類似卷積的操作,只是池化層的所有參數都是超參數,都是不用學習得到的。 上面這張圖解釋了最大池化(Max Pooling)的操作過程,核的尺寸為2*2,步長為2,最大池化的過程是將2*2尺寸內的所有像素值取最大值,作為輸出通道的像素值。
2.激活層 池化操作用于卷積層內,而激活操作則在卷積層和全連接層都會用到,在這里只簡單說明下,具體內容大家可以在 理解激活函數在神經網絡模型構建中的作用這個博客中了解。 在全連接層中的激活過程就很好理解了,因為全連接層內所有的神經元的輸出都是一個數,只要這個數x>0,則x=x;x<>
全連接層: 1.全連接層的作用 CNN中的全連接層與傳統(tǒng)神經網絡中的作用是一樣的,負責邏輯推斷,所有的參數都需要學習得到。 有一點區(qū)別在于第一層的全連接層用于鏈接卷積層的輸出,它還有一個作用是去除空間信息(通道數),是一種將三維矩陣變成向量的過程(一種全卷積操作),其操作如下: 輸入圖像是W*H*C,那么卷積核的尺寸為W*H*C,這樣的話整個輸入圖像就變成了一個數,一共有k個數(第一層全連接層后的神經元個數),就有K個這樣的W*H*C的卷積核。 所以全連接層(尤其是第一層)的參數量是非常可怕的,也是由于這個弊端,后來的網絡將全連接取消了,這個有機會再說。 2.AlexNet中的全連接層 再回到AlexNet結構,R1,R2,R3就是全連接層。 R2,R3很好理解,在這里主要說明下R1層: 所以串接后的通道數是256,全卷積的卷積核尺寸也就是13*13*256,一個有4096個這樣尺寸的卷積核分別對輸入圖像做4096次的全卷積操作,最后的結果就是一個列向量,一共有4096個數。 這些數的排布其實就相當于傳統(tǒng)神經網了里面的第一個隱藏層而已,通過R1后,后面的鏈接方式和ANN就沒有區(qū)別了。要學習的參數也從卷積核參數變成了全連接中的權系數。 Softmax層: 1.Softmax的作用 Softmax層也不屬于CNN中單獨的層,一般要用CNN做分類的話,我們習慣的方式是將神經元的輸出變成概率的形式,Softmax就是做這個的: 這個很好理解,顯然Softmax層所有的輸出相加為1。而某一個輸出的就是概率,最后我們按照這個概率的大小確定到底屬于哪一類。 2.AlexNet中的Softmax AlexNet最后的分類數目為1000,也就是最后的輸出為1000,輸入為4096,中間通過R3鏈接,R3就是最后一層了,全連接的第3層,所有層數的第8層。 AlexNet中60M參數: AlexNet只有8層,但是它需要學習的參數有60000000(看看這數量級)個,相比如他的層數,這是一個很可怕的數字了 我們來計算下這些參數都是怎么來的: C1:96*11*11*3(卷積核個數/寬/高/厚度) 34848個 在R1中卷積核尺寸是6*6*256而不是13*13*256是因為經過了最大池化??梢钥吹剑B接層(尤其是第一層)參數數量占了絕大部分。 CNN的發(fā)展: 在AlexNet問世之后,CNN以一個很快的速度發(fā)展,截止到2016年,已經有了多代的網絡結構問世,深度、寬度上也越來越大,效率和正確率上也越來越好: NiN 引入1*1卷積層(Bottlenecklayer)和全局池化; DenseNet在ResNet的直連思想基礎上,又做了進一步改進,將當前層的輸出特征向之后所有的層做直連。
PS: 如果你懂一些ANN相關知識,更好喔,如果你不懂,留言給小編,小編給你好好打一下基礎。 多謝大家支持公眾號 關于本文CNN相關知識和其他問題 歡迎大家加群在群中探討 歡迎留言或贊賞。 推 薦 閱 讀 掃描燕哥微信號 拉你進機器學習大牛群。 福利滿滿,名額已不多… |
|