---
# System prepended metadata

title: HY機器學習#6： (Transformer)
tags: [李宏毅, 機器學習]

---

# HY機器學習#6： (Transformer)

https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/seq2seq_v9.pdf

Sequence to Sequence model (Seq2Seq)
輸出輸入長度都不定（輸出長度由機器決定）

# 主要應用

語音辨識、語音翻譯（有些語言沒有文字，無法先辨識成文字，就需要直接聽語音之後翻譯）、聊天機器人

很多語言處理(NLP)的問題，常可以歸納成Question Answering的問題，針對一串訊號輸出想要對應的結果，也就是Seq2Seq問題（但若能針對問題客製化的話更好）

例如針對評論輸出正反面、文法解析輸出樹狀結構、multi-label classification（決定類別數量不固定，可視為Sequence）、物件偵測（框出圖中數量不固定的物件）

![](https://i.imgur.com/y53jEa9.png)

![](https://i.imgur.com/C0RgnrY.png)

![](https://i.imgur.com/Y3hMWzL.png)

# 流程

input->encoder->decoder->output

## Encoder

### 原始論文的流程：
會經過self-attention以及fully-connected兩個過程，此稱為一個block，實際上會經過數個block

self-attention以及fully-connected都各自需要residual（將結果加上原來的自己）+layer normalization(將結果扣掉平均再除以標準差)兩個流程

（Encoder流程）
![](https://i.imgur.com/JNyBPmC.png)

（流程圖）
![](https://i.imgur.com/zmC4gnw.png)


### 其他可能的Encoder流程設計

![](https://i.imgur.com/zdzzoEp.png)


##  Autoregressive(AT) Decoder

向量長度=輸出的種類個數（例如中文字總字數），用one-hat表示

Encoder輸入+begin字元（表示要開始的一個字）
經由decoder輸出a(one-hat)
（decoder之後經過softmax取最大值作為結果）
a連同前面的輸入 經由decoder輸出b
ab連同前面的輸入 經由decoder輸出c
.....
輸出是一個一個產生的
直到輸出到End字元（通常會跟begin同一個字）才結束（輸出的字數由機器決定）

Non-Autoregressive(NAT) Decoder

https://www.youtube.com/watch?v=jvyKmU4OM3c&feature=youtu.be

一次輸入所有值，輸出所有結果（平行輸出）
字數的部份用某一個classify訓練得到；或設上限但若其中含有End字串，則此字串之後不計

優點：長度可控制（調整上限可以控制輸出語音的速度）、平行處理
缺點：表現較差（Multi-Modality問題）

![](https://i.imgur.com/AvCLSuR.png)

## Cross Attention- Encorder到Decorder

![](https://i.imgur.com/vDIaxWz.png)

Encoder的輸出經由轉換得到k1 k2...
Decoder則經過Mask的Self-Attention（只學習比自己還要之前的資料即可）再經過轉換得到q，q再跟前面的k1計算attention分數
qxki再normailization(softmax)得到ai'，ai再跟vi（ai經過轉換）相乘相加做加權，就可以得到v，v之後會再fully connected

![](https://i.imgur.com/V6C1LdZ.png)

這裡用的方法是把Encoder訓練多次之後最終答案，跟多層Decoder互動，但對應的方法可能可以很多種

![](https://i.imgur.com/cIjqxzo.png)


## Training

將所有輸出跟正確答案做Cross Entropy再相加，需要最小化Cross Entropy
Decoder在訓練時的輸入會是正確答案（Teacher Forcing）

![](https://i.imgur.com/yoW7pJI.png)

* Schedule Samping: 將Decoder的輸入偶爾給予錯的答案

![](https://i.imgur.com/pn3HyEI.png)


# Tips

## Copy Mechanism

有時候輸出會需要複製輸入的某些內容（例如摘要或是聊天機器人）

Pointer Network
https://youtu.be/VdOyqNQ9aww

Incorporating Copying Mechanism in Sequence-toSequence Learning
https://arxiv.org/abs/1603.06393

## Guided Attention

有些情況的產出應該要跟輸入順序一樣（例如語音合成或語音辨識），就需要給機器這些限制

Monotonic Attention
Location-aware attention 

## Beam Search

若只針對當下得到最好的結果往下跑，稱為Greedy Research
但這樣不一定是最好的，窮舉所有路徑不切實際
此時可以用Beam Search這個方法

此法有時候可能效果不太好
（Sentense Completion 無固定答案可能會比較差，這個時候加入雜訊可能會比較好）
The Curious Case of Neural Text Degeneration
https://arxiv.org/abs/1904.09751


![](https://i.imgur.com/KUZCuGD.png)


###### tags: `機器學習` `李宏毅`