表徵與自監督學習

動量對比(MoCo)

MoCo 把對比學習重新框定為「建立並查詢一本字典」。你想要大量負樣本鍵來比對,但每步重算它們很貴,而 SimCLR 是用超大批次來換取它們。MoCo 透過維護一個近期嵌入的滾動佇列,把負樣本的數量與批次大小解耦——這是一個便宜、龐大、緩慢更新、且存在於當前小批次之外的負樣本庫。

讓這個佇列可用的訣竅是動量編碼器。查詢視圖由接收梯度的主網路編碼;鍵視圖則由第二個網路編碼,其權重是主網路權重的指數移動平均,依 θ_k ← m θ_k + (1−m) θ_q 更新,m 接近 0.999。因為鍵編碼器變化極慢,幾步前入隊的舊鍵仍與新入隊的鍵保持一致——這是天真更新的編碼器無法保證的。查詢以 InfoNCE 對著那一個正樣本鍵與佇列中數千個負樣本訓練。

MoCo v2 與 v3 吸收了 SimCLR 的經驗——MLP 投影頭、更強的增強,後來再換上視覺轉換器骨幹——把差距縮小,使佇列剩下的主要優勢就是把負樣本數量與裝置記憶體解耦。它是「如何在不用巨大批次的情況下取得大量負樣本」的經典解答。

\theta_k \leftarrow m\,\theta_k + (1-m)\,\theta_q,\quad m\approx 0.999

鍵(動量)編碼器的指數移動平均更新。

動量更新不只是平滑——若沒有它,快速變動的鍵特徵會使佇列中較舊的條目失去一致性,訓練便會崩潰。

又稱
MoCo動量對比momentum encoderqueue