目錄
一、序列到序列(Seq2Seq)模型
1、Seq2Seq基本原理
2、Seq2Seq模型的應用
3、Seq2Seq模型還能做什么?
二、Encoder?
三、Decoder
1、Decoder 的輸入與輸出
2、Decoder 的結構
3、Non-autoregressive?Decoder
四、Encoder 和 Decoder 之間的配合
1、Encoder 和 Decoder 之間信息的傳遞
2、Encoder 和 Decoder 是如何訓練的?
五、Transformer 的一些 Tips
1、Copy Mechanism
2、Guided Attention
3、Beam Search
4、Optimizing Evaluation Metrics
5、訓練過程和測試過程的一個 mismatch
一、序列到序列(Seq2Seq)模型
Transformer 是一個?Sequence-to-sequence 的模型。
Sequence-to-sequence (Seq2seq)模型,輸入一個序列,輸出一個序列,輸出的長度由模型決定。
1、Seq2Seq基本原理
????????Seq2Seq模型用于將輸入序列映射到輸出序列,廣泛應用于機器翻譯、語音識別、語音合成、對話系統等任務。其基本結構由編碼器(Encoder)和解碼器(Decoder)組成:
-
編碼器(Encoder):負責接收輸入序列,將其轉化為一個上下文向量(或一系列上下文向量),為解碼器提供信息。
-
解碼器(Decoder):基于編碼器的輸出生成目標序列。
????????Seq2Seq通過訓練使得編碼器和解碼器之間的映射關系能夠最優化,進而實現輸入和輸出之間的映射??。
2、Seq2Seq模型的應用
Seq2Seq模型廣泛應用于以下幾個領域:
-
機器翻譯:輸入源語言,輸出目標語言。輸入和輸出序列長度可不同。
-
語音識別:將語音信號轉換為文本。
-
語音合成(TTS):根據文本生成自然語音??。
-
對話系統:自動生成與用戶輸入相應的回答??。
-
問答系統:根據輸入的上下文和問題,生成相應的答案
3、Seq2Seq模型還能做什么?
下面的的任務雖然能用Seq2Seq來完成,但Seq2Seq并不是最好的,對于不同的任務,刻制化不同的模型,效果會更好。
(1)語法分析
語法分析:對一個句子進行語法分析,如下圖:
????????? ?
????????輸入是一個句子,輸出是一個句子結構的框圖,這個結構框圖是序列嗎?可以把它寫成如下序列的形式:
????????????????
????????序列中的 “(? ” 和 “? )” 都是序列的一部分,通過模型輸出。
相關的研究論文:[1412.7449] Grammar as a Foreign Language
(2)多類別分類
分類任務的類別數不確定,不同的輸入可能有不同數量的輸出:
相關研究:
[1909.03434] Order-free Learning Alleviating Exposure Bias in Multi-label Classification
[1707.05495] Order-Free RNN with Visual Attention for Multi-Label Classification
(3)物品識別
Seq2Seq還能用在圖像中物品的識別,描述圖像等
相關研究:[2005.12872] End-to-End Object Detection with Transformers
二、Encoder?
功能:給一排向量,輸出一排向量。
???????????????????????????????????????????????? ?
看 Encoder 內部結構如下:
?????????????????????????????????????????????????????
一個 Block 并不是一個 Layer ,他可能是很多層,如下圖:是一個 Self-attention 層 + 一個 FC(前饋網絡 feedforward?Connect)層。
在原來的 Transformer 中,一個Block做的是更復雜的,如下圖:
???????????????????????
即在?Self-attention 層和 FC 層之間加入一些東西,將?Self-attention 層的輸出再加上原來的輸入,這樣的架構被稱為 residual connection。隨后呢,再將加和的結果輸入一個 Layer normalization 層,隨后再輸入 FC 層,而這里的 FC 層也用 residual connection 架構,FC 的輸出再經過一個? Layer normalization 層,最終它的輸出才是一個 Block 的輸出。
所以說,整個 Encoder 層如下:
????????? ?
在第一個Block 之前,要加上 位置編碼,而且 Block 的?Self-attention 是?Multi-head Self-attention 。上圖中的右側的結構并不是整個 Encoder ,而是只是?Encoder 中的一個 Block 。
至此上面的介紹就是原始論文 transformer 的?Encoder,在 BERT 中的其實就是? transformer 的?Encoder。
下面是一些對原始?Encoder 的改進:
第一篇論文(這里)是對?Layer normalization 放的位置進行了改變,第二篇論文(這里)是將?Layer normalization 改為了 Batch Normalization?
三、Decoder
1、Decoder 的輸入與輸出
這里所講的 Decoder 是 Autoregressive - Decoder, 即自回歸解碼器。Autoregressive的縮寫為:AT
????????????????
Decoder 接受 Encoder 的輸出作為輸入,還有就是它在輸出序列的第一個元素時接受一個 Begin
的向量作為輸入,得到第一個輸出后,再將第一個輸出作為輸入,取代原來 Begin 向量的位置,最后輸出序列的第二個元素,依次進行,得到輸出的全序列。注意:這里的第一個元素輸出是一個字(以漢字為例),但 Decoder 的輸出是一個向量,由這個向量再根據原來對所有字的 one-hot 編碼,找到輸出的是哪一個字,這里的輸出并不是一個?one-hot 編碼,這個輸出的向量的每個元素代表的是每個字的概率,在?one-hot 編碼表中找到最大可能的字作為輸出的字,但第一個輸出作為輸入時(為得到第二個輸出),輸入的是?one-hot 編碼,即一個元素是 1 ,其他都是 0 。
這個地方還不確定對不對 ?
如何知道什么時候結束輸出呢?
解決方式如下,在給所有字?one-hot 編碼時,給定一個特殊的字,假如說是 “斷”,當這個字輸出時,就斷掉輸出。在訓練過程中也給訓練資料加入這個 “斷” ,這樣的話模型就可以自已學習到什么時候結束輸出了,即什么時候結束輸出是由模型決定的。(有的地方這個 序列開始的符號和序列結束的符號用的是同一個),
我們希望上面的模型應該在合適的時候斷掉輸出,如下圖:
???????????????????????? ?
2、Decoder 的結構
????????
對比?Encoder 和?Decoder 的結構,如下圖:
????????
可見,當 Decoder? 擋住中間的 一塊 “接受?Encoder 輸出作為輸入的塊” 后,它的結構與 Encoder 幾乎一樣。
擋住后還不一樣的地方:
第一個地方就是?Decoder 在最后多加了 Linear 和 Softmax 層,是為了得到輸出各個元素的概率信息。
第二個地方就是?Decoder 的注意力機制部分使用了 Masked ,這是由于?Decoder 的輸入并不是一次全部并行輸入的,它的輸入是一個一個加的,所以說在計算?注意力機制層 的輸出時不能看到后邊的信息(訓練的時候即使有后邊的信息也不能看),即:
???????????????????????
也就是說:
????????在計算??時,只能考慮?
?;
????????在計算??時,只能考慮?
、
????????在計算??時,只能考慮?
、
、
????????在計算??時,只能考慮?
、
、
、
更具體的計算過程,如下圖:
??????????????????????????????????????
3、Non-autoregressive?Decoder
Non-autoregressive(非自回歸),縮寫為:NAT
AT?Decoder 是一個一個輸出的,而 NAT?Decoder 是一下輸出序列的全部。
???????????????????????
即?NAT?Decoder 一次接受很多個 開始符號 Begin,一次輸出所有的元素。
在 AT?Decoder 中,模型可以通過輸出結束標識符來決定什么時候結束輸出,那么?NAT?Decoder 如何知道什么是結束輸出呢?
有兩種解決方法:
- 第一種:另外做一個單獨的分類器,這個分類器以 Encoder 的輸出作為輸入,以??NAT?Decoder 模型輸出序列的長度 n 作為輸出,從而決定? NAT?Decoder 什么時候能結束輸出。即在??NAT?Decoder 輸入 n 個Begin 。
- 第二種:同樣有一個結束標識符,但設置?NAT?Decoder 輸出非常長的序列,輸出的序列中如果有 結束標識符,則標識符后面的截斷不要。
NAT?Decoder 的優點:
- 它是并行化,在速度上比?AT?Decoder 快,
- 如果是另外做一個單獨的分類器來決定輸出的長度,則可以靈活地決定輸出的長度,比如說對于聲音輸出模型,對輸出長度減半(即將? 決定模型輸出序列長度的分類器的輸出除以2 )那么輸出的聲音長度就為原來的一半,聲音就倍速了。
NAT?Decoder 的缺點:
NAT 通常是比 AT 的輸出性能要差,(為什么呢?因為 Multi-modality(意思是多模態))
更多的?NAT?Decoder 相關的知識:https://youtu.be/jvyKmU4OM3c
四、Encoder 和 Decoder 之間的配合
1、Encoder 和 Decoder 之間信息的傳遞
這部分內容就是上面比較?Encoder 和 Decoder 時遮住的一塊。
???????????????????????
Cross attention 是什么呢??
在計算 注意力? 時 使用 Decoder 的 q 值(Query)和 Encoder 的 k、v 值(Key、Value)來計算注意力?
?的值(代表相關程度)。如下圖:
??????????????????????????????????????
??????????????????????????????????????
Encoder 和 Decoder 都有很多層,那么從 Encoder 到 Decoder 傳遞的信息是怎么樣的呢?
在原始論文中,都是 Encoder 的最后一層向 Decoder 的各個層進信息傳遞(通過 Cross attention? 進行)。如下圖:
也有一些人嘗試不同的信息傳遞方式,如下圖:相關論文(這里)
2、Encoder 和 Decoder 是如何訓練的?
首先準備好 帶標簽序列的序列,(這里以聲音信號轉為文字為例),準備好聲音信號和它對應的文字序列。
聲音信號傳入 Encoder 進行編碼,再將信息通過?Cross attention 傳遞到 Decoder ,傳入 Decoder Begin 標識符開始輸出第一個元素,但和模型使用時不同,這里并不一定要把輸出的第一個元素再次輸入到 Decoder ,而是使用真實標簽序列的第一個元素輸入 Decoder 來得到第二個輸出,一次下去,每次輸入 Decoder 的都是真實標簽,在序列輸出完畢后,最后一個元素應該是 “斷” 標識符。如下圖:
???????????????????????
五、Transformer 的一些 Tips
1、Copy Mechanism
????????Copy Mechanism(復制機制) 是一種在自然語言處理(NLP)和其他序列生成任務中使用的技術,旨在解決模型生成文本時可能面臨的重復性或信息遺漏問題,特別是在任務中需要精確復制某些輸入內容的情況下。
更詳細的:
講解:Pointer Network :?(這里)
論文:Incorporating Copying Mechanism in Sequence-to-Sequence Learning?(這里)
2、Guided Attention
????????Guided Attention(引導注意力) 是一種在神經網絡中使用的技術,旨在通過某種方式增強或引導模型的注意力機制,使其專注于對任務更為重要的信息。這種技術在深度學習中尤為重要,尤其是在處理復雜任務時,如圖像描述生成、機器翻譯、視覺問答等。通過引導模型的注意力,可以有效提高模型的性能和效率。
3、Beam Search
????????Beam Search(束搜索) 是一種啟發式搜索算法,常用于序列生成任務中,特別是在自然語言處理(NLP)任務中,如機器翻譯、文本生成、語音識別等。它是一種改進的貪心算法,旨在平衡搜索空間的大小和結果的質量,避免傳統貪心搜索可能遇到的局部最優問題。
???????????????????????
使用 Beam Search 實際情況下并不一定就更好。
4、Optimizing Evaluation Metrics
????????在模型評估時,使用的?Evaluation Metrics(評估方法)是 BLEU score ,這種方法是比較兩個序列之間的區別,由于序列之間的元素是有聯系的,這種方法是整體評估兩個序列的差別。
????????但在訓練過程中,模型輸出序列的每個元素是分開的,是一個一個輸出的,而且在每個元素輸出前給到 Decoder 的輸入都是正是標簽序列的相應前一個元素,所以說計算 loss 時使用的評估方法的依據是單個元素之間的差別(交叉熵損失)。為什么在訓練時不用? BLEU score 呢?因為? BLEU score 很復雜不容易微分,一般不用。
但像這樣不容易計算的問題,有一種萬能的方法來解決,就是李宏毅老師教程中所說的?“硬 Train 一發”,即在這個梯度不容易計算的問題中,直接把他當作?Reinforcement Learning(強化學習)的問題,硬做。用另一個額外的模型預測這個 loss 。
相關研究:When you don’t know how to optimize, just use reinforcement learning (RL)!
(這里)
5、訓練過程和測試過程的一個 mismatch
????????在訓練過程中,由于有真實的標簽,每次 Decoder 輸出的前一個的輸出都不受真正的前一個的輸出,而是真實的標簽。但在 test 時(即訓練好的模型使用時),并沒有真實的標簽,每次?Decoder 的輸入都是前一個真正的輸出,可能會出現 “ 一步錯,步步錯 ”,要怎么解決呢?
????????一個解決方法是在訓練過程中就給一些錯誤的信息,即 訓練過程中,就給?Decoder 輸入一些錯誤的信息,并不一定要是真實標簽。這一招叫做:Scheduled Sampling 。
相關研究:
??????????????????????????????????????
????????Original Scheduled Sampling:(這里)
????????Scheduled Sampling for Transformer:(這里)
????????Parallel Scheduled Sampling:(這里)