研究動機: 神經網絡徹底改變了機器智能的許多領域,實現了超人的准確性。然而,提高准確性的驅動力往往需要付出代價:現代先進網絡需要高度計算資源,超出許多移動和嵌入式應用的能力。
主要貢獻: 發明了一個新的層模塊, 具有線性瓶頸的倒置殘差(inverted residual)。
相關工作: 里面介紹了近來整個領域的發展概況, 看論文就看介紹的吧.
基本概念
深度可分離卷積
Depthwise Separable Convolutions = depthwise + pointwise
如果卷積核大小為 3x3, 深度可分離卷積的計算量為常規卷積的 (1/9, 1/8)
流形(manifold)
花書 <<深度學習>> 介紹:
\(\color{red}{流形(manifold)}\) 指連接在一起的區域。數學上,它是指一組點,且每個點都 有其鄰域。給定一個任意的點,其流形局部看起來像是歐幾里得空間。日常生活中, 我們將地球視為二維平面,但實際上它是三維空間中的球狀流形。
每個點周圍鄰域的定義暗示着存在變換能夠從一個位置移動到其鄰域位置。例 如在地球表面這個流形中,我們可以朝東南西北走。
盡管術語 “流形’’ 有正式的數學定義, 但是機器學習傾向於更松散地定義一組 點,只需要考慮少數嵌入在高維空間中的自由度或維數就能很好地近似。每一維都對應着局部的變化方向。如圖 5.11 所示, 訓練數據位於二維空間中的一維流形中。 在機器學習中,我們允許流形的維數從一個點到另一個點有所變化。這經常發生於流形和自身相交的情況中。例如,數字 "8" 形狀的流形在大多數位置只有一維,但 在中心的相交處有兩維。
\(\color{red}{流形學習(manifold\space learning)}\) 算法假設: 該假設認為 \(R^n\) 中大部分區域都是無效的輸入,有意義的輸入只分布在包 含少量數據點的子集構成的一組流形中,而學習函數的輸出中,有意義的變化都沿着流形的方向或僅發生在我們切換到另一流形時。
數據位於低維流形的假設並不總是對的或者有用的。我們認為在人工智能的一 些場景中,如涉及到處理圖像、聲音或者文本時,流形假設至少是近似對的。
Linear Bottlenecks
Linear Bottlenecks 理論支持:
考慮由 n 層 \(L_i\) 組成的深層神經網絡,其中每一層都具有尺寸為 \(h_i×w_i×d_i\)的激活張量。在本節中,我們將討論這些激活張量的基本屬性,我們將其視為具有 \(d_i\) 維度的 \(h_i×w_i\)“像素”的容器。非正式地說,對於輸入的一組真實圖像,我們說層激活(對於任何層 \(L_i\))形成一個“流形”。由於這種流形通常不能用分析方法描述,因此我們將憑經驗研究它們的性質。例如,長期以來一直認為神經網絡中感興趣的流形可以嵌入到低維子空間中。換句話說,當我們查看深卷積層的所有單個通道像素時,這些值中編碼的信息實際上位於某個流形中,而這又可嵌入到低維子空間中。
乍一看,這樣的事實可以通過簡單地減少層的維度來捕獲和利用,從而降低操作空間的維度。這已經被 MobileNetV1 成功利用,通過寬度乘法器參數在計算和精度之間進行有效的折中. 遵循這種直覺,寬度乘法器方法允許減小激活空間的維度,直到感興趣的流形橫跨整個空間為止。然而,當我們回想到深度卷積神經網絡實際上具有非線性的坐標變換(例如ReLU)時,這種直覺就會崩潰。例如,ReLU應用於1D空間中的線會產生'射線',在 \(R^n\) 空間中,其通常導致具有 n 截的分段線性曲線。
insight:
- 如果流形在ReLU變換后保持非零卷 (no-zero volume),則它對應於線性變換.
- ReLU能夠保留關於輸入流形的完整信息,但只有當輸入流形位於輸入空間的低維子空間時。
這兩個見解為我們提供了一個優化現有神經架構的經驗提示:假設感興趣的流形是低維的,我們可以通過將線性瓶頸層插入卷積模塊來捕獲這一點。 實驗證據表明,使用線性層非常重要,因為它可以防止非線性破壞太多的信息。
Inverted residuals

We will refer to the ratio between the size of the input bottleneck and the inner size as the expansion ratio.
\(\color{red}{由於 Inverted \space residuals 兩邊 thin, 所以該設計想比較傳統殘差設計更加節省內存}\)
論文觀點
架構的一個有趣特性是它在構建塊(瓶頸層)的輸入/輸出域與層轉換(這是一種將輸入轉換為輸出的非線性函數)之間提供了自然分離. 前者(層輸入/輸出)可以看作是網絡在每一層的容量,而后者(層轉換)則是表達力。這與常規和可分離的傳統卷積塊相反,其中表現力和容量都纏結在一起,並且是輸出層深度的函數。
\(\color{red}{在論文的最后提出}\):
On the theoretical side: the proposed convolutional block has a unique property that allows to separate the network expressivity (encoded by expansion layers) from its capacity (encoded by bottleneck inputs). Exploring this is an important direction for future research.
這種解釋使我們能夠獨立於其容量研究網絡的表現力,並且我們認為需要進一步探索這種分離,以便更好地理解網絡性質.
我的理解:
- 由於文中在前面提到, 當流型存在於高維輸入空間的低緯空間時, 通過 Relu 幾乎可以保留全部信息
- 在 bottleneck inputs 之后的 expansion layers 會有 1x1 卷積升維操作, 所以認為經過 Relu 沒有損失信息, 即模型的容量不變, expansion layers的操作可以看做是層的表達力, 然后通過 Linear Bottlenecks, 也沒有損失信息, 故全程保持模型的容量不變, 可以通過調節 expansion ratio, t 來調節模型的表達力
網絡結構
實現細節:
base learning rate = 0.045
weight decay = 0.00004
t = 5 - 10
dropout + bn + relu6
RMSPropOptimizer momentum = 0.9 decay = 0.9
網絡結構


表中錯誤已修正
內存節約型 inference
計算圖 G, 在推導時(inference ), 內存總量和邊界如下:
內存占用量是所有操作對應輸入和輸出張量的總大小與操作本身所占內存之和決定。 如果我們將瓶頸殘差塊視為單一操作(並將內部卷積視為一次性張量[即用完就丟]),則總內存量將由瓶頸張量的大小決定,而不是瓶頸內部張量的大小決定