如何理解EfficeientNet

現在神經網絡的設計主要就是如何設計網絡的深度、寬度、分辨率,尤其深度和寬度是重點研究的對象。為了追求更高的精度,現在的模型是越來越深了,比如resNet. 也有往寬度方向發展的,比如DenseNet. 但不論是更深還是更寬,都讓模型越來越大,使得模型訓練和應用都很受限制。為了設計更好的模型,這裡不再只是在一個維度上去設計網絡,而是系統地考慮網絡深度,寬度,以及分辨率之間的平衡。綜合考慮這三個維度的網絡能得到更好的性能。EfficientNet就是要解決如何權衡這三個維度的問題。

首先看下這三個維度單獨考慮會有什麼問題

深度:增加深度可以學習到更豐富和複雜的特徵,但是可能出現梯度彌散,儘管skip connection在一定程度緩解了這個問題,但是還是不容易訓練

寬度: 增加寬度可以學習更多的細節,也容易訓練,但是卻不能學到更高級的特徵

分辨率:增大分辨率,可以學習更多的細粒度模式,但如果過高的話,增益效果也會下降,也就說分辨率是有天花板的。並不是一味增加就好,而且也會增加內存的開銷。

針對單一的維度,作者也做了實驗,每一個維度的增加都能有精度的增加,但是很快收益就會減弱

如何理解EfficeientNet

如何理解EfficeientNet

為了得到更好的精度和效率,平衡的縮放各個維度就至關重要。論文提出了一直新的複合縮放方法

如何理解EfficeientNet

即使用一個複合係數φ來統一縮放網絡的深度、寬度、分辨率:

如何理解EfficeientNet

α, β, γ 是常數,他們是通過小範圍的網格搜索確定的。Φ可以理解為控制用於計算的資源, 而α, β, γ決定如何分配這些資源。根據Φ的不同,可以得到不同規模的網絡。論文加了個約束α · β 2 · γ 2 ≈2 這樣Φ的改變會使得計算浮點數大約增加2Φ

論文除了現有的網絡上做實驗,更重要的是通過神經網絡搜索的方式提出了一個baseline EfficientNet ,他是用一個強化學習來搜索一個深度卷積神經網絡,主要優化目標有兩個,識別準確率和運算浮點數,而且並不是針對某種特定設備做優化。這個baseline 記為EfficientNet-B0

如何理解EfficeientNet

在這個baseline的基礎上,開始混合的縮放網絡,主要有兩步:

1:我們首先固定φ = 1 ,假設有相比於原來多了2倍的資源,我們基於等式(2)和(3)先做了一個小範圍的搜索,最後發現對於EfficientNet-B0來說在 α · β 2 · γ 2 ≈ 2 的約束下最後的值為 α = 1.2, β = 1.1, γ = 1.15

2:接著我們固定α, β, γ 作為約束,然後利用不同φ取值的對baseline網絡做放大,來獲得EfficientNet-B1到B7;

這就是EfficientNet系列模型的設計過程。下面是一些對比試驗,試驗結果都在說明EfficientNet用了較少的參數和計算量得到了較好的精度,無論是imageNet 還是遷移學習任務都能得到很好的性能。

如何理解EfficeientNet

如何理解EfficeientNet

總的來說,感覺現在的模型就是靠算力去搜索,同時考慮深度、寬度、分辨率。靠人工去設計出來的模型是很難跟這些用機器搜索出來的比了。


分享到:


相關文章: