Decoder - Autoregressive (AT)
Decoder 種類
- Autoregressive (AT)
- Non-autoregressive (NAT)
AT 運作流程 (以語音辨識為例)
- 輸入一個代表開始的特殊符號
- 輸入這個符號給 Decoder 後,Decoder 接下來會輸出句子的第一個字
- 常見的符號有 <BEGIN>, <SOS> (start of sentence) 等
- Decoder 產生輸出
- Decoder 輸出一組向量 (向量維度=所有可能輸出的數量)
- 向量經過 softmax 後,得到輸出漢字的機率分布
- 從機率分布中,取出機率最大的漢字作為輸出
- 產生下一組輸出
- 將 Decoder 的輸出漢字,輸入 Decoder
- 重複前面的過程,Decoder 輸出機率最大的漢字
- 輸出一個代表結束的特殊符號
- 輸出這個符號後, Decoder 就會結束運作
- 常見的符號有 <END>, <EOS> (end of sentence) 等
幾個問題點
- Decoder 在運作時,其實也會使用 encoder 的輸出,此處先省略不說明
- 候選輸出有多種粒度選擇,以英文 NLP 來說,分別有 character, subword, word
- Error propagation: 一連串的輸出過程中可能發生錯誤,造成後續的錯誤
Decoder - Non-Autoregressive (NAT)
NAT 與 AT 的比較
- AT - 以RNN為例,輸出是逐個循序生成
- NAT - 以Transformer 為代表,輸出是一次同時產生
- NAT 決定輸出長度的方式比較特別,有以下幾種
- 使用另一個模型,根據 encoder 的輸出,預測 decoder 輸出長度
- 直接去除終止符號後面的輸出
- NAT 的優勢與劣勢
- NAT 運算能有效的平行化
- NAT 能控制輸出的長度
- 表現上通常是 AT 優於 NAT
Transformer 介紹
Encoder 與 Decoder 的比較
- 若省略 Decoder 一部分 (灰色遮擋處),兩者都是 Attention + Feed forward
- Decoder 最後加了 softmax 使輸出帶有機率分布特性
- Multi-Head Attention 多了 Mask
Masked Multi-Head Attention 的作用
- 一般的 Self-attention
- 計算序列輸出的每個值時,所有輸入都會參與計算
- E.g.
- 計算輸出值時,會使用所有的輸入 (a1, a2, a3, a4)
- Masked Self-attention
- 計算序列輸出的每個值時,都只使用當前位置前方的輸入
- E.g.
- 計算輸出值 b1 時,只使用 a1 作為輸入
- 計算輸出值 b2 時,只使用 b1, b2 作為輸入
- 會使用 Masked Self-attention,是因為當 Decoder 產生輸出時,是逐個循序產生的。所以在產生當前輸出時,無法參考未來的輸出作為輸入。
Cross-Attention
- 與 Self-Attnetion 的差別在於:
- Self-Attnetion 只發生在一個模塊內部 (Encoder 與 Decoder 模塊都有)
- Cross Attention 發生在 Encoder 與 Decoder 之間
- 運作流程
- 首先使用 Decoder 自身的輸出,透過 Masked self-attention 計算得到 q
- 使用 q 與 Encoder 產生的 k, v ,透過 Cross attention 計算,得到模塊的輸出
- Cross Attention 的多種變化
- 在 Transformer 的原始設計中,Decoder 只使用了 Encoder 最後一層輸出
- 事實上,兩個模塊之間的互動可以發生在不同層之間
Training
- 每個輸出都可以看成是分類問題,所以最小化一個 cross-entropy loss 即可
- Teacher forcing
- 使用了 Gorund-true 而不是 Decoder 的輸出,來做為 Decoder 輸入
- 目的是為了避免前面提到的 error prapagation (一步錯、步步錯)
- 有個問題點是,訓練過程變得跟推論時不同
Tips for Training
- Copy Mechanism
- Copy 原本輸入的一部分作為輸出
- 應用案例: Chat-bot, Summarization
- Guided Attention
- 在某些情況下,Attention 太過彈性,導致輸出結果不盡人意
- 以 TTS 為例,發財產生的缺少了第一個音節
- 因此透過給 Attention 加上一些限制,強迫讓其結果不至於太奇怪
- 可能是: 強迫每個字一定要有輸出
- 可能是: 強迫 Attention 的權重峰值,落在相對應的位置
- 在某些情況下,Attention 太過彈性,導致輸出結果不盡人意
- Decoder 產生序列輸出的幾種方法
- Greedy:
- 只選擇當前機率最大的結果
- 難以得到最佳解
- Brutal force:
- 計算所有可能輸出的機率,最後挑選機率最大的
- 可得到最佳解,但是計算量太大,難以實現
- Beam Search:
- 保留幾個最佳的候選結果作後續計算,最後挑選機率最大的
- 近似最佳解,計算量也可接受
- Sampling:
- 根據輸出的概率,取樣得到輸出
- 輸出帶有隨機性
- Beam Search、Sampling 各有適合的應用場景
- Beam Search: 答案明確的任務,像是語音辨識
- Sampling: 需要隨機性的任務,像是文本創作、TTS
- Greedy:
Optimization Evaluation Metrics?
- Cross-Entropy & BLEU
- 模型的訓練損失與評估,使用的是不同的 metric
- 損失: Cross-Entropy loss
- 評估: BLEU
- 可能造成模型優化的方向,不是以最大化 BLEU 為主
- BLEU 本身難以用做訓練損失,因為其計算複雜、無法微分
- 使用 RL 可以克服這個問題
- 模型的訓練損失與評估,使用的是不同的 metric
- Exposure Bias
- 是由 Teacher forcing 中,訓練與推論不一致所產生
- 解決的辦法是在 teacher forcing 中加入一些錯誤 (此法被稱為 Schedule Sampling)
- Schedule Sampling 最早被用於 RNN,當用於 transformer 時會降低其平行化的能力,因此有其他修改版本