論文題目:《Momentum Contrast for Unsupervised Visual Representation Learning》
論文作者: Kaiming He、Haoqi Fan、 Yuxin Wu、 Saining Xie、 Ross Girshick
論文來源:arXiv
論文來源:https://github.com/facebookresearch/moco
1 主要思想
文章核心思想是使用基於 Contrastive learning 的方式自監督的訓練一個圖片表示器(編碼器),能更好的對圖片進行編碼然后應用到下游任務中。基於對比的自監督學習最大的問題就是負樣本數量增大后會帶來計算開銷的增大,這里使用了基於隊列的動態字典來存儲樣本,同時又結合了動量更新編碼器的方式,解決了編碼器的快速變化降低了鍵的表征一致性問題。MoCo在多個數據集上取得了最有效果,縮小了監督學習和無監督學習之間的差距。
2 框架

查詢表示 是 $q=f_q(x^q)$,其中 $f_q$ 是編碼器網絡,$x_q$ 是查詢樣本(同樣,$k=f_k(x^k)$)。
輸入 $x^q$ 和 $x^k$ 可以是 images, patches 或由一些 patche 組成的 context。 網絡 $f_q$ 和 $f_k$ 可以相同、部分共享或不同。編碼器可以是任何卷積神經網絡。
作者采用動量對比方法的兩個核心:(1)將字典作為隊列。將字典作為隊列主要就是為了能將字典的大小和 mini-batch 分離開來。(2)動量更新。主要是為了解決字典這部分數據在反向傳播的時候更新參數的問題,因為反向傳播需要在隊列中所有的樣本中進行傳播。
- 數據增強(data augmentation)手段
- 從隨機調整大小的圖像中獲取 224×224 像素的裁剪(a 224×224-pixel crop is taken from a randomly resized image)
- 隨機顏色抖動(random color jittering)
- 隨機水平翻轉(random horizontal flip)
- 隨機灰度轉換(random grayscale conversion)
- 對比損失(contrastive loss): lnfoNCE
- 字典中有一個與 q 匹配的鍵,表示為 $ k_{+}$。
- 通過點積(dot product)衡量相似性,這是一種對比損失函數,稱為 InfoNCE。
$\mathcal{L}_{q}=-\log \frac{\exp \left(q \cdot k_{+} / \tau\right)}{\sum \limits _{i=0}^{K} \exp \left(q \cdot k_{i} / \tau\right)}$
- 其中 $\tau $ 是溫度超參數( temperature hyper-parameter),$\sum $ 包括 $1$ 個正樣本 和 $K$ 個負樣本。
- 該損失是試圖將 q 分類為 $k_+$ 的(K+1)路基於 softmax 的分類器的對數損失。
- 動量對比(Momentum Contrast)
- 假設是好的特征可以通過一個包含豐富負樣本集的大字典來學習。
- 字典作為隊列(Dictionary as a queue)
- 將字典維護為數據樣本隊列, 允許重用來自前面的小批量(mini-batche)的編碼鍵( key );
- 字典大小可以比典型的小批量大小(l mini-batch size)大得多;
- 字典中的樣本被逐步替換。刪除最舊的(oldest) mini-batch 是有益的,因為它的編碼鍵( key )是過時的,因此與最新的鍵最不一致。
- 動量更新(Momentum update)
- 使用隊列可以使字典變大,但也使得通過反向傳播更新關鍵編碼器變得困難(梯度應該傳播到隊列中的所有樣本)。一個不成熟的解決方案是從 key encoder $f_q$ 復制梯度到 query encoder $f_k$,忽略 $f_k$ 的梯度。但是這種解決方案在實驗中產生了較差的結果。我們假設這種失敗是由快速變化的編碼器引起的,這降低了關鍵表示的一致性。 我們建議 使用 動量更新 來解決這個問題。
- 將 $f_k$ 的參數表示為 $\theta _k$,將 $f_q$ 的參數表示為 $\theta _q$,我們通過以下方式更新 $\theta _k$:
- 使用隊列可以使字典變大,但也使得通過反向傳播更新關鍵編碼器變得困難(梯度應該傳播到隊列中的所有樣本)。一個不成熟的解決方案是從 key encoder $f_q$ 復制梯度到 query encoder $f_k$,忽略 $f_k$ 的梯度。但是這種解決方案在實驗中產生了較差的結果。我們假設這種失敗是由快速變化的編碼器引起的,這降低了關鍵表示的一致性。 我們建議 使用 動量更新 來解決這個問題。
$\theta_{\mathrm{k}} \leftarrow m \theta_{\mathrm{k}}+(1-m) \theta_{\mathrm{q}}$ $m \in[0,1)$
只有參數 $\theta _q$ 被反向傳播更新,經發現 $m = 0.999$ 效果比較好。
3 相關研究

作者還對傳統的更新方式和MoCo的更新方式進行了對比 分別是 end-to-end 和 memory bank 。
3.1 Method: end-to-end
(a) 查詢(query) 和 鍵( key ) 表示的編碼器(encoder)通過反向傳播(back-propagation)進行端到端更新(兩個編碼器可以不同)。
這種方式query和key用兩個encoder,然后兩個參數是都進行更新的,字典大小就是 mini-batch 的大小。
- 使用當前小批量中的樣本作為字典,因此鍵是一致編碼的(相同的編碼器參數集);
- 但是字典大小加上 mini-batch 大小,受GPU顯存大小限制;
3.2 Method: memory bank
(b) 鍵( key )表示是從存儲庫(memory bank)中采樣的。
由於memory bank里面存着所有的樣本,每次實驗只取部分樣本,所以無法對其進行計算,這里就只更新 encoder q 的參數。
- 存儲庫(memory bank)由數據集中所有樣本的表示組成;
- 每個 mini-batch 的字典是從存儲庫(memory bank)中隨機采樣的,沒有反向傳播,因此它可以支持大字典大小;
- 存儲庫中樣本的表示在最后一次看到時更新,因此采樣的密鑰本質上是關於過去 epoch 中多個不同步驟的編碼器,因此不太一致;
- 它的動量更新基於相同樣本的表示,而不是編碼器。
3.3 Method: MoCo
(c) MoCo 通過動量更新的編碼器(momentum-updated encoder,)即時對新鍵( key )進行編碼,並維護一個鍵隊列(圖中未顯示)。

對於每個batch x:
- 隨機增強出 $x^{q} 、 x^{k} $ 兩種 view ;
- 分別用 $f_{q} $ , $ f_{k} $ 對輸入進行編碼得到歸一化的 $q $ 和 $ \mathrm{k} $ , 並去掉 $\mathrm{k} $ 的梯度更新 ;
- 將 $\mathrm{q} $ 和 $\mathrm{k} $ 中的唯一一個正例做點積得 cosine相似度 ($\mathrm{Nx} 1$) , 再將 $\mathrm{q}$ 和隊列中存儲的K個負樣本做點積得 cosine相似度 ($\mathrm{NxK}$) , 拼接起來的到 $\mathrm{Nx}(1+\mathrm{K}) $ 大小 的矩陣, 這時第一個元素就是正例,直接計算交叉摘損失, 更新 $f_{q}$ 的參數;
- 動量更新 $f_{k} $ 的參數: $ f_{k}=m * f_{k}+(1-m) * f_{q} $;
- 將 $ \mathrm{k}$ 加入隊列,把隊首的舊編碼出隊,負例最多時有 65536 個。
4 實驗

上述圖是 ImageNet 線性分類協議下三種對比損失機制的比較。采用相同的 Pretext task ,使用不同的對比機制,研究不同負對數 K 的影響,其中網絡使用的是ResNet-50。
MoCo不僅能支持更大的字典大小,而且也能帶來更優的效果。可以看到 end-to-end 方式的 K 只研究到 1024 就結束了,因為這種方式受限於內存大小。采用 Memory bank 的方式只比 MoCo 的方式差了大概 2.6% 。

上表顯示了在預訓練中使用不同 MoCo 動量值的 ResNet-50 精度(此處 K = 4096):
當 m 在 0.99 ∼ 0.9999 時,它表現得相當好,表明緩慢進展(即相對較大的動量)key encoder 是有益的。 當 m 太小時(例如,0.9),准確度大幅下降; 在極端 沒有動量(m 為 0),訓練損失振盪並且無法收斂。 這些結果支持我們的動機建立一個一致的字典。

可以看到MoCo遠遠的超過了之前的方法,同時在參數量上也不會有很大的增加。

7個下游任務超越有監督預訓練
random init是隨機初始化,super.IN-1M是在ImageNet上有監督預訓練的,MoCo IN-1M是在ImageNet上自監督預訓練的,MoCo IG-1B是在Ins10億數據上預訓練的。
這個的自監督在ImageNet上預訓練的模型比有監督的好。就是說自監督得到的特征提取器在一些場景下可以比有監督得到的backbone要好,但是在ImageNet上做分類任務的話,目前只有SimCLR V2超過了有監督的ResNet50。
5 總結
MoCo作為CV領域自監督的文章極大地縮小了自監督模型和監督模型在效果上的距離,自監督作為解決實際生產中標注數據少的方案正在被更多的人發現和研究。相信未來有一天自監督的表現能在有限標注數據的情況下達到甚至超越有監督模型
