Transformer
自 Attention 機制提出后,加入 Attention 的 seq2seq 模型在各個任務上都有了提升,所以現在的 seq2seq 模型指的都是結合 RNN 和 Attention 的模型。
Transformer 模型使用了 self-Attention 機制,不采用 RNN 的順序結構,使得模型可以並行化訓練,而且能夠擁有全局信息。
下圖是 Transformer 的結構。左邊是 encoder,右邊是 decoder。encoder 和 decoder 都先采用 self-Attention 計算上下文向量,再加上 decoder 中 attention 的使用。
(1)encoder
每個層由兩個部分組成,分別是 multi-head self-attention mechanism 和 fully connected feed-forward network。“N×” 就是有幾層,這里都是 6 層。
① multi-head self-attention mechanism
首先 Scaled Dot-Product Attention 公式如下,在 QKT 之后,為了防止其結果過大,會除以根號 dk,dk 由 Q 和 K 的 維度決定。
而 multi-head self-attention mechanism 就是把輸入分割成 n 個(論文中為8),然后對每份進行 Scaled Dot-Product Attention,再把輸出合起來。每個 head 可以學習到在不同表示空間中的特征。
② fully connected feed-forward network
全連接層,主要用來提供非線性變換。
是一個兩層的全連接層,第一層的激活函數為 Relu,第二層不使用激活函數
(2)decoder
輸入:encoder 的輸出以及對應前一位置 decoder 的輸出。所以中間的 attention 不是 self-attention,它的K、V來自 encoder 的輸出,Q來自上一位置 decoder 的輸出。
輸出:對應位置的輸出詞的概率分布。
第二層和第三層與 encoder 中的相似。第一層的 attention 多加了一個 mask,因為只能 attention 只能知道到前面已經翻譯過的輸出的詞語,翻譯過程中還並不知道下一個輸出詞語,這是之后才會推測到的。mask 操作產生一個上三角矩陣,上三角的值全為0,Softmax 之前需要使用 Mask 矩陣(與 QKT 相乘)遮擋住每一個單詞之后的信息。
Transformer 中,每層都有Add & Norm。Add 表示殘差連接,用於防止網絡退化;Norm 表示 Layer Normalization,進行歸一化,將每一層神經元的輸入都轉成均值方差都一樣的,這樣可以加快收斂。
還注意到在輸入之后,有一個 Positional Encoding,Transformer 不采用 RNN 的結構,而是使用全局信息,不能利用單詞的順序信息,而這部分信息對於 NLP 來說非常重要,否則 Transformer 就是一個詞袋模型了。所以 Transformer 中使用 Positional Encoding 保存單詞在序列中的相對或絕對位置。PE 的維度與單詞 Embedding 是一樣的。
上述公式表示的是絕對位置,選擇這個公式的原因是它可以用三角函數轉換表達相對位置。細節可以看這篇 https://zhuanlan.zhihu.com/p/137615798。
總結:
Transformer 與 RNN 不同,可以比較好地並行訓練,計算速度更快。
Transformer 的重點是 self-Attention 結構,其中用到的 Q, K, V矩陣通過輸出進行線性變換得到。
數據量大可能用 Transformer 好一些,數據量小的話還是 RNN-based model。
BERT
Bidirectional Encoder Representation from Transformers,即雙向 Transformer 的 Encoder。
BERT模型實際上是一個語言編碼器,把輸入的句子或者段落轉化成特征向量(embedding)。
論文中有兩大亮點:1. 雙向編碼器。作者沿用 Tansformer,並提出雙向的概念,利用 masked 實現雙向;2. 作者提出了兩種預訓練的方法:Masked-LM 和 Next Sentence Prediction 方法。作者認為現在很多語言模型低估了預訓練的力量。masked 語言模型比起預測下一個句子的語言模型,多了雙向的概念。
下圖最左為 BERT 的基本結構。
ELMo:使用 LSTM的方法實現。用雙向 LSTM 獲得前后上下文的信息。
OpenAI GPT:通過 Transformer 學習出來一個語言模型,也就是缺少了 encoder 的 Transformer(使用的 decoder 去掉第二層 self-Attention層 )。
GPT 和 ELMo 很大的不同就是在使用上,不再是將模型當作一個精致的特征提取器,后再加上特定模型,而是將模型當作處理大量特定問題的基礎模型,再上面進行 fine-tuning。就是把 pre-train 的模型當作基礎模型,特定問題只需要再上面做 fine-tuning(加特定輸出結構,改變輸入格)的模式。
而 BERT 在 OpenAI GPT 的基礎上,使用雙向的 Transformer block 連接。
整體分為兩個過程:
1. pre-train(預訓練)過程是一個 multi-task learning,遷移學習的任務,目的是學習輸入句子的向量。
2. fine-tuning(微調)微調參數(改變預訓練模型參數)或者特征抽取(不改變預訓練模型參數,只是把預訓練模型的輸出作為特征輸入到下游任務)兩種方式。
(1)輸入
BERT 對輸入做了更寬泛的定義,輸入表示既可以是一個句子也可以一對句子(比如問答)。
Token Embeddings 是詞向量,每個輸入的第一個位置放 CLS 標注(CLS 就是 class 簡寫),每個句子結尾用 SEP 標注。
Segment Embeddings 用來區別兩種句子,因為預訓練不光做 LM,還要做以兩個句子為輸入的分類任務(區分是否噪聲)。對於句對來說,EA 和 EB 分別代表左句子和右句子;對於句子來說,只有 EA。
Position Embeddings 和之前文章中的 Transformer 不一樣,不是三角函數而是學習出來的。
這三個向量都是訓練得到的。
(2)pre-train:Masked 語言模型(Masked LM)
Masked 語言模型是為了訓練深度雙向語言表示向量。 模型使用 n(論文中 n = 12 或 24)層 Transformer 的 encoder 層。
訓練方法為:作者隨機遮住 15% 的單詞。
① 其中 80% 用 [mask] 來代替。
② 10% 用隨機的一個詞來替換。
③ 10% 保持這個詞不變。
輸入為完整的句子,模型根據句子預測這句話中的每一個詞,最后只計算 [mask] 詞的損失。
encoder 不知道它將被要求預測哪些單詞或哪些單詞已被隨機單詞替換,因此它被迫保持每個輸入token的分布式上下文表示。
10% 的隨機替換是因為,如果 [mask] 只會出現在構造句子中,Fine-tunning 中不會出現 [mask] ,就會造成了預訓練和微調之間的不匹配。
此外,因為隨機替換只發生在所有token的 1.5%(即15%的10%),對模型的語言理解能力的損害可以忽略不計。
編碼器不知道哪些詞需要預測的,哪些詞是錯誤的,因此被迫需要學習每一個 token 的表示向量。
(3)pre-train:Next Sentence Prediction
訓練一個二分類的模型,來學習句子之間的關系。
選擇一些句子對 A 與 B,其中 50% 的數據 B 是 A 的下一條,剩余 50% 的 B 是語料庫中隨機選擇的。輸入這兩個句子,模型預測 B 是不是 A 的下一句。
pre-train 的兩部分,MLM 完成語義的大部分的學習,NSP 學習句子級別的特征。兩部分的輸組合在前面圖里的 pre-train,就是 NSP 的輸出放在首位,MLM 的輸出放在后面。
(4)Fine-tuning
BERT 將傳統大量在下游具體 NLP 任務中做的操作轉移到預訓練詞向量中,BERT 預訓練模型的輸出結果,無非就是一個或多個向量。下游任務可以通過精調(改變預訓練模型參數)或者特征抽取(不改變預訓練模型參數,只是把預訓練模型的輸出作為特征輸入到下游任務)兩種方式進行使用。
一般加上 FFNN(分類再加個 softmax)就好了。
論文中主要出現的四種任務如下圖所示。
(a)句子關系判斷(句對匹配)
輸出的第一個位置為類別標簽。
(b)單句分類任務(情感分類等)
輸出首位置為類別標簽。單句分類就不需要 [SEP] 符號了。
(c)問答任務(問答、翻譯等)
加感知機。句子對變成問題和文章,輸出 span 的起點和終點。
(d)單句標注(命名實體識別等)
每個輸入對應一個輸出。
總結:
預訓練使用了 MLM,使用雙向 LM 做模型預訓練。預訓練使用了 NSP,它可以學習句子與句子間的關系。
為下游任務引入了很通用的求解框架,不再為任務做模型定制。
優點:
Transformer Encoder 因為有 Self-attention 機制,因此BERT自帶雙向功能。
BERT 加入了 NSP 來和 MLM 一起做聯合訓練,獲取比詞更高級別的句子級別的語義表征。
BERT 設計了更通用的輸入層和輸出層,適配多任務下的遷移學習。