GLAT | GLM - Glancing Transformer for Non-Autoregressive Neural Machine Translation
==
###### tags: `碩` `ML` `ASR`
## Introduce
GLAT 是一種 Transformer 的變體,不同於傳統使用 autoregressive (AT) 的形式,而是使用 non-autoregressive (NAT)。雖然 AT 的準確度高但在解碼的時候,由於是依照時間順序一次次的輸出,因此速度很慢,而 NAT 就致力於達成平行輸出以提高解碼速度。
- **目標**:現行 NAT 的模型不是準確度太差,不然就是解碼速度慢,因此 GLM 的目的就是在提高速度的同時也不會犧牲太多準確度。目前來看,GLM 的準確度與 Transformer 相差不會太多,但速度提升了很多。本篇提出兩大問題與目標:
1. 可**平行解碼**但效能不會差 AT 太多
2. 推理階段採用 **single pass 解碼**
- **特點**:GLM 改善了先前 NAT 的兩個缺點:
1. 學習字詞之間的相關性 (interdependency)
2. Single-pass 的平行解碼
> ### NAR - Non-autoregressive
> #### AR - autoregressive
> 首先要知道 autoregressive (AR) 模型是什麼,在處理一些其輸出與自身輸出是有關連性的問題時,會需要用到回歸模型去估測機率分布,通常為 encoder/decoder 架構,如 transformer 就是一種 AR 模型,encoder 將聲音訊號轉換為一組向量,然後輸入進 decoder,decoder 依照 encoder 的輸出一次輸出一個值,接著在 depend on 這次的輸出與 encoder 的輸出產生下一次的輸出。
>
> 
>
> 由於 AR 是一次次輸出並參考前面,因此在 inference 的時候,decoder 的解碼速度會隨著句子的長度而提升。
>
> 而 NAR 不是輸入後一次次的輸出,而是將輸入後一次性的產生所有輸出,這樣的話可以讓模型的速度加快。
>
> 
本篇提出的 GLAT 為使用在機器翻譯 (machine translation) 上,因此會放較多重心在 GLM 上,並與 ASR 領域更為相關。
## 機率建模 (Language Model)
原本的 autoregressive model 每次輸出依賴之前的輸出,這類的模型在建模上就學到了**字詞之間的相互關係**,但 non-autoregressive model 希望可以平行處理,因此假設字詞之間是不相關的,但在 NLP 任務中字詞關係是重要的,因此現在的 NAT 模型目標放在找的一個方法可以讓模型學習到字詞之間的關係 (word interdependency)。
###### Figure 1. Different type of language model
<center>
 
</center>
<!--  -->`
- ### Transformer
Transformer 使用自回歸分解 (autoregressive factorization) 去最大化其相似度:
$$
\mathcal{L}_{\rm AT} = {\rm log} \ P(Y|X;\theta) = \sum_{t=1}^T {\rm log} \ p(y_t|y_{<t},X;\theta)
$$
其中 $y_{<t} = \{{\rm [BOS]}, y_1, y_2,..., y_{t-1}\}$,注意到其訓練採用**由左至右**的 teacher forcing,字詞關係藉由這種單向的訓練習得,在推理階段,之前的輸出作為這次的輸入一次次的產生新的 token。
> 這種方式由於是依序生成,可以將自身輸出遞迴,建立字詞關係。
- ### vanilla NAT
Vanilla NAT 使用與 Transformer 相同的 encoder,搭配一個平行解碼的 decoder,但這邊假設字詞之間無關 (conditional independent factorization) 然後將相似度分解為:
$$
\mathcal{L}_{\rm NAT} = \sum_{t=1}^T {\rm log} \ P(y_t|X;\theta)
$$
這邊 NAT 的相似度是 ${\rm log} \ P(Y|X;\theta)$ 的逼近值,從上式可以看出每個 token 都只與 input 有關,字詞之間的關係在解碼的時候被破壞,雖然可以達到平行化生成,但卻大大降低了準確度。在推理階段 decoder 是複製 encoder 的輸出做為輸入進行平行生成的。
- ### MLM (Masked Language Model)
由於先前的 NAT 破壞了字詞之間的關係,因此開始有人想辦法在 decoder 中將字詞關係恢復,接著有人提出了使用多次迭代的方式 (multi-pass iterative decoding) 讓模型**重建**字詞關係,MLM 根據下式進行訓練:
$$
\mathcal{L}_{\rm MLM} = \sum_{y_t \in \mathbb{RM}(Y)} {\rm log} \ p(y_t|\Phi(Y, \mathbb{RM}(Y)), X; \theta)
$$
其中 $\mathbb{RM}(Y)$ 代表從 $Y$ 中隨機抽出一組詞;$\Phi(\cdot)$ 表示用 [MASK] 替換所選中的詞,例如 Figure 1c. 當 $\mathbb{RM}(Y) = \{y_2, y_3\}, \ \Phi(Y, \mathbb{RM}(Y)) = \{ y_1, [{\rm MASK}], [{\rm MASK}], y_4, y_5 \}$。
MLM 在訓練的時候會隨機遮蓋 token 然後輸入 decoder,decoder 的目標是要預測被遮蓋的字,每次迭代會依據前一次迭代的結果進行,藉由多次迭代讓模型可以重建字詞關係,但由於多次解碼 (multu-pass),因此該方法的速度會慢於 vanilla NAT。
## Glancing Language Model
雖然有了 vanilla NAT 和 MLM,但 NAT 類型的模型綜上述所述,vanilla NAT 破壞了字詞關係導致結果不準,MLM 雖然重建但是使用 multi-pass 要花費很多資源,因此 GLM (瀏覽語言模型) 在致力於解決上述兩個問題以達到**速度**快且**準確度高**的兩大目標,也就是重建字詞關係並能夠 single-pass 解碼。
> GLM 是一種訓練方式,只存在在 training 中,透過改進訓練流程還原字詞關係。
###### Figure 2. Glancing sampling strategy

### GLM 架構
給定輸入 $X=\{x_1, x_2,..., x_N\}$, GLM 任務是去預測 $Y=\{y_1, y_2,..., y_T\}$,並依照下述式子優化:
$$
\mathcal{L}_{\rm GLM} = \sum_{y_t \in \overline{\mathbb{GS}(Y,\hat{Y})}} {\rm log} \ p(y_t|\mathbb{GS}(Y,\hat{Y}),X;\theta)
$$
其中 $\hat{Y}$ 是初始預測的 token (第一次解碼),$\mathbb{GS}(Y,\hat{Y})$ 代表參考現在模型的擬合程度,從 $Y$ 中選出來的 token,因此 $\overline{\mathbb{GS}(Y,\hat{Y})}$ 表示那些沒被選到的 token,如 Figure 2. 所示。上式表示模型預測沒被選到的 token 的相似度。
### GLM 機制
在初始預測的時候,decoder 的輸入 $H=\{h_1, h_2,...,h_T\}$ 會從 encoder 的輸出複製而來,這邊的複製採用 **uniform copy** 或 **soft copy**。其中 $\hat{Y}$ 透過 $f_{dec}(f_{enc}(X;\theta),H;\theta)$ 使用 *argmax* 解碼。
為了計算 $\mathcal{L}_{\rm GLM}$,會將 $\hat{Y}$ 與 ground-truth 進行比較並依據結果選擇 token,此步即為 $\mathbb{GS}(Y,\hat{Y})$。接著將被選到的位置從 $h$ 替換成對應的 word embedding。
$$
H' = \mathbb{RP}({\rm Emb}_{y_t \in \mathbb{GS}(Y,\hat{Y})}(y_t), H)
$$
接著 $H'$ 會做為 decoder 的輸入去計算輸出 token 的機率分布,此處為**剩下** token 的機率分布 。
$$
p(y_t|\mathbb{GS}(Y,\hat{Y}),X;\theta) = f_{dec}(H',f_{enc}(X;\theta),X;\theta)
$$
GLM 的機制簡得來說是當初使預測的準確度很低時,會選擇較多 token 讓模型盡量去預測片段;反之則選較少 token 讓模型預測整段句子。
### GLAT
GLAT 使用相同的 encoder-decoder 架構,並在訓練階段使用 GLM 去學習字詞關係。encoder $f_{enc}$ 由多層 MHA (multi-head attention) 組成; deocder $f_{dec}$ 則由多層 MHA 組成,每層 MHA attends 在 encoder 與前一層 MHA 的輸出。
### Adaptive glancing sampling strategy
這個策略會適應性的從目標句子去選擇 tokens 與其位置,被選中的 token 帶有"**正確**"的資訊,這些資訊可以幫助 decoder 在訓練的時候預測剩下的 tokens。
在模型效能不好的時候會選擇較多的 token 然後當模型逐漸變好的時候 token 會越選越少。
> #### 理解
> 該方法會在模型效果差的時候讓模型關注生成句子的片段 (fragment);當模型能夠擬合訓練資料時則該方法會減少取樣的比例,讓模型能夠學習生成整段句子已達到平行化且 single-pass 生成,此方法讓 decoder 學會了字詞關係,最後的結果可以從訊號中找出最適合的 token 來生成。
### Training
GLM 的訓練與課程訓練 (curriculum learning) 相似,一開始先讓模型學習如何生成片段,再漸漸地轉為學習生成整個句子。在此 GLM 採用兩次解碼,在訓練的時候只在第二次解碼才更新參數:
**step 1.** 將 $H$ 送進 decoder
第一次與 vanilla NAT 相同,這部不會更新參數,此步的輸出之準確度表示模型能夠擬合的程度。
**step 2.** Sampling 後的結果再次送進 decoder
Glancing sampling 根據第一次解碼的結果去取樣 reference 中的字詞,然後讓模型去學習預測沒被選到的字詞。
且在此處 GLM 不使用 [MASk],而是直接使用 encoder 的輸出當作沒被選到的位置的替代,這種作法更貼近現實且可以增強訊號與字詞的互動,經過實驗後推論,這個方法可以讓模型捕捉到兩個方向的 context,表示模型能夠有更多參考與字詞關係以生成更正確的結果。
#### Glancing sampling
**Step 1.** 決定取樣數量
首先需要知道取樣的數量,通過解碼的方式的到 $S$。
**Step 2.** 取樣
從 reference 中**隨機**抽出 $S$ 個 tokens。
> 經過實驗,隨機選擇 token 會有較好的效果。
$$
\mathbb{GS}(Y,\hat{Y}) = {\rm Random}(Y, S(Y,\hat{Y}))
$$
此處 $S$ 會依據 $Y$ 與 $\hat{Y}$ 的不同產生:
$$
S(Y,\hat{Y}) = \lambda \cdot d(Y,\hat{Y})
$$
$\lambda$ 為取樣率 (sampling ratio),為 hyper-parameter,可以彈性的控制取樣的 token 數。差異的比較採用用 Hamming distance,
### Inference
GLAT 指針對了訓練的方式做更改,他在推理階段只需要 single-pass 就可以了,但與訓練不同,在推理時需要先預測輸出的長度,這邊採用 encoder 的輸出來預測長度,並透過額外新增一個 [Length] 標籤來表示。
另外也提出了兩中方式來增強效果,NPN 和 CTC 的程度預測。
## 結果與分析
 
###### Fugure 3. The trade-off between speed-up and BLEU & Performance under different source input
#### 輸入長度
當使用漸進式學習時,發現 GLAT 的效能較好,另外也發現在短句下 GLAT 相比 autoregressive Transformer 有更好的效果 (當長度小於 20)。
> 個人猜測:GLM 的字詞關係會隨著字與字之間的距離削弱。
#### Adaptive Sampling Number

###### Table 1. Performances with fixed(left) and decreasing(right) sampling ratio.
這邊分析了不同的取樣模式造成的影響,以下使用 $\lambda * T$ 來與 $\lambda * d(Y, \hat{Y})$ 比較,其中 $T$ 為句子的長度:
1. 固定 sample rate
2. 遞減
結果發現遞減的效果必固定的好,但本篇提出的 adaptive 的方法比兩者都更好
#### 對於 Reference 的選擇

###### Table 2. Performance with different reference word selection strategies.
這邊分析不同的選擇策略對模型效能的影響,本篇預設所有的 token 同樣重要因此為隨機選擇。
## Question
Q:Inference 的時候有 [LENGTH] 標籤,在 decode 的時候要怎麼實作不同長度的輸出?
## 參考資料
[【论文解读】Glancing Transformer](https://zhuanlan.zhihu.com/p/391069003)
[Glancing Transformer for Non-Autoregressive Neural Machine Translation](https://arxiv.org/abs/2008.07905)
[李宏毅DLHLP.20.Non-Autoregressive Generation](https://blog.csdn.net/oldmao_2001/article/details/109580466)