1. 程式人生 > 實用技巧 >【翻譯】面向自然語言處理的深度學習(一)

【翻譯】面向自然語言處理的深度學習(一)

講解: Mike Lewis

編輯:
Jiayu Qiu, Yuhong Zhu, Lyuang Fu, Ian Leefmans ,2020年4月20日

翻譯:
Yibing Ran, 2020年12月30日
原文閱讀

概述

  • 近年來取得了驚人的進步:
    • 對於某些語言,人們更喜歡機器翻譯而不是人工翻譯
    • 在許多問答資料集上的超人效能、
    • 語言模型生成流暢的段落(如Radford等,2019)
  • 最每個任務所需要的最小專業技術,可以用相當通用的模型實現

語言模型

  • 語言模型為文字分配概率:\(p(x_0,\cdots,x_n)\)
  • 有許多可能的句子,因此我們不能僅僅訓練一個分類器
  • 最為流行的方法是使用鏈式法則對分佈進行分解:

\[p(x_0,\cdots,x_n)=p(x_0)p(x_1|x_0) \cdots p(x_n|x_{n-1}) \]

神經語言模型

我們把文字輸入到神經網路,神經網路將所有上下文對映為一個向量,這個向量表示下一個單詞。我們有一個大的詞嵌入矩陣,該詞嵌入矩陣包含模型可能輸出的每個單詞的向量。然後我們通過背景向量和每個單詞向量的點積計算相似度。我們將得到預測下一個詞的概率,然後通過最大化似然訓練這個模型。這裡關鍵的細節是我們不直接處理單詞,而是處理子詞或字元。

\[p(x_n|x_{0,\cdots,n-1})= softmax(Ef(x_{0,\cdots,n-1})) \]

(注:原文為$p(x_0|x_{0,\cdots,n-1}) $,應該是筆誤)

圖-1: 神經語言模型

卷積語言模型

  • 第一個神經網路語言模型
  • 每個單詞以向量形式嵌入,是一個指向嵌入矩陣的查詢表,如此,無論單詞在什麼上下文中出現,它將得到相同的向量
  • 在每個時間步使用相同的前饋神經網路
  • 不幸的是,固定長度的歷史意味著它將只能以有界上下文為條件
  • 這些模型確有非常快的特點

圖-2: 卷積語言模型

迴圈神經網路模型

  • 這是直到前幾年最為流行的方法
  • 概念簡單明瞭:每個時間步都維護一些狀態(從上一個時間步接收到的),這些狀態表示到目前為止我們所讀到的內容。這將與當前正在讀的單詞結合起來,並在以後的狀態下使用。然後我們按照我們需要的時間步驟重複這個過程。
  • 使用無界的上下文:原理上,一本書的標題會影響書中最後一個字的隱藏狀態。
  • 弊端:
    • 整個文件讀取的歷史在每個時間步都被壓縮成一個固定大小的向量,這是該模型的瓶頸。
    • 梯度在長上下文中消失
    • 不可能在時間步上並行化,所以訓練很慢

<center>圖-3: 迴圈語言模型</center>

Transformer語言模型

  • 在自然語言處理中使用的最新模型
  • 革命性的點球Revolutionized penalty
  • 三大主要階段
    • 輸入階段
    • \(N\times\)不同引數的transformer塊(編碼層)
    • 輸出階段
  • 示例:在原論文中的6個變換器模組(編碼層)

圖-4 Transformer語言模型

子層由標記為“Add&Norm”的框連線,這裡“Add”意味著這是一個殘差連線,有助於阻止梯度消失,這裡“Norm”表示層的歸一化normalization。

圖-5 編碼層
應該注意的是,transformer在時間步中共享權重。

多頭注意力

圖-6 多頭注意力
對於我們試圖預測的單詞,我們計算稱為$\lfloor查詢\rceil$的值,對於前面所有用於預測的單詞,我們稱其為$\lfloor鍵\rceil$(k)。$\lfloor查詢\rceil$是關於上下文的資訊,例如前面的形容詞。$\lfloor鍵\rceil$是就像一個標籤,包含關於當前單詞的資訊,比如是否是一個形容詞。一旦計算出$\lfloor查詢\rceil$q,我們可以推匯出前面單詞的分佈($p_i$):

\[p_i = softmax(q,k_i) \]

然後,我們還為前面單詞計算被稱為值(v)的量。值表示單詞的內容。
一旦我們有了這些值,我們就可以通過最大化注意力分佈來計算隱藏狀態:

\[h_i = \sum_i{p_i v_i} \]

我們用多個不同的\(\lfloor查詢\rceil\)\(\lfloor值\rceil\)\(\lfloor鍵\rceil\)平行計算相同的東西。理由是我們想使用不同的東西預測下一個詞。例如,當我們預測單詞“unicorns”時,使用前面三個單詞“These”、“horned”、“silver-white”。我們通過“horned”和“silver-white”知道它是一個獨角獸。然而,我們通過“These”知道它是複數。因此,我們可能想要使用這三個詞來知道下一個單詞應該是什麼。多頭注意力是一種讓每一個單詞看到前面多個單詞的方法。

多頭注意力的一大優點就是它具有很強的並行性。與迴圈神經網路不同的是,它一次計算多頭注意力模組的所有頭和所有時間步。一次計算所有時間步的一個問題是,它還可以看到未來的單詞,而我們只希望它以其前面的單詞為條件。一個解決辦法就是所謂的自我注意遮掩。掩碼是一個下三角元素為0,上三角元素為負無窮的上三角矩陣。在注意模組的輸出中新增這個掩碼的效果是,左邊的每一個單詞都比右邊的單詞有更高的注意分數,所以在實踐中模型只關注前面的單詞。掩碼的應用在語言模型中非常關鍵,因為這使得它在數學上正確,然而,在文字編碼器中,雙向上下文可能會有幫助。

使得transformer語言模型工作的一個細節是向輸入中新增位置嵌入。在語言中,一些像順序這樣的屬性對解釋是非常重要的。這裡使用的技術是學習不同時間步長的獨立嵌入,並將這些新增到輸入中,所以現在的輸入是詞向量和位置向量的總和。這將順序資訊。

圖-7 Transformer結構

為什麼這個模型這麼好:

  1. 它給出了每個單詞對之間的直接聯絡。每個單詞可以直接訪問前面單詞的隱層狀態,減輕了梯度消失。它很容易學習非常昂貴的的函式。
  2. 所有時間步並行
  3. 自我注意力是二次的(所有時間步可以注意所有其他),(破除了?)極限最大序列長度。

一些技巧(特別是對於多頭注意力和位置編碼)和解碼語言模型

技巧1:大量使用層歸一化穩定訓練是很有幫助的

  • 對於transformer很重要

技巧2:熱啟動+反平方根訓練計劃

  • 使用學習率計劃:為了使transformer工作的更好,你必須使你的學習率從0到第1千步線性地衰減

技巧3:小心初始化

  • 對於像機器翻譯這樣的任務很有用

技巧4:平滑標籤

  • 對於機器翻譯這樣的任務很有幫助

以下是上述幾種方法的結果。在這些測試中,右邊的指標是困惑度(perplexity,ppl)(ppl越低越好)。

圖-8 模型效能比較
可以看到,引入transformer後,效能得到了很大的改善。

Transformer語言模型一些重要的事實

  • 最小的inductive bias
  • 所有單詞直接連線,這將減輕梯度消失
  • 所有時間步平行計算
  • 自我注意力是二次的(所有時間步可以注意所有其他),(破除了?)極限最大序列長度。
圖-9 Transformer vs.迴圈神經網路

Transformer很容易放大

  1. 無限的訓練資料,甚至遠遠超過你需要的
  2. 2019年,GPT-2使用了20億個引數
  3. 最近的模型在2020年使用了170億個引數

解碼語言模型

我們現在可以在文字上訓練概率分佈——現在我們可以得到指數級的多種可能輸出,所以我們不能計算最大的(輸出可能)。無論你對第一個單詞做出什麼選擇,都會影響到其他所有的決定。因此,在此基礎上,引入貪心解碼如下。

貪心解碼行不通

我們在每一個時間步都使用最有可能的單詞。但是,這並不能保證給出最有可能的序列,因為如果您必須在某個點上執行這一步,那麼您就無法回溯搜尋以撤消以前的任何會話。

窮舉搜尋也不可能

它需要計算所有可能的序列因為複雜度為\(O(V^T)\),這太昂貴了。

理解問題和答案

  1. 與單頭注意力相比,多都注意力模型的好處是什麼?
    • 要預測下一個單詞,你需要觀察多個獨立的內容,換句話說,在試圖理解預測下一個單詞所需的上下文時,可以將注意力放在之前的多個單詞,。
  2. Transformer如何解決CNN和RNN的資訊瓶頸?
    • 注意力模型允許所有單詞之間的直接連線,允許每個單詞以之前的所有單詞為條件,有效地消除了這個瓶頸。
  3. Transformer與RNN在利用GPU並行化方面有何不同?
    • Transformer中多頭注意力模組是高度可並行的,然而RNN不是的,因此不能夠充分利用GPU技術。事實上Transformer在一次前饋過程中計算所有時間步。