14種模型設計幫你改進你的卷積神經網路(CNN)

塵封的記憶0發表於2017-10-20

摘要: 這14 種原創設計模式可以幫助沒有經驗的研究者去嘗試將深度學習與新應用結合,對於那些沒有機器學習博士學位的人來說是一個很好的起點。


自2011年以來,深度卷積神經網路(CNN)在影象分類的工作中的表現就明顯優於人類,它們已經成為在計算機視覺領域的一種標準,如影象分割,物件檢測,場景標記,跟蹤,文字檢測等。


但,想要熟練掌握訓練神經網路的能力並不是那麼容易。與先前的機器學習思維一樣,細節決定成敗。但是,訓練神經網路有更多的細節需要處理。你的資料和硬體有什麼限制?你應該是從何種網路開始?你應該建立多少與卷積層相對的密集層?你的激勵函式怎樣去設定?即使你使用了最流行的啟用函式,你也必須要用常規啟用函式。


學習速率是調整神經網路訓練最重要的超引數,也是最難優化的引數之一。太小,你可能永遠不會得到一個解決方案;太大,你可能剛好錯過最優解。如果用自適應的學習速率的方法,這就意味著你要花很多錢在硬體資源上,以此來滿足對計算的需求。


設計選擇和超引數的設定極大地影響了CNN的訓練和效能,但對於深度學習領域新進入者來說,設計架構直覺的培養可能就需要資源的稀缺性和分散性。 



《神經網路:權衡技巧》是一本主要著重於實際調優的書,出版於2003年,並在2012年再版。而深度學習的火爆始於2012年《紐約時報》報導的Geoffrey Hinton 的團隊在 Merck Drug Discovery Challenge 上的驚人成功。然而,最近幾年最先進的研究成果卻消失了。


幸運的是,美國海軍研究室的研究員 Leslie Smith發表了關於CNN架構改進和技術提升的系統性研究。下面是他所強調的最重要的一些設計模式

14種影象分類的CNN設計模式


根據 Smith 的觀點,“這14 種原創設計模式可以幫助沒有經驗的研究者去嘗試將深度學習與新應用結合”。儘管高階的AI研究員可以依靠直覺、經驗以及針對性的實驗,但這些建議對於那些沒有機器學習博士學位的人來說是一個很好的起點。

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 在論文中提供了計算學習率的最大值和最小值的方法。
4)在有噪聲的標籤中使用 bootstrapping
在實踐中,很多資料都是混亂的,標籤都是主觀性的或是缺失的,而且目標有可能是從未遇到過的。Reed 等人在文章中描述了一種給網路預測目標註入一致性的方法。直觀地講,這可以實現,通過網路對環境的已知表示(隱含在引數中)來過濾可能具有不一致的訓練標籤的輸入資料,並在訓練時清理該資料。
5)用有 Maxout 的 ELUs,而不是 ReLUs
ELUs是 ReLUs 的一個相對平滑的版本,它能加速收斂並提高準確度。研究調查表明,與 ReLUs 不同,ELUs 擁有負值,這就能允許它們以更低的計算複雜度將平均單位啟用推向更加接近0的值,就像批量標準化一樣。如果您使用具有全連線層的 Maxout,它們是特別有效的。


不懂的可以加我的QQ群:522869126(語音訊號處理) 歡迎你

到來哦,看了博文給點腳印唄,謝謝啦~~


相關文章