來記錄一下最近在 GPT 幫助下讀過的最難的 paper:Free Transformer。這篇的數學難到撞牆。
這篇核心概念,就是在 Transformer 裡面明確在模型裡顯式引入潛變量 Z。(論文 Z 不是單一全局變數而是序列 Z1...ZT)
在原本 Transformer 結構,潛變量 Z (例如影片是正評、負評)是通過學習序列預測來進行隱式學習。這種方法存在幾個缺點。首先,要計算我們感興趣的變量 Z,會涉及很複雜的計算,並且這類計算容易出錯。只要序列生成中出現錯誤,整個序列以及根據該序列推導出的 Z 都會是錯誤的。此外,沒有顯式表達 Z,把產生 Z 建立在序列預測,也可能在新資料因為序列預測表現不同而影響泛化,這也是論文 (1)(2) 式舉例想表達的。
另一個難點是論文中 (3)。這個(3)邊際似然(marginal likelyhood)P(S)和論文中 loss function 有關,loss function 其中一部分近似 logP(S) 的證據下界(ELBO),因此當 loss 降低時,意謂 ELBO 提高,從而提高對 logP(S) 的下界。而 P(S) 基本上可以看作在先驗 P(Z) 下對 P(S|Z) 的期望。如果P(S)夠高,那麼在模型生成的過程中,只要採樣Z,就會有足夠的機會讓模型產生的 S' 能夠對應到真實的序列 S。而 Z1...ZT 並非參數,是隨機採樣出來的,編碼器參數(確定 Q)與解碼器參數(確定 P(S|Z))才是需要學的。
接下來難點是所謂 free bit 設計。Free bit 目的在於避免 KL collapse ,也就是,VAE decoder 以及後面的模型直接將採樣的 Z 丟棄不用,然後 VAE 訓練出的分佈 Q(Z|S) 直接套先驗分佈,然後 KL Loss 歸零成功最小化,但 VAE 就整個沒用。為了避免這種情況,模型引入了 free bit,使得 Q 分佈與先驗分佈之間可以允許一定程度差異,不會計入 Loss。
接下是所謂的 Binary Mapping。它的模組有一層,不是直接輸出 2^H 次方個 output,而是將輸出 H 個互相獨立的 Binary Bit,具體輸出 class number 則是這 H 個 bit 對應的 binary number。學習 H 個(例如 16 個)互相獨立的 binary classification 會比直接學 2^H 個 class(如 65536 個)訓練更好,降低參數量、避免大多數輸出都是在 0 附近微調,訓練速度慢並且容易被 noise 干擾,也避免資料不夠長尾類別學不到。
剩下的部分是實際測試。首先是 free bit 的設定。Kappa 太低,模型表現與正常 Transformer 相同,實際上就是 KL collapse,導致 VAE 沒有作用。然後,當 Kappa 的值過大,模型會在 Z 藏太多資訊,實際上是 overfitting,測試中連雜訊都學進去了。然後後面 benchmark 的部份就沒有細讀。更多的細節我看不懂 XD
全文連結



