訓練自己的卷積神經網路(CNN)的可行方案

訓練自己的卷積神經網路(CNN)的可行方案

卷積神經網路中有更多的細節需要去管理:你所用的數據和硬體的限制是什麼?你應該以哪種網路作為開始呢?AlexNet、VGG、GoogLeNet 還是 ResNet 呢?甚至 ResNet 裡面還有 ResNet 分支選項。你應當建立多少與卷積層相對應的密集層?你使用哪種激活函數?即使你選擇了廣為流行的 ReLU,你也還要選擇是不是使用普通的 ReLU、Very Leaky ReLU、RReLU、PReLU 或通用版本的 ELU。

最難優化的參數之一就是學習率(learning rate),它是調節神經網路訓練的最重要的超參數。學習率太小,可能導致你永遠不會收斂到一個解決方案,學習率太大,可能導致你剛好跳過了最優解。即便是適應性學習率的方法,也可能在計算上過於昂貴,這取決於你的硬體資源。

1)架構要遵循應用

2)網路路徑的激增

每年的 ImageNet Challenge 的冠軍都會使用比上一屆冠軍更加深層的網路。從 AlexNet 到 Inception,再到 ResNet,Smith 注意到了「網路中路徑數量倍增」的趨勢,並且「ResNet 可以是不同長度的網路的指數集合」。

3)爭取簡單

然而,更大的並不一定是更好的。在名為「Bigger is not necessarily better」的論文中,Springenberg 等人演示了如何用更少的單元實現最先進的結果。參考:

https://arxiv.org/pdf/1412.6806.pdf?

arxiv.org

4)增加對稱性

無論是在建築上,還是在生物上,對稱性被認為是質量和工藝的標誌。Smith 將 FractalNet 的優雅歸功於網路的對稱性。

5)金字塔式的形狀

你也許經常在表徵能力和減少冗餘或者無用信息之間權衡。卷積神經網路通常會降低激活函數的採樣,並會增加從輸入層到最終層之間的連接通道。

6)過度訓練

另一個權衡是訓練準確度和泛化能力。用類似 drop-out 或者 drop-path 的方法進行正則化可以提高泛化能力,這是神經網路的重要優勢。請在比你的實際用例更加苛刻的問題下訓練你的網路,以提高泛化性能。

7)全面覆蓋問題空間

為了擴展你的訓練數據和提升泛化能力,請使用雜訊和數據增強,例如隨機旋轉、裁剪和一些圖像操作。

8)遞增的特徵構造

隨著網路結構越來越成功,它們進一部簡化了每一層的「工作」。在非常深層的神經網路中,每一層僅僅會遞增的修改輸入。在 ResNets 中,每一層的輸出和它的輸入時很相似的,這意味著將兩層加起來就是遞增。實踐中,請在 ResNet 中使用較短的跳變長度。

9)標準化層的輸入

標準化是另一個可以使計算層的工作變得更加容易的方法,在實踐中被證明可以提升訓練和準確率。批量標準化(batch normalization)的發明者認為原因在於處理內部的協變數,但是 Smith 認為,「標準化把所有層的輸入樣本放在了一個平等的基礎上(類似於一種單位轉換),這允許反向傳播可以更有效地訓練」。

10)輸入變換

研究表明,在 Wide ResNets 中,性能會隨著連接通道的增加而增強,但是你需要權衡訓練代價與準確度。AlexNet、VGG、Inception 和 ResNets 都在第一層使用了輸入變換以讓輸入數據能夠以多種方式被檢查。

11)可用的資源決指引著層的寬度

然而,可供選擇的輸出數量並不是顯而易見的,這依賴於你的硬體能力以及期望的準確度。

12)Summation Joining

Summation 是一種常用的合併分支的方式。在 ResNets 中,使用總和作為連接的機制可以讓每一個分支都能計算殘差和整體近似。如果輸入跳躍連接一直存在,那麼 summation 會讓每一層學到正確地東西(例如與輸入的差別)。在任何分支都可以被丟棄的網路(例如FractalNet)中,你應該使用這種方式類保持輸出的平滑。

13)下採樣變換

在池化的時候,利用級聯連接(concatenation joining)來增加輸出的數量。當使用大於 1 的步長時,這會同時處理連接並增加連接通道的數量。

14)用於競爭的 Maxout

Maxout 被用在你只需要選擇一個激活函數的局部競爭網路中。使用求和以及平均值會包含所有的激活函數,所以不同之處在於 maxout 只選擇一個「勝出者」。Maxout 的一個明顯的用例是每個分支具有不同大小的內核,而 Maxout 可以包含尺度不變性。

提示與技巧

除了這些設計模式之外,還出現了幾個最新的技巧和訣竅,以減少架構的複雜性和訓練時間,並且可以使用有雜訊的標籤。

1)使用調優過的預訓練網路

「如果你的視覺數據和 ImageNet 相似,那麼使用預訓練網路會幫助你學習得更快」,機器學習公司 Diffbot 的 CEO Mike Tung 解釋說。低水平的卷積神經網路通常可以被重複使用,因為它們大多能夠檢測到像線條以及邊緣這些模式。將分類層用你自己的層替換,並且用你特定的數據去訓練最後的幾個層。

2)使用 freeze-drop-path

Drop-path 會在訓練的迭代過程中隨機地刪除一些分支。Smith 測試了一種相反的方法,它被稱為 freeze-path,就是一些路徑的權重是固定的、不可訓練的,而不是整體刪除。因為下一個分支比以前的分支包含更多的層,並且正確的內容更加容易近似得到,所以網路應該會得到更好的準確度。

3)使用循環的學習率

關於學習率的實驗會消耗大量的時間,並且會讓你遇到錯誤。自適應學習率在計算上可能是非常昂貴的,但是循環學習率不會這樣。使用循環學習率(CLR)時,你可以設置一組最大最小邊界,在邊界範圍內改變學習率。Smith 甚至還在論文《Cyclical Learning Rates for Training Neural Networks》中提供了計算學習率的最大值和最小值的方法。參考:arxiv.org/pdf/1506.0118

4)在有雜訊的標籤中使用 bootstrapping

在現實中,很多數據都是混亂的,標籤都是主觀性的或者是缺失的,而且預測的對象可能是訓練的時候未曾遇到過的。Reed 等人在文章《TRAINING DEEP NEURAL NETWORKS ON NOISY LABELS WITH BOOTSTRAPPING》中描述了一種給網路預測目標註入一致性的方法。直觀地講,這可以奏效,通過使網路利用對環境的已知表示(隱含在參數中)來過濾可能具有不一致的訓練標籤的輸入數據,並在訓練時清理該數據。參考:arxiv.org/pdf/1412.6596

5)採用有 Maxout 的 ELU,而不是 ReLU

ELU 是 ReLU 的一個相對平滑的版本,它能加速收斂並提高準確度。與 ReLU 不同,ELU 擁有負值,允許它們以更低的計算複雜度將平均單位激活推向更加接近 0 的值,就像批量標準化一樣參考論文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》,arxiv.org/pdf/1511.0728如果您使用具有全連接層的 Maxout,它們是特別有效的。

原文鏈接:

機器之心:改進卷積神經網路,你需要這14種設計模式?

zhuanlan.zhihu.com圖標機器之心?

mp.weixin.qq.com圖標

這篇文章被ICLR2017拒掉了

https://openreview.net/forum?id=SJQNqLFgl&noteId=SJQNqLFgl?

openreview.net


推薦閱讀:

TAG:深度學習DeepLearning | 神經網路 | 機器學習 |