---
# System prepended metadata

title: GLAT | GLM - Glancing Transformer for Non-Autoregressive Neural Machine Translation
tags: [碩, ML, ASR]

---

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 的輸出產生下一次的輸出。
> 
> ![](https://i.imgur.com/arUV8Hp.png)
> 
> 由於 AR 是一次次輸出並參考前面，因此在 inference 的時候，decoder 的解碼速度會隨著句子的長度而提升。
> 
> 而 NAR 不是輸入後一次次的輸出，而是將輸入後一次性的產生所有輸出，這樣的話可以讓模型的速度加快。
> 
> ![](https://i.imgur.com/mpAgeaB.png)

本篇提出的 GLAT 為使用在機器翻譯 (machine translation) 上，因此會放較多重心在 GLM 上，並與 ASR 領域更為相關。

## 機率建模 (Language Model)
原本的 autoregressive model 每次輸出依賴之前的輸出，這類的模型在建模上就學到了**字詞之間的相互關係**，但 non-autoregressive model 希望可以平行處理，因此假設字詞之間是不相關的，但在 NLP 任務中字詞關係是重要的，因此現在的 NAT 模型目標放在找的一個方法可以讓模型學習到字詞之間的關係 (word interdependency)。

###### Figure 1. Different type of language model
<center>
    
![](https://i.imgur.com/RhnSclpm.png)  ![](https://i.imgur.com/BNj9JIDm.png)

</center>
<!-- ![](https://i.imgur.com/HSY8VWDl.png) -->`

- ### 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
![](https://i.imgur.com/LpcTyW7.png)

### 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 的程度預測。

## 結果與分析
![](https://i.imgur.com/QyAeDxG.png) ![](https://i.imgur.com/FiCARAt.png)

###### Fugure 3.  The trade-off between speed-up and BLEU & Performance under different source input

#### 輸入長度
當使用漸進式學習時，發現 GLAT 的效能較好，另外也發現在短句下 GLAT 相比 autoregressive Transformer 有更好的效果 (當長度小於 20)。

> 個人猜測：GLM 的字詞關係會隨著字與字之間的距離削弱。

#### Adaptive Sampling Number
![](https://i.imgur.com/5FEBOAXm.png)![](https://i.imgur.com/Fp9fLX1.png)
###### 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 的選擇
![](https://i.imgur.com/qMRfogBm.png)
###### 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)

