CNN卷積層相關計算公式

師兄最近找工作筆試有遇到過~容易忘

作者:機器之心
鏈接:https://www.zhihu.com/question/52668301/answer/131573702
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

preview

如果我們在輸入內容的周圍應用兩次零填充,那麼輸入量就爲 32×32×3。然後,當我們應用帶有 3 個 5×5×3 的過濾器,以 1 的步幅進行處理時,我們也可以得到一個 32×32×3 的輸出


如果你的步幅爲 1,而且把零填充設置爲

preview

K 是過濾器尺寸,那麼輸入和輸出內容就總能保持一致的空間維度。


計算任意給定卷積層的輸出的大小的公式是


其中 O 是輸出尺寸,K 是過濾器尺寸,P 是填充,S 是步幅。




選擇超參數


我們怎麼知道要用多少層、多少卷積層、過濾器尺寸是多少、以及步幅和填充值多大呢?這些問題很重要,但又沒有一個所有研究人員都在使用的固定標準。這是因爲神經網絡很大程度上取決於你的數據類型。圖像的大小、複雜度、圖像處理任務的類型以及其他更多特徵的不同都會造成數據的不同。對於你的數據集,想出如何選擇超參數的一個方法是找到能創造出圖像在合適尺度上抽象的正確組合。


ReLU(修正線性單元)層


在每個卷積層之後,通常會立即應用一個非線性層(或激活層)。其目的是給一個在卷積層中剛經過線性計算操作(只是數組元素依次(element wise)相乘與求和)的系統引入非線性特徵。過去,人們用的是像雙曲正切和 S 型函數這樣的非線性方程,但研究者發現 ReLU 層效果好得多,因爲神經網絡能夠在準確度不發生明顯改變的情況下把訓練速度提高很多(由於計算效率增加)。它同樣能幫助減輕梯度消失的問題——由於梯度以指數方式在層中消失,導致網絡較底層的訓練速度非常慢。ReLU 層對輸入內容的所有值都應用了函數 f(x) = max(0, x)。用基本術語來說,這一層把所有的負激活(negative activation)都變爲零。這一層會增加模型乃至整個神經網絡的非線性特徵,而且不會影響卷積層的感受野。

作者:知乎用戶
鏈接:https://www.zhihu.com/question/29021768/answer/43488153
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

第一個問題:爲什麼引入非線性激勵函數?
如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數,很容易驗證,無論你神經網絡有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。
正因爲上面的原因,我們決定引入非線性函數作爲激勵函數,這樣深層神經網絡就有意義了(不再是輸入的線性組合,可以逼近任意函數)。最早的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。

第二個問題:爲什麼引入Relu呢?
第一,採用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而採用Relu激活函數,整個過程的計算量節省很多。
第二,對於深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失,參見
@Haofeng Li答案的第三點),從而無法完成深層網絡的訓練。

第三,Relu會使一部分神經元的輸出爲0,這樣就造成了網絡的稀疏性,並且減少了參數的相互依存關係,緩解了過擬合問題的發生。



  • 參見 Geoffrey Hinton(即深度學習之父)的論文:Rectified Linear Units Improve Restricted Boltzmann Machines


池化層


在幾個 ReLU 層之後,程序員也許會選擇用一個池化層(pooling layer)。它同時也被叫做下采樣(downsampling)層。在這個類別中,也有幾種可供選擇的層,最受歡迎的就是最大池化( max-pooling)。它基本上採用了一個過濾器(通常是 2x2 的)和一個同樣長度的步幅。然後把它應用到輸入內容上,輸出過濾器卷積計算的每個子區域中的最大數字。

preview

帶有 2×2 和過濾器的且步幅爲 2 的最大池化的例子


池化層還有其他選擇,比如平均池化(average pooling)和 L2-norm 池化 。這一層背後的直觀推理是:一旦我們知道了原始輸入(這裏會有一個高激活值)中一個特定的特徵,它與其它特徵的相對位置就比它的絕對位置更重要。可想而知,這一層大幅減小了輸入卷的空間維度(長度和寬度改變了,但深度沒變)。這到達了兩個主要目的。第一個是權重參數的數目減少到了75%,因此降低了計算成本。第二是它可以控制過擬合(overfitting)。這個術語是指一個模型與訓練樣本太過匹配了,以至於用於驗證和檢測組時無法產生出好的結果。出現過擬合的表現是一個模型在訓練集能達到 100% 或 99% 的準確度,而在測試數據上卻只有50%。


Dropout 層


如今,Dropout 層在神經網絡有了非常明確的功能。上一節,我們討論了經過訓練後的過擬合問題:訓練之後,神經網絡的權重與訓練樣本太過匹配以至於在處理新樣本的時候表現平平。Dropout 的概念在本質上非常簡單。Dropout 層將「丟棄(drop out)」該層中一個隨機的激活參數集,即在前向通過(forward pass)中將這些激活參數集設置爲 0。簡單如斯。既然如此,這些簡單而且似乎不必要且有些反常的過程的好處是什麼?在某種程度上,這種機制強制網絡變得更加冗餘。這裏的意思是:該網絡將能夠爲特定的樣本提供合適的分類或輸出,即使一些激活參數被丟棄。此機制將保證神經網絡不會對訓練樣本「過於匹配」,這將幫助緩解過擬合問題。另外,Dropout 層只能在訓練中使用,而不能用於測試過程,這是很重要的一點。


  • 參考 Geoffrey Hinton 的論文:Dropout: A Simple Way to Prevent Neural Networks from Overfitting


網絡層中的網絡


網絡層中的網絡指的是一個使用了 1 x 1 尺寸的過濾器的卷積層。現在,匆匆一瞥,你或許會好奇爲何這種感受野大於它們所映射空間的網絡層竟然會有幫助。然而,我們必須謹記 1x1 的卷積層跨越了特定深度,所以我們可以設想一個1 x 1 x N 的卷積層,此處 N 代表該層應用的過濾器數量。該層有效地使用 N 維數組元素依次相乘的乘法,此時 N 代表的是該層的輸入的深度。


  • 參閱 Min Lin 的論文:Network In Network


分類、定位、檢測、分割


本系列第一部分使用的案例中,我們觀察了圖像分類任務。這個過程是:獲取輸入圖片,輸出一套分類的類數(class number)。然而當我們執行類似目標定位的任務時,我們要做的不只是生成一個類標籤,而是生成一個描述圖片中物體suo所在位置的邊界框。


我們也有目標檢測的任務,這需要圖片上所有目標的定位任務都已完成。


因此,你將獲得多個邊界框和多個類標籤。


最終,我們將執行目標分割的任務:我們需要輸出類標籤的同時輸出圖片中每個目標的輪廓。

preview

關於目標檢測、定位、分割的論文有很多,這裏就不一一列出了。


遷移學習


如今,深度學習領域一個常見的誤解在於沒有谷歌那樣的巨量數據,你將沒有希望創建一個有效的深度學習模型。儘管數據是創建網絡中至關重要的部分,遷移學習的思路將幫助我們降低數據需求。遷移學習指的是利用預訓練模型(神經網絡的權重和參數都已經被其他人利用更大規模的數據集訓練好了)並用自己的數據集將模型「微調」的過程。這種思路中預訓練模型扮演着特徵提取器的角色。你將移除網絡的最後一層並用你自有的分類器置換(取決於你的問題空間)。然後凍結其他所有層的權重並正常訓練該網絡(凍結這些層意味着在梯度下降/最優化過程中保持權值不變)。


讓我們探討一下爲什麼做這項工作。比如說我們正在討論的這個預訓練模型是在 ImageNet (一個包含一千多個分類,一千四百萬張圖像的數據集)上訓練的 。當我們思考神經網絡的較低層時,我們知道它們將檢測類似曲線和邊緣這樣的特徵。現在,除非你有一個極爲獨特的問題空間和數據集,你的神經網絡也會檢測曲線和邊緣這些特徵。相比通過隨機初始化權重訓練整個網絡,我們可以利用預訓練模型的權重(並凍結)聚焦於更重要的層(更高層)進行訓練。如果你的數據集不同於 ImageNet 這樣的數據集,你必須訓練更多的層級而只凍結一些低層的網絡。


  • Yoshua Bengio (另外一個深度學習先驅 )論文:How transferable are features in deep neural networks?

  • Ali Sharif Razavian 論文:CNN Features off-the-shelf: an Astounding Baseline for Recognition

  • Jeff Donahue 論文:DeCAF: A Deep Convolutional Activation Feature for Generic Visual Recognition


數據增強技術


現在我們對卷積網絡中數據的重要性可能已經感到有些麻木了,所以我們來談下如何利用一些簡單的轉換方法將你現有的數據集變得更大。正如我們之前所提及的,當計算機將圖片當作輸入時,它將用一個包含一列像素值的數組描述(這幅圖)。若是圖片左移一個像素。對你和我來說,這種變化是微不可察的。然而對計算機而已,這種變化非常顯著:這幅圖的類別和標籤保持不變,數組卻變化了。這種改變訓練數據的數組表徵而保持標籤不變的方法被稱作數據增強技術。這是一種人工擴展數據集的方法。人們經常使用的增強方法包括灰度變化、水平翻轉、垂直翻轉、隨機編組、色值跳變、翻譯、旋轉等其他多種方法。通過利用這些訓練數據的轉換方法,你將獲得兩倍甚至三倍於原數據的訓練樣本。


深度 | 從入門到精通:卷積神經網絡初學者指南(附論文)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章