把維度崩塌講清楚
看看你的嵌入在一個批次上的共變異數矩陣,取它的特徵譜。在健康的表徵裡,能量分散在許多特徵值上。在維度崩塌中,少數幾個特徵值獨大,其餘衰減到零:嵌入技術上仍在變動,卻活在嵌入空間裡一張薄薄的煎餅上。這是無聲的失效模式——你的損失看起來沒問題、訓練很穩定,然而你有一半的維度是死重。本篇的方法正面迎擊它:把反崩塌的要求直接寫進損失裡。
批次嵌入的共變異數矩陣及其有序特徵值——當大多數特徵值趨近於零時即發生維度坍縮。
Barlow Twins:把交叉相關推向單位矩陣
Barlow Twins借用了神經科學的冗餘消除原則。計算兩個視角的嵌入維度之間、跨批次的交叉相關矩陣,再把它推向單位矩陣(identity matrix)。對角線趨於 1 的項,讓每個維度跨視角不變(對齊);非對角線趨於 0 的項,讓相異維度去相關,使任兩個座標不會攜帶相同的資訊。去相關正是禁止維度崩塌的關鍵——如果各軸被迫獨立,你就無法把所有能量堆到一根軸上。沒有負樣本、沒有動量編碼器、沒有不對稱性。
c = (z1n.T @ z2n) / batch # cross-corr of normalized dims on = ((diag(c) - 1) ** 2).sum() # invariance: diagonal -> 1 off = (off_diagonal(c) ** 2).sum() # redundancy: off-diag -> 0 loss = on + lambda_ * off
VICReg:變異數、不變性、共變異數
VICReg把這個配方明確拆成三個可分別調整的項。不變性(invariance):最小化兩個視角嵌入之間的距離(對齊)。變異數(variance):一個鉸鏈損失,迫使每個嵌入維度跨批次的標準差維持在某個門檻之上——這單獨一項就能防止崩塌,因為崩塌的維度變異數為零,會被重重懲罰。共變異數(covariance):把非對角的共變異數推向零,如同 Barlow Twins 般讓維度去相關。由於三項彼此解耦,VICReg 不需要任何跨批次的正規化技巧,甚至在兩個分支架構或模態不同時也能運作。
VICReg 的三個可獨立加權的項——不變性 s、變異數 v(用鉸鏈損失使每個維度保持活躍)以及共變異數 c。
白化:讓崩塌變得不可能
基於白化(whitening)的方法採取最強硬的立場:在套用一個簡單的正樣本配對損失之前,明確地把每一批嵌入轉換成共變異數為單位矩陣——零均值、單位變異數、完全去相關。一旦嵌入被白化,維度崩塌就不只是被勸阻,而是在結構上被禁止:一個白化後的表徵,按其構造就不可能把能量集中在某個子空間上。代價是白化操作本身(對整批做矩陣的逆平方根),它增加了計算量並需要一些數值上的小心。
退後一步看,整個家族都在押韻。對比的 InfoNCE 透過負樣本隱性達成均勻性;Barlow Twins、VICReg 與白化則透過去相關與變異數約束,明確地達成本質上相同的譜散布。它們是通往同一目的地的不同路徑:一個共變異數良態(well-conditioned)的嵌入。