Transformer、BERT


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 設計了更通用的輸入層和輸出層,適配多任務下的遷移學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM