歡迎光臨
每天分享高質量文章

NAACL 2019 | 一種考慮緩和KL消失的簡單VAE訓練方法


研究動機

 

變分自編碼器(Variational Auto-Ecnoders, VAEs)在自然語言處理的很多任務中都有應用。VAEs 的標的函式包括兩項:1)重建項;2)KL 正則項。這兩項可以用一個權重繫數 beta 來調節平衡,通常情況下 beta 設置為常數 1。

當 VAEs 用到自然語言處理時,它的解碼器 decoder 通常由一個自回歸模型(auto-regressive model)實現。然而這樣往往會導致訓練過程中出現一個糟心的難題:KL 正則項會消失趨近 0在實踐中,這意味著學習到的特征將不再能夠表達觀測到的資料。本文的目的是希望能夠找到一種策略去解決 KL 消失問題。

研究方法

本文提出一種只需要在訓練過程中動態調節 beta 就能緩和 KL 消失的策略:Cyclical Annealing Schedule。它周期性地調節 beta ,在每一個周期內有兩個階段:1)beta 值從 0 增加 1;2)併在 beta=1 的時候訓練 VAEs。以此多次重覆這個周期 M 次(註意是多次)。

舉個例子:下圖的黑線就是 M=4 個周期,註意,當 M=1 時,我們就回歸了以前的單調增加 beta 的方法,如下圖的紅線。

實驗結果

兩方面:1)我們可以通過可視化學習到的特征來洞察不同方法在訓練中的表現,發現周期性調節 beta 可以循序漸進地讓結果變好;2)我們在三個自然語言處理的任務上驗證了演算法的有效性,包括語言建模,對話生成,無監督特征學習。

 

創新點

 

1. 我們首先提出兩條信息流惡性競爭去產生資料(two-path competition)的觀點去闡釋 KL 消失的問題。

2. 根據這個理論,我們可以解釋為什麼前面的固定或者調整 beta 的方法會有各自所對應的現象。在此基礎上,我們提出一種簡單重覆周期性調整 beta 的策略去或者 KL 消失問題 。

3. 請註意,我們的方法並沒有增加額外計算量,在實踐中很容易去實用,或者其它改變模型的方法去結合。比如,可以通過呼叫下麵的函式來實現本文的 beta 策略:

 

def frange_cycle_linear(n_iter, start=0.0, stop=1.0,  n_cycle=4, ratio=0.5):
    L = np.ones(n_iter) * stop
    period = n_iter/n_cycle
    step = (stop-start)/(period*ratio) # linear schedule

    for c in range(n_cycle):
        v, i = start, 0
        while v <= stop and (int(i+c*period)             L[int(i+c*period)] = v
            v += step
            i += 1
    return L 

 

個人點評

 

先貼代碼和博客鏈接:

Code:

https://github.com/haofuml/cyclical_annealing 

MSR Blog: 

Less pain, more gain: A simple method for VAE training with less of that KL-vanishing agony

個人覺得兩點比較有意思:1)對於 KL 消失的做出了的兩條信息流競爭的闡釋;2)演算法簡單,易用,有效。希望大家能從本文能有所收穫,做出更加有效的方法。

已同步到看一看
赞(0)

分享創造快樂