首頁?學習  »   正文

EfficientNet解析:卷積神經網絡模型規模化的反思

 

自從Alexnet贏得2012年的ImageNet競賽以來,CNNs(卷積神經網絡的縮寫)已經成為深度學習中各種任務的事實算法,尤其是計算機視覺方面。從2012年至今,研究人員一直在試驗并試圖提出越來越好的體系結構,以提高模型在不同任務上的準確性。近期,谷歌提出了一項新型模型縮放方法:利用復合系數統一縮放模型的所有維度,該方法極大地提升了模型的準確率和效率。谷歌研究人員基于該模型縮放方法,提出了一種新型 CNN 網絡——EfficientNet,該網絡具備極高的參數效率和速度。今天,我們將深入研究最新的研究論文efficient entnet,它不僅關注提高模型的準確性,而且還關注模型的效率。

為什么縮放很重要?

在討論“縮放到底是什么意思?”,與此相關的問題是:為什么規模如此重要?通常,縮放是為了提高模型在特定任務上的準確性,例如ImageNet分類。雖然有時研究人員并不太在意有效模型,因為競爭是為了打敗SOTA,但是如果正確地進行縮放,也可以幫助提高模型的效率。

在CNNs環境中,縮放意味著什么?

CNN有三個縮放維度:深度、寬度和分辨率。深度只是指網絡的深度,相當于網絡中的層數。寬度就是網絡的寬度。例如,寬度的一個度量是Conv層中的通道數,而分辨率只是傳遞給CNN的圖像分辨率。下圖(來自本文本身)將使您清楚地了解不同維度的縮放意味著什么。我們也將詳細討論這些問題。

EfficientNet解析:卷積神經網絡模型規模化的反思

模型擴展。(a)是基線網絡的例子;(b)-(d)是只增加網絡寬度、深度或分辨率一維的傳統尺度。(e)提出了以固定比例均勻縮放三維空間的復合縮放方法。

Depth Scaling?(d):

按深度擴展網絡是最常見的縮放方式。深度可以通過添加/刪除圖層來放大或縮小。例如,可以從ResNet-50擴展到ResNet-200,也可以從ResNet-50縮小到ResNet-18。但為什么是深度縮放呢?直覺告訴我們,更深層次的網絡可以捕獲更豐富、更復雜的特性,并能很好地概括新任務。

很好。那么,讓我們把網絡擴展到1000層?如果我們有資源和機會改進這個任務,我們不介意添加額外的層。

說起來容易做起來難!理論上,隨著層數的增加,網絡性能應該會提高,但實際上并沒有隨之提高。消失梯度是我們深入研究時最常見的問題之一。即使你避免漸變消失,并使用一些技術使訓練平滑,添加更多的圖層并不總是有幫助。例如,ResNet-1000具有與ResNet-101類似的精度。

Width Scaling?(w):

當我們想要保持模型較小時,通常使用這種方法。更廣泛的網絡往往能夠捕獲更細粒度的特性。此外,較小的型號更容易訓練。

這不正是我們想要的嗎?小模型,提高精度?

問題是,即使您可以使您的網絡非常寬,使用淺模型(不太深但更寬),隨著更大的寬度,精度很快就會飽和。

好吧,我們既不能使我們的網絡非常深,也不能使它非常廣。但是你不能把上面兩個比例結合起來嗎?如果你直到現在才明白,你覺得自己擅長機器學習么?呵呵!

但在我們研究它之前,我們先討論第三個縮放維度。三個的組合也可以,對吧?

Resolution (r):

直觀地說,在高分辨率圖像中,特征更細粒度,因此高分辨率圖像應該更好地工作。這也是為什么在復雜的任務中,如對象檢測,我們使用圖像分辨率像300×300,或512×512,或600×600。但這不是線性的。精度增益下降得很快。例如,將分辨率從500×500增加到560×560不會產生顯著的改進。

以上三點引出了我們的第一個觀察:擴展網絡的任何維度(寬度、深度或分辨率)都可以提高精度,但對于較大的模型,精度增益會減小。

EfficientNet解析:卷積神經網絡模型規模化的反思

使用不同的網絡寬度(W)、深度(D)和分辨率(R)系數放大基線模型。更大的網絡具有更大的寬度、深度或分辨率,可以獲得更高的精度,但精度達到80%后會迅速飽和,這說明了單維尺度的局限性。

那么組合縮放呢?

是的,我們可以結合不同維度的縮放,但作者提出了一些觀點:

  • 雖然可以任意縮放二維或三維,但任意縮放是一項繁瑣的任務。
  • 大多數情況下,手動縮放會導致精度和效率低于最佳。

直覺告訴我們,隨著圖像分辨率的提高,網絡的深度和寬度也應該增加。隨著深度的增加,更大的接受域可以捕獲包含更多像素的類似特征。此外,隨著寬度的增加,將捕獲更多的細粒度特性。為了驗證這種直覺,作者對每個維度進行了許多不同縮放值的實驗。例如,從本文的下圖中可以看出,在相同的FLOPS成本下,寬度縮放的精度要高得多,而且分辨率更高、更深。

EfficientNet解析:卷積神經網絡模型規模化的反思

縮放不同基線網絡的網絡寬度。一行中的每個點表示一個具有不同寬度系數(w)的模型。所有基線網絡均來自表1。第一基線網絡(d=1.0,r=1.0)有18個分辨率為224×224的卷積層,而最后一基線(d=2.0,r=1.3)有36個分辨率為299×299的卷積層。

這些結果導致了我們的第二次觀察:在CNNs縮放期間平衡網絡的所有維度(寬度、深度和分辨率)對于提高精度和效率至關重要。

提出了復合比例

作者提出了一個簡單但非常有效的縮放技術使用一個復合系數?以統一原則來規模化網絡的寬度、深度和分辨率:

EfficientNet解析:卷積神經網絡模型規模化的反思

?是一個指定的系數,控制多少資源可用,而α,β,γ指定如何將這些資源分配給網絡深度、寬度和分辨率。

但是這里你可能會有兩個疑問:首先,為什么α平方不一樣呢?第二,為什么要把這三個數的乘積限制為2?

這是很好的問題。在CNN中,Conv層是網絡中計算開銷最大的部分。同時,失敗的卷積運算幾乎正比于d, w2, r2,即增加深度將加倍失敗而增加寬度或決議增加失敗幾乎是四倍。因此,為了確保總失敗不超過2 ^?,約束應用是(α * β2 * γ2) ≈ 2。

EfficientNet架構

縮放不會改變層操作,因此,最好先有一個良好的基線網絡,然后使用建議的復合縮放沿著不同的維度進行縮放。作者通過神經結構搜索(NAS)獲得了他們的基本網絡,該搜索對準確性和失敗都進行了優化。該架構類似于M-NASNet,因為它是使用類似的搜索空間發現的。網絡層/塊如下圖所示:

EfficientNet解析:卷積神經網絡模型規模化的反思

EfficientNet-B0基線網絡

MBConv塊只是一個反向剩余塊(在MobileNetV2中使用),有時注入一個擠壓和激發塊。

現在我們有了基本網絡,我們可以為縮放參數尋找最優值。如果你回顧一下方程,你很快就會意識到,我們一共有四個參數搜索:α,β,γ,?。為了縮小搜索空間,降低搜索操作的成本,可以分兩步完成對這些參數的搜索。

修復?= 1,假設有兩個或更多的資源,做一個小網格搜索α,β,γ。基線網絡B0,結果最優值α= 1.2,β= 1.1,γ= 1.15,βα*2*γ2≈2

現在修復α,β和γ常量(在以上步驟中找到的值)和嘗試不同的?的值實驗。不同值的?產生EfficientNets B1-B7。

結論

這可能是我到目前為止讀過的2019年最好的論文之一。這篇論文不僅為尋找更精確的網絡打開了新的大門,而且還強調了尋找更高效的架構。

雖然早期研究已經朝著這個方向發展,研究人員試圖提出架構,試圖減少參數和失敗的數量,這樣他們就可以運行在手機和邊緣設備上,例如,MobileNets, ShuffleNets, M-NasNet等。在這里,我們看到了在參數減少和故障成本方面的巨大收益,以及在精確度方面的巨大收益。

本文參考

efficientnet論文:https://arxiv.org/abs/1905.11946

官方發布代碼:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

歡迎關注ATYUN官方公眾號,商務合作及內容投稿請聯系郵箱:[email protected]

發表評論