【翻譯】面向自然語言處理的深度學習(一)
講解: 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_n|x_{0,\cdots,n-1})= softmax(Ef(x_{0,\cdots,n-1})) \](注:原文為$p(x_0|x_{0,\cdots,n-1}) $,應該是筆誤)
卷積語言模型
- 第一個神經網路語言模型
- 每個單詞以向量形式嵌入,是一個指向嵌入矩陣的查詢表,如此,無論單詞在什麼上下文中出現,它將得到相同的向量
- 在每個時間步使用相同的前饋神經網路
- 不幸的是,固定長度的歷史意味著它將只能以有界上下文為條件
- 這些模型確有非常快的特點
迴圈神經網路模型
- 這是直到前幾年最為流行的方法
- 概念簡單明瞭:每個時間步都維護一些狀態(從上一個時間步接收到的),這些狀態表示到目前為止我們所讀到的內容。這將與當前正在讀的單詞結合起來,並在以後的狀態下使用。然後我們按照我們需要的時間步驟重複這個過程。
- 使用無界的上下文:原理上,一本書的標題會影響書中最後一個字的隱藏狀態。
- 弊端:
- 整個文件讀取的歷史在每個時間步都被壓縮成一個固定大小的向量,這是該模型的瓶頸。
- 梯度在長上下文中消失
- 不可能在時間步上並行化,所以訓練很慢
<center>圖-3: 迴圈語言模型</center>
Transformer語言模型
- 在自然語言處理中使用的最新模型
- 革命性的點球Revolutionized penalty
- 三大主要階段
- 輸入階段
- \(N\times\)不同引數的transformer塊(編碼層)
- 輸出階段
- 示例:在原論文中的6個變換器模組(編碼層)
子層由標記為“Add&Norm”的框連線,這裡“Add”意味著這是一個殘差連線,有助於阻止梯度消失,這裡“Norm”表示層的歸一化normalization。
多頭注意力
然後,我們還為前面單詞計算被稱為值(v)的量。值表示單詞的內容。
一旦我們有了這些值,我們就可以通過最大化注意力分佈來計算隱藏狀態:
我們用多個不同的\(\lfloor查詢\rceil\)、\(\lfloor值\rceil\)和\(\lfloor鍵\rceil\)平行計算相同的東西。理由是我們想使用不同的東西預測下一個詞。例如,當我們預測單詞“unicorns”時,使用前面三個單詞“These”、“horned”、“silver-white”。我們通過“horned”和“silver-white”知道它是一個獨角獸。然而,我們通過“These”知道它是複數。因此,我們可能想要使用這三個詞來知道下一個單詞應該是什麼。多頭注意力是一種讓每一個單詞看到前面多個單詞的方法。
多頭注意力的一大優點就是它具有很強的並行性。與迴圈神經網路不同的是,它一次計算多頭注意力模組的所有頭和所有時間步。一次計算所有時間步的一個問題是,它還可以看到未來的單詞,而我們只希望它以其前面的單詞為條件。一個解決辦法就是所謂的自我注意遮掩。掩碼是一個下三角元素為0,上三角元素為負無窮的上三角矩陣。在注意模組的輸出中新增這個掩碼的效果是,左邊的每一個單詞都比右邊的單詞有更高的注意分數,所以在實踐中模型只關注前面的單詞。掩碼的應用在語言模型中非常關鍵,因為這使得它在數學上正確,然而,在文字編碼器中,雙向上下文可能會有幫助。
使得transformer語言模型工作的一個細節是向輸入中新增位置嵌入。在語言中,一些像順序這樣的屬性對解釋是非常重要的。這裡使用的技術是學習不同時間步長的獨立嵌入,並將這些新增到輸入中,所以現在的輸入是詞向量和位置向量的總和。這將順序資訊。
為什麼這個模型這麼好:
- 它給出了每個單詞對之間的直接聯絡。每個單詞可以直接訪問前面單詞的隱層狀態,減輕了梯度消失。它很容易學習非常昂貴的的函式。
- 所有時間步並行
- 自我注意力是二次的(所有時間步可以注意所有其他),(破除了?)極限最大序列長度。
一些技巧(特別是對於多頭注意力和位置編碼)和解碼語言模型
技巧1:大量使用層歸一化穩定訓練是很有幫助的
- 對於transformer很重要
技巧2:熱啟動+反平方根訓練計劃
- 使用學習率計劃:為了使transformer工作的更好,你必須使你的學習率從0到第1千步線性地衰減
技巧3:小心初始化
- 對於像機器翻譯這樣的任務很有用
技巧4:平滑標籤
- 對於機器翻譯這樣的任務很有幫助
以下是上述幾種方法的結果。在這些測試中,右邊的指標是困惑度(perplexity,ppl)(ppl越低越好)。
Transformer語言模型一些重要的事實
- 最小的inductive bias
- 所有單詞直接連線,這將減輕梯度消失
- 所有時間步平行計算
- 自我注意力是二次的(所有時間步可以注意所有其他),(破除了?)極限最大序列長度。
Transformer很容易放大
- 無限的訓練資料,甚至遠遠超過你需要的
- 2019年,GPT-2使用了20億個引數
- 最近的模型在2020年使用了170億個引數
解碼語言模型
我們現在可以在文字上訓練概率分佈——現在我們可以得到指數級的多種可能輸出,所以我們不能計算最大的(輸出可能)。無論你對第一個單詞做出什麼選擇,都會影響到其他所有的決定。因此,在此基礎上,引入貪心解碼如下。
貪心解碼行不通
我們在每一個時間步都使用最有可能的單詞。但是,這並不能保證給出最有可能的序列,因為如果您必須在某個點上執行這一步,那麼您就無法回溯搜尋以撤消以前的任何會話。
窮舉搜尋也不可能
它需要計算所有可能的序列因為複雜度為\(O(V^T)\),這太昂貴了。
理解問題和答案
- 與單頭注意力相比,多都注意力模型的好處是什麼?
- 要預測下一個單詞,你需要觀察多個獨立的內容,換句話說,在試圖理解預測下一個單詞所需的上下文時,可以將注意力放在之前的多個單詞,。
- Transformer如何解決CNN和RNN的資訊瓶頸?
- 注意力模型允許所有單詞之間的直接連線,允許每個單詞以之前的所有單詞為條件,有效地消除了這個瓶頸。
- Transformer與RNN在利用GPU並行化方面有何不同?
- Transformer中多頭注意力模組是高度可並行的,然而RNN不是的,因此不能夠充分利用GPU技術。事實上Transformer在一次前饋過程中計算所有時間步。