MobileNet
MobileNet(Howard 等人,Google,2017)是一個從根本上設計來在手機與其他算力與功耗預算緊繃的裝置上快速執行、同時又準到堪用的 CNN 家族。它的核心手法是深度可分離卷積(depthwise separable convolution),以兩個較廉價的步驟取代標準卷積。標準卷積同時跨空間與跨通道混合資訊,這很昂貴。可分離版本把它分解為一個深度卷積(depthwise convolution,對每個輸入通道獨立套用一個空間濾鏡,混合空間但不混合通道),再接一個逐點的 1x1 卷積(混合跨通道,但不混合空間)。把這兩件工作依序而非聯合地做,把計算量削減約一個等於核面積的倍數,對 3x3 核而言往往是八到九倍。
在此之上,MobileNet 提供兩個全域旋鈕,讓從業者在不重新設計網路的情況下以準確率換速度。寬度乘數(alpha)均勻地縮放每一層的通道數,使模型及其計算約略以二次方縮小。解析度乘數縮放輸入影像尺寸,這也使計算量以二次方縮放。兩者合在一起,讓你能沿著一條準確率對延遲的曲線滑動,以符合特定裝置或延遲目標,這正是在各式各樣手機上部署所需要的。
這個家族有意義地演進了。MobileNetV2(2018)引入了帶線性瓶頸的反向殘差(inverted residual with linear bottleneck):它以 1x1 卷積擴張通道、在那個高維空間中套用深度卷積、再以 1x1 卷積投影回低維,並且關鍵地省略了最後的非線性(即「線性瓶頸」),因為在低維空間套用 ReLU 會摧毀資訊;殘差捷徑則連接窄的瓶頸。MobileNetV3(2019)使用神經架構搜尋(neural architecture search)來調整結構、加入壓縮與激發通道注意力、並以對硬體友善的 h-swish 取代部分激活。MobileNet 的深度可分離卷積成為高效深度學習中最重要的基本元件之一,在 Xception、EfficientNet 與許多裝置端模型中被重複使用。
一個常見的混淆:V2 的殘差被稱為「反向」,是因為與 ResNet 瓶頸(寬—窄—寬)不同,它走的是窄—寬—窄,並連接窄的兩端。而這個瓶頸刻意是「線性」的(最終投影上沒有 ReLU),正是因為對一個低維、壓縮的表示套用 ReLU 會把它歸零並損失太多資訊。