Transformer

fcmaple
Jul 29, 2021

--

Transformer 是一個sequence to sequence 的Model。

input 一個sequence,output一個sequence,output長度由機器自己決定。

Seq2seq:

Encoder :

負責處理input的sequence,處理完之後當作Decoder的輸入。

給一排向量,輸出一排向量。

在encoder裡面有很多個block,每次輸入一堆vector,輸出一堆vector,接著輸入下一個block,而每一個block裡面做的事情是好幾層layer做的事情。

block裡面做self-attention,之後再丟到fully-connected的feed forward network 裡面,之後的vector就是輸出的vector。

Transformer會在self-attention的同時加上自己原有的Input,得到輸出,這種network架構稱作residual connection。之後再進行normalization,使用layer normalization(計算輸入的vector的mean和σ),與batch normalization不同的是他是計算同一個example的不同dimension的mean和σ,normalization之後的輸出才是fc的輸入。

故上圖的Add & Norm就是residual connection + layer normalization。

輸入的Input需要經過一次self之後residual,之後再fc的feed forward network,之後再做一次Add& Norm,最終輸出。

其實encoder就是BERT。

Decoder

Decoder 分兩種: Autoregressive(AT)、

Autoregressive: 以語音辨識當作例子說明。

一開始Decoder將Enconder輸出,輸入進Decoder,之後給Decoder一個特殊的符號,那個符號代表開始(one-hot-vector),之後的輸出也是One-hot-vector,且這個vector的長度跟vocabulary的長度一樣長(假設輸出是中文,可能就是很多中文的總辭彙當作一個vector),這個vector已先透過softmax,所以得分最高的值所代表的中文字,就是該輸出。

第一個輸出之後緊接著當作第二個輸入,此時Decoder看到begin,看到機,那麼他得分最高的就是器,之後依序持續輸出。

但有沒有可能如果其中一個輸入錯誤,會不會導致後面的輸出結果跟著錯呢?(error propagation)

看decoder跟encoder的差異,其實除了中間遮罩的部分外,其他蠻像的,在self-attention的部分有masked。

masked

masked self-attention不能看後面之後的vector,考慮b1時,只能考慮a1,考慮b2,只能考慮a1、a2。

為何要加masked? 因為decoder的output是一個一個產生的所以是先有a1才有a2,故要加mask。

因為機器不知道甚麼時候要停下來,要讓她學習如何停下來,我們將一個"斷"的特殊符號放在所有輸出的vector的其中一個。

Non-auto regressive Model(NAT)

他是一次輸出一整排vector,給他一整排的begin,他就會輸出一整排的結果。

Q: 要怎麼知道要輸出多少個begin呢?

A:

  1. 可以制定一個classifier,吃encoder的input,輸出是一個數字,代表decoder應該要輸入多少個BEGIN,
  2. 直接給他一大堆BEGIN(給他上限值的BEGIN),到時候Decoder輸出end的右邊都當作沒有輸出。

優點: 平行化,可控制長度。

缺點: performance比AT差

Encoder跟Decoder之間傳遞訊息

Encoder 產生的output a1,a2,a3,decoder的第一層self-attention(mask)產生向量,經過transfer => q,之後乘上k1,k2,k3,得到α'1,α’2,α’3,之後α’1,α’2,α’3分別乘上v1,v2,v3加總後得到v過fc(跟self-attention運作像)。

Training

首先要有一堆訓練資料,以語音辨識為例,要有一堆聲音訊號。

輸入一段聲音訊號,第一個正確輸出為機,當我們把begin輸入進去時,希望得到跟機愈接近愈好的答案,機這個答案會被表示成one-hot vector,在vector中,只有機這個維度的數值是1,其他都為0。

Decoder輸出是一個distribution,會希望這個機率分布跟one-hot vector愈接近愈好,計算中間的cross-entropy,希望這個值愈小愈好。這件事情跟分類很像。

每一個輸出都有一個cross entropy,最後要記得輸出"斷"這個vector。

Teaching force: 把正確答案當作decoder的輸入。

Beam Search

EX: 假設decoder只能產生兩個字(A、B),在第一個time step 決定一個,假如決定A,之後再繼續決定A、B要選誰,每次Decoder都是選分數最高的,這種方式稱作Greedy Decoding。

但是綠色這條雖然一開始選分數低的,但是之後都是高分數。那麼是不是應該要選綠色這條。但我們不能窮舉所有可能的solution。

Beam search 為一個演算法可以找出大概的solution。

這個方法有時有用有時沒用。需要機器有創造力的時候會沒有用。

#以上為參考李宏毅老師自己做筆記使用

--

--

fcmaple
fcmaple

No responses yet