為什麼要捨棄負樣本?
負樣本是對比學習兩大頭痛的根源:對巨大批次或佇列的胃口,以及把語意相同的影像錯誤推開的假負樣本問題。於是一個自然的問題是:我們能不能只保留目標中「把正樣本拉近」的那一半,而不崩塌?天真地看,不行——那正是常數向量的陷阱。本篇方法的突破在於:精心設計的不對稱性(asymmetry),能讓只有正樣本的目標變得穩定。
BYOL:預測動量目標
BYOL(Bootstrap Your Own Latent)保有兩個網路:一個被訓練的線上(online)網路,與一個是線上網路指數移動平均的目標(target)網路(就是 MoCo 用在鍵上的同一招動量)。線上網路把它的嵌入再經過一個額外的預測器(predictor)頭,被訓練去匹配目標網路對另一個視角的嵌入。整個過程沒有任何負樣本。目標網路收不到梯度——一個停止梯度(stop-gradient)把它封住。
BYOL 的两个核心:目标网络权重以指数移动平均跟随在线网络,而在线预测器被训练去匹配 L2 归一化后的目标投影。
online_z = predictor(proj(online_enc(view1))) target_z = proj(target_enc(view2)).detach() # stop-gradient! loss = 2 - 2 * cosine(online_z, target_z) # pull together only # target_enc updated by EMA of online_enc, never by gradients
為什麼 BYOL 不崩塌?
這曾困惑學界一陣子。常數解確實是全域最佳解,BYOL 卻能可靠地避開它。被接受的解釋有幾個一起運作的要素:預測器(只在線上端)打破了兩個分支間的對稱性;停止梯度讓目標在每一步都是一個固定的回歸目標,而非一個能搶著去迎合線上網路的東西;而移動平均的目標變動得夠慢,讓預測器始終在追逐一個近乎最佳但落後的目標。拿掉預測器或 EMA,BYOL 就會崩塌——兩根支柱都是承重的。
DINO:沒有標籤的自蒸餾
DINO把同樣的想法重新包裝成知識蒸餾,只是老師就是學生的動量平均。兩者都透過 softmax 輸出在數千個「原型」維度上的機率分布,而學生被訓練去匹配老師在另一個視角上的分布。兩個操作讓它不崩塌:置中(centering,從老師的 logits 減去一個滑動平均,避免某一維獨大)與銳化(sharpening,老師用低溫,避免分布變得均勻)。套用在視覺 Transformer(Vision Transformer)上,DINO 展現出一個驚人的湧現性質:注意力圖能在完全沒有分割標籤的情況下分割出物件。
注意這個對偶:對比方法靠把負樣本散開(均勻性)來對抗崩塌;DINO 則用置中+銳化對抗同樣的崩塌,那是把均勻性與對齊性透過輸出分布來施加,而非透過負樣本。
DINO 的自蒸馏损失:将经过锐化与中心化的教师 softmax 作为目标,对学生 softmax 做交叉熵,中心向量 c 抑制坍缩方向。
SwAV:交換聚類指派
SwAV坐落於對比與聚類之間。它不直接比較特徵,而是把嵌入線上聚類到一小組學到的原型上,為每個視角產生一個柔性編碼(code)。接著施加交換預測的一致性:用視角 B 的特徵去預測視角 A 的編碼,反之亦然。崩塌(所有影像歸入同一個聚類)被一個等分約束(equipartition constraint)擋住——一個 Sinkhorn 正規化的指派,迫使整個批次大致均勻地散布到各個聚類。它精神上是對比的,但對比的是聚類編碼而非個別實例,因此不需要龐大的負樣本庫就能擴展。
点被分组到若干质心标记周围的簇中,演示将嵌入分配到学习得到的原型。