InfoNCE 損失
InfoNCE 是讓對比學習得以具體落實的損失函數。直覺上,它把「拉近正樣本、推遠負樣本」這個模糊目標,轉化為大家熟悉的選擇題考試:給定一個查詢,以及由一個真正的正樣本加上許多負樣本組成的候選名單,模型必須把最高的相似度指派給正樣本。損失就是「答對這道分類題」的交叉熵。表現好,意味著正樣本的分數明顯高過所有干擾項。
具體而言,設 q 為查詢嵌入、k+ 為其正鍵、k_1…k_K 為負鍵,則該查詢的損失為 L = -log [ exp(sim(q,k+)/τ) / ( exp(sim(q,k+)/τ) + Σ_i exp(sim(q,k_i)/τ) ) ],其中 sim 通常是餘弦相似度(L2 正規化向量的內積),τ 是溫度。這恰好就是對 K+1 個邏輯值做 softmax,再取正類的負對數似然。InfoNCE 之名源自雜訊對比估計(noise-contrastive estimation),而此損失是兩視角間互資訊的一個下界:將它最小化,等於最大化「一個視角能告訴你關於另一視角多少資訊」。
溫度 τ 雖小卻威力強大。它在做 softmax 前重新縮放相似度:較低的 τ 會銳化分布,使損失緊盯最易混淆、最靠近的負樣本(即難負樣本),這能加速學習但可能不穩定且過度敏感;較高的 τ 則軟化分布,較平等地對待所有負樣本。常見值約在 0.07 到 0.2 之間。另一個槓桿是負樣本數量 K,負樣本越多,互資訊下界越緊,特徵通常也越好,這正是 SimCLR 使用大批次、MoCo 使用佇列的原因。
在一個正樣本與 3 個負樣本的情況下,假設餘弦相似度為:正樣本 0.9、負樣本 0.2、0.1、0.0,且 τ = 0.1。邏輯值變為 9、2、1、0;softmax 把約 0.999 的機率質量放在正樣本上,因此損失 -log(0.999) 趨近於零,代表模型既有信心又正確。若把正樣本相似度減半為 0.45,損失便會躍升,標示出一個更難、資訊量更高的樣本。