[21.01] RepVGG
讓 VGG 再次偉大
RepVGG: Making VGG-style ConvNets Great Again
試問:模型參數量愈少,速度愈快,對嗎?
這個問題你可能知道答案是:「不對」!
因為必須考慮計算量,通常我們會參考模型的計算量 FLOPs(浮點運算次數)。
那我們接著問: 「模型的 FLOPs 愈少,速度愈快,對嗎?」
這個問題的答案,還是「不對」!
定義問題
因為影響推論速度的因素還有很多!
很多研究論文都想方設法地要降低模型的 FLOPs,但是當我們在工程端拿來使用時,發現推論速度並沒有變快,甚至有時候還變慢了。
這可是典型的產學落差,身為工程師的我們可不能被計算量的數據給蒙蔽了。
大量記憶體佔用
隨著 Inception,ResNet 和 DenseNet 的出現,許多研究興趣轉移到了精心設計的架構上,使得模型變得越來越複雜。除此之外,還有些架構基於 NAS 自動搜索,或是使用複合縮放策略。
雖然這些網路架構有更高的精度,但是複雜得分支會導致記憶體佔用量增加,如上圖。
在殘差結構中,由於分支的存在,因此在推論時候會需要多一份記憶體來存儲分支的結果,如果你有多個分支(對就是在說你,Inception!),那麼記憶體佔用量就會變得更大。
推論速度慢
有一些操作缺乏硬體的支援,例如 MobileNets 的深度卷積,這個方法雖然參數量比一般卷積大概減少 80%,但是速度更慢:
還有像是 ShuffleNet 內的通道洗牌,這個操作看起來不占計算量,但也會降低推論速度:
可是...
多分支結構真的很好啊!
多分支架構可以讓模型成為許多淺層模型的隱式集合。
因為殘差連結提供了一個捷徑,以 ResNet 為例:理論上來說對於 N 個區塊,模型可以解釋成 2N 個模型的集合,因為每個區塊可以分為兩條路徑可以選擇。
此外,捷徑可以提供更好的梯度流動,緩解梯度消失導致的難以訓練的困難。
ResNet 的成功已經證實了殘差連接的有效性,怎麼能說放棄就放棄呢?