卷積網路架構

ShuffleNet

ShuffleNet(Zhang 等人,曠視,2018)是為極度緊繃的計算預算所工程化的架構,也就是低功耗行動與嵌入式晶片那種、連 MobileNet 的成本都嫌太高的場合。它的出發點是:在 MobileNet 中負責通道混合的 1x1 逐點卷積,其實在那些高效區塊裡主宰了計算量。讓 1x1 卷積更便宜的一個自然做法是把它們分組,把通道分成數組、各組分別卷積,這會把成本按組數成比例削減。但分組的 1x1 卷積有一個嚴重副作用:如果每一層只在自己組內混合通道,資訊就會被困在各自分離的通道組裡、永不互相跨越,這會重創表徵能力。

ShuffleNet 的招牌貢獻是通道洗牌(channel shuffle)操作,一個免參數、幾乎免成本的排列,恰好修正了這個問題。在一個分組卷積之後,通道被重新組織,使下一個分組卷積的各組都收到來自前面所有組的通道,從而恢復跨整個通道空間的資訊流動。想像把一副牌發成數疊,再交錯洗開,使下一次發牌混入每一疊的牌;通道洗牌對特徵通道做的正是這件事。這讓 ShuffleNet 既能享受分組 1x1 卷積的廉價,又不犧牲跨組的溝通。

ShuffleNetV2(2018)以一個重要的方法論教訓精煉了設計:FLOPs(乘加運算的計數)是真實速度的不完美替代指標,因為記憶體存取成本與平行度在實際硬體上也極為重要。V2 論文推導出實務準則——讓輸入與輸出通道數相等以最小化記憶體流量、避免過多的組數、減少網路的碎片化、最小化逐元素運算——並圍繞著通道分裂加通道洗牌的結構重新設計區塊,以求在實測延遲上快、而非只在理論 FLOPs 上快。因此 ShuffleNet 既貢獻了一個具體的高效基本元件(通道洗牌),也帶來了更廣的洞見:高效設計必須以現實世界的延遲為目標。

超越這個架構本身的關鍵心得是 FLOPs 陷阱:兩個乘加計數相同的模型,實際延遲可能天差地別,因為受記憶體限制的運算與糟糕的平行度在真實晶片上會佔主導。ShuffleNetV2 的準則是對「只最佳化 FLOPs」的一個常被引用的糾正。