自2011年以來,深度卷積神經網絡(CNN)在圖像分類的工作中的表現就明顯優于人類,它們已經成為在計算機視覺領域的一種標準,如圖像分割,對象檢測,場景標記,跟蹤,文本檢測等。
但,想要熟練掌握訓練神經網絡的能力并不是那么容易。與先前的機器學習思維一樣,細節決定成敗。但是,訓練神經網絡有更多的細節需要處理。你的數據和硬件有什么限制?你應該是從何種網絡開始?你應該建立多少與卷積層相對的密集層?你的激勵函數怎樣去設置?即使你使用了最流行的激活函數,你也必須要用常規激活函數。
學習速率是調整神經網絡訓練最重要的超參數,也是最難優化的參數之一。太小,你可能永遠不會得到一個解決方案;太大,你可能剛好錯過最優解。如果用自適應的學習速率的方法,這就意味著你要花很多錢在硬件資源上,以此來滿足對計算的需求。
設計選擇和超參數的設置極大地影響了CNN的訓練和性能,但對于深度學習領域新進入者來說,設計架構直覺的培養可能就需要資源的稀缺性和分散性。
《神經網絡:權衡技巧》是一本主要著重于實際調優的書,出版于2003年,并在2012年再版。而深度學習的火爆始于2012年《紐約時報》報道的Geoffrey Hinton 的團隊在 Merck Drug Discovery Challenge 上的驚人成功。然而,最近幾年最先進的研究成果卻消失了。
幸運的是,美國海軍研究室的研究員 Leslie Smith發表了關于CNN架構改進和技術提升的系統性研究。下面是他所強調的最重要的一些設計模式
14種圖像分類的CNN設計模式
1) 架構遵循應用
你也許會被 Google Brain 或者 Deep Mind 這些有想象力的實驗室所發明的那些耀眼的新模型所吸引,但是其中許多要么是不可能實現的,要么是不實用的對于你的需求。或許你應該使用對你的特定應用最有意義的模型,這種模型或許非常簡單,但是仍然很強大,例如 VGG。
2) 路徑的激增
每年ImageNet Challenge的贏家都比上一年的冠軍使用更加深層的網絡。從AlexNet 到Inception到Resnets,Smith和他的團隊也觀察到“網絡的路徑數量成倍增長”的趨勢,而且,ResNet可以是不同長度的網絡的指數集合。
3) 追求簡約
更大的并不一定是更好的。在名為“Bigger is not necessarily better”的論文中,Springenberg 等人演示了如何用更少的單元實現最先進的結果。
4)增加對稱性
無論是在建筑上,還是在生物上,對稱性被認為是質量和工藝的標志。Smith 將 FractalNet 的優雅歸功于網絡的對稱性。
5) 金字塔形狀
你總是在表征能力和減少冗余或者無用信息之間權衡。CNNs通常會降低激活函數的采樣,并會增加從輸入層到最終層之間的連接通道。
6) 過渡訓練
另一個權衡是訓練準確度和泛化能力。用正則化的方法類似 drop-out 或 drop-path進行提升泛化能力,這是神經網絡的重要優勢。用比實際用例更難的問題訓練你的網絡,以提高泛化性能。
7) 覆蓋問題的空間
為了擴大你的訓練數據和提升泛化能力,要使用噪聲和人工增加訓練集的大小,例如隨機旋轉、裁剪和一些圖像操作。
8) 遞增的功能結構
當架構變得成功時,它們會簡化每一層的“工作”。在非常深的神經網絡中,每個 層只會遞增地修改輸入。在ResNets中,每一層的輸出可能類似于輸入。所以,在 實踐中,請在ResNet中使用短的跳過長度。
9) 標準化層的輸入
標準化是可以使計算層的工作變得更加容易的一條捷徑,并且在實際中可以提升訓練的準確性。批量標準化的發明者認為標準化發揮作用的原因在于處理內部的協變量,但Smith 認為,“標準化把所有層的輸入樣本放在了一個平等的基礎上(類似于單位轉換),這允許反向傳播可以更有效地訓練”。
10)輸入變換
研究表明,在Wide ResNets中,性能隨著通道數量的增加而提升,但是要權衡訓練成本與準確性。AlexNet,VGG,Inception和ResNets都是在第一層中進行輸入變換,以保證多種方式檢查輸入數據。
11)可用的資源決定層寬度
可供選擇的輸出數量并不明顯,相應的是,這取決于您的硬件功能和所需的準確性。
12)Summation joining
Summation是一種流行的合并分支的方式。在 ResNets 中,使用求和作為連接機制可以讓每一個分支都能計算殘差和整體近似。如果輸入跳躍連接始終存在,那么Summation會讓每一層學到正確地東西(例如:輸入的差別)。在任何分支都可以被丟棄的網絡(例如 FractalNet)中,你應該使用這種方式保持輸出的平滑。
13)下采樣變換
在匯聚的時候,利用級聯連接來增加輸出的數量。當使用大于1的步幅時,這會同時處理加入并增加通道的數量。
14)用于競爭的Maxout
Maxout 用在只需要選擇一個激活函數的局部競爭網絡中。用的方法包含所有的激活函數,不同之處在于 maxout 只選擇一個“勝出者”。Maxout 的一個明顯的用例是每個分支具有不同大小的內核,而 Maxout 可以尺度不變。
提示&技巧
除了這些設計模式,還有幾個技巧和訣竅,以減少架構復雜性和培訓時間。
1)使用細調過的預訓練網絡
機器學習公司 Diffbot 的 CEO Mike Tung 說,“如果你的視覺數據和 ImageNet 相似,那么用預訓練網絡會幫助你學習得更快”。低水平的CNN通常可以被重復使用,因為它們大多能夠檢測到像線條和邊緣這些常見的模式。用你自己的層替換分類層,并且用你特定的數據去訓練最后的幾個層。
2)使用 freeze-drop-path
Drop-path 會在迭代訓練的過程中隨機地刪除一些分支。Smith 測試了一種相反的方法,被稱為 freeze-path,就是一些路徑的權重是固定的、不可訓練的,而不是整體刪除。該網絡可能會獲得更高的精度,因為下一個分支比以前的分支包含更多的層,并且修正項更容易得到。
3)使用循環的學習率
學習率的實驗會消耗大量的時間,并且會讓你遇到錯誤。自適應學習率在計算上可能是非常昂貴的,但是循環學習率不會。使用循環學習率時,你可以設置一組最大最小邊界,并且在這個范圍改變它。Smith 在論文中提供了計算學習率的最大值和最小值的方法。
在實踐中,很多數據都是混亂的,標簽都是主觀性的或是缺失的,而且目標有可能是從未遇到過的。Reed 等人在文章中描述了一種給網絡預測目標注入一致性的方法。直觀地講,這可以實現,通過網絡對環境的已知表示(隱含在參數中)來過濾可能具有不一致的訓練標簽的輸入數據,并在訓練時清理該數據。
5)用有 Maxout 的 ELUs,而不是 ReLUs
ELUs是 ReLUs 的一個相對平滑的版本,它能加速收斂并提高準確度。研究調查表明,與 ReLUs 不同,ELUs 擁有負值,這就能允許它們以更低的計算復雜度將平均單位激活推向更加接近0的值,就像批量標準化一樣。如果您使用具有全連接層的 Maxout,它們是特別有效的。
-
神經網絡
+關注
關注
42文章
4765瀏覽量
100566
發布評論請先 登錄
相關推薦
評論