Transformer:隱藏的機器翻譯高手,效果趕超經典 LSTM!

2020-12-04 雷鋒網

雷鋒網 AI 科技評論按:在自然語言處理任務中,循環神經網絡是一種常見的方法,但近來,一種只依賴於注意力機制的特定神經網絡模型已被證明它對於常見的自然語言處理任務的效果甚至優於循環神經網絡模型,這個模型被稱為變換器(Transformer)。同時,數據科學家 Maxime Allard 發表了相應的文章對變換器的原理機製作了介紹與講解,並用相應的實驗幫助大家更好的理解這種神經網絡模型,雷鋒網 AI 科技評論將其編譯如下。

第 1 部分:序列到序列學習和注意力機制

論文《Attention Is All You Need》(https://arxiv.org/abs/1706.03762)描述了變換器以及序列到序列學習的架構。序列到序列(Seq2Seq)是一種神經網絡,它將給定的元素序列(例如句子中的單詞序列)轉換為另一個序列。

Seq2Seq 模型很適用於翻譯,它可以將一種語言的單詞序列轉換為另一種語言中的單詞序列。通常 Seq2Seq 模型是基於長短期記憶(LSTM)而建立,LSTM 模塊通過序列的相關數據,可以賦予序列意義,同時記住(或忘記)它判定為重要(或不重要)的部分。正因為句子依賴於序列,單詞的順序對於理解句子至關重要,所以 LSTM 是處理此類數據的不二選擇。

Seq2Seq 模型由編碼器和解碼器組成。編碼器獲取輸入序列並將其映射到更高維空間(n 維向量)。該抽象矢量被送入解碼器,再由解碼器將其轉換為輸出序列。輸出序列可以是另一種語言、符號、輸入的副本等。

我們可以將編碼器和解碼器理解為只會兩種語言的人工翻譯者。他們的第一語言是母語,但兩者的母語是不同的,比如一個是德語,另一個是法語;而他們的第二語言則是他們共有的一種虛構語言。為了將德語翻譯成法語,編碼器將德語句子轉換為它所掌握的另一種語言,我們在這裡稱為「虛構語言」。同時,由於解碼器能夠讀取該虛構語言,因此它現在可以把這個語言翻譯成法語。於是,這個模型(由編碼器和解碼器組成)就可以合力將德語翻譯成法語。

假設一開始,編碼器或解碼器對於虛構語言都不是非常流利,為了很好的掌握它,我們將使用很多例子對它們(模型)進行訓練。對於 Seq2Seq 模型的編碼器和解碼器,一般情況下,其基礎配置各帶一個 LSTM 模塊。那麼變換器在什麼時候發揮作用呢?

我們需要一個技術細節來讓變換器更容易理解,即注意力機制。注意力機制通過查看輸入序列,然後在每個步驟確定序列中某一部分是否重要。這看似抽象,但舉個例子就很好理解了:在閱讀本文時,你會總是把注意力集中在你閱讀的單詞上,但同時你的腦海仍然保留了一些重要關鍵詞,以便聯繫上下文。

所以,注意機制對於給定序列的工作方式與我們的閱讀方式類似。對於上文提到的擬人編碼器和解碼器的,我們可以想像為,編碼器不僅用虛構語言寫下句子的翻譯,而且還寫了對句子語義理解很重要的關鍵詞,並將這些關鍵詞以及常規翻譯都提供給解碼器。通過這些關鍵詞,以及一些關鍵術語所給到的句子上下文,解碼器就可以識別出句子的重要部分,因此這些新的關鍵字就能夠幫助解碼器更容易的進行翻譯。

換而言之,對於 LSTM(編碼器)讀取的每個輸入,注意力機制會同時考慮其他幾個輸入,並通過對這些輸入賦予不同的權重來決定哪些輸入是重要的。然後,解碼器將編碼的句子和注意力機制提供的權重作為輸入。

要了解更多有關的注意力,可以參考這篇文章(https://skymind.ai/wiki/attention-mechanism-memory-network)。如果想了解更科學的方法,並且閱讀關於基於不同注意力機制的序列到序列模型方法,可以參考這篇《基於注意力的神經機器翻譯的有效方法》的論文(https://nlp.stanford.edu/pubs/emnlp15_attn.pdf )。

第 2 部分:變換器

《Attention Is All You Need》一文中引入了一種名為變換器的新型架構,正如標題所示,其中使用到了上文提到的注意力機制。

與 LSTM 一樣,變換器是一種在兩個部分(編碼器和解碼器)的幫助下將一個序列轉換為另一個序列的架構,但它與先前描述的「現有序列到序列模型」不同,因為它不包含任何循環神經網絡(Recurrent Networks),如 GRU,LSTM 等。

到目前為止,循環神經網絡是捕獲序列及時依賴性的最佳方法之一。然而,提交這篇論文的團隊證明,一個只有注意力機制而沒有任何循環神經網絡的架構能夠對翻譯任務和其他任務的結果進行優化。其中,在自然語言任務方面的一個改進是由引入 Bert 的團隊提出的:《BERT:用於語言理解的深度雙向變換器的預訓練》(https://arxiv.org/abs/1810.04805)。

那麼,變換器究竟是什麼?我們將從下面這張圖片開始講解。

圖 1:變換器模型架構,來自 Vaswani 等人的《Attention Is All You Need》

編碼器位於左側,解碼器位於右側,編碼器和解碼器都由可以多次堆疊在一起的模塊組成,這展示在圖中的 Nx 部分。

我們看到模塊主要由多頭注意力機制(Multi-Head Attention)和前饋層組成。因為不能直接使用字符串,所以我們首先將輸入和輸出(目標句子)嵌入到 n 維空間中。模型中有一個很小但非常重要的部分,即對不同單詞的位置編碼。這是由於我們沒有可以存儲序列如何被輸入模型的循環網絡,而序列由其元素順序決定,所以我們需要以某種方式給出序列中每個單詞/部分的相對位置。這些位置被添加到每個單詞的嵌入表示(n 維向量)中。

讓我們仔細看看模型中的這些多頭注意力機制模塊:

圖 2:左圖為點積注意力機制,右圖為包含多個注意力層的並行多頭注意力機制,來自 Vaswani 等人的《Attention Is All You Need》

我們從注意力機制的左側描述開始,它不是很複雜,可以用下面的等式來描述:

其中,Q 是一個包含查詢(query,即序列中一個單詞的向量表示)的矩陣;K 是所有鍵(key,序列中所有單詞的向量表示);V 是值(value,包含所有序列中單詞的向量表示)。在編碼器和解碼器的多頭注意力機制模塊中,V 與 Q 具有相同的單詞序列。但對於反饋給編碼器和解碼器序列的注意力機制模塊,V 與 Q 具有不同的單詞序列。

為了簡化這個公式,我們可以將其表述為 V 與注意力權重 a 的乘積,其中的權重 a 由下式定義:

這意味著權重 a 由序列中的每個單詞(由 Q 表示)如何受序列中所有其他單詞(由 K 表示)的影響來定義。另外,SoftMax 函數能使權重 a 分布在 0 和 1 之間;然後我們再將這些權重應用於 V 中引入的所有單詞序列(在編碼器和解碼器中,V 與 Q 相同;但在編碼器和解碼器的輸入模塊之間,V 與 Q 則不同)。

右圖描述了如何將這種注意力機制轉化為多個可以並行使用的機制。通過 Q、K 和 V 的線性投影多次重複注意力機制,這使得系統可以從 Q、K 和 V 的不同表示中學習,這對模型是有益的。這些線性表示則通過將 Q、K 和 V 乘以在訓練期間所學的加權矩陣 W 來實現。

矩陣 Q、K 和 V 對於注意力機制模塊結構中的每個位置是不同的,這取決於它們是在編碼器、解碼器中,還是在編碼器和解碼器之間。這是因為注意力機制要參與整個編碼器輸入序列或解碼器輸入序列的一部分,連接編碼器和解碼器的多頭注意力模塊將確保編碼器輸入序列與解碼器輸入序列的給定位置都被同時考慮在其中。

在編碼器和解碼器中的多頭注意力機制後,我們連接了一個點態前饋層。這個小的前饋網絡對於序列的每個位置都具有相同的參數,即對來自給定序列的每個元素進行了單獨的、相同的線性變換。

訓練

如何訓練這樣的「野獸」模型呢?Seq2Seq 模型的訓練和推斷與平時的分類問題略有不同,轉換器也是如此。

我們知道,為了訓練翻譯任務的模型,我們需要兩種不同語言的句子進行雙向翻譯。一旦我們有大量的句子對,就可以對模型進行訓練。假設我們想將法語翻譯成德語,我們的編碼輸入是法語句子,而解碼器的輸入將是德語句子。但是,在這裡解碼器輸入將向右移動一個位置。

其中一個原因是我們不希望這個模型在訓練期間去單純的學習對解碼器輸入的複製,而是希望模型在給定編碼器序列和特定的解碼器序列的情況下,對下一個字或者字符進行預測。

如果我們不移位解碼器序列,則模型將會學習簡單地「複製」解碼器輸入,因為位置 i 的目標字(字符)將是解碼器輸入中對應位置 i 的字(字符)。因此,通過將解碼器輸入移位一個位置,我們的模型則需要通過解碼器序列中已知位置 1,...,i-1 的字(字符)來預測位置 i 的目標字(字符)。這可以防止我們的模型學習複製、粘貼的任務。我們將句子開始的標記填充進解碼器輸入的第一個位置,否則由於右移該位置將是空的。類似地,我們將一個句子結尾標記附加到解碼器輸入序列來標記該序列的結束,並且這個標記也將附加到目標輸出句子中。在後文中,我們將看到這種方法對於推斷結果有何用處。

對於 Seq2Seq 模型和變換器,我們都做相同的處理。除了右移之外,變換器還將在第一個多頭注意力模塊的輸入端加入一個掩碼,以避免洩露潛在的「未來」序列元素。這是變換器架構中特有的,因為這裡面沒有循環神經網絡可以用來事模型按照順序輸入序列。如果沒有掩碼,當我們將所有內容一起輸入時,多頭注意力機制需要檢測整個解碼器中每一個輸入序列的位置。

將正確的移位輸入饋送到解碼器的過程也稱為教師強制(Teacher-Forcing),詳情可參考該博客內容(https://machinelearningmastery.com/teacher-forcing-for-recurrent-neural-networks/)。

我們想要進行損失計算的目標序列是有一個帶有序列結束標記的解碼器輸入(德語句子),而非移位後的句子。

推理

這些模型的推理和訓練不同,並且非常具有意義,因為我們希望模型在最終實現沒有對應德語句子的情況下翻譯法語句子。這裡的訣竅是為輸出序列的每個位置重新輸入我們的模型,直到檢測到句末的標記為止。

具體步驟是:

輸入完整的編碼器序列(法語句子),並作為解碼器輸入;然後我們在第一個位置上加入一個空序列,這個空序列只有一個句子開頭標記。這將輸出一個序列,其中我們只需要第一個元素。該元素將被填充到我們的解碼器輸入序列的第二個位置,該序列現在具有句子的開頭標記和其中的第一個字(字符)。將編碼器序列和新的解碼器序列輸入到模型中,取輸出的第二個元素並將其放入解碼器輸入序列。重複此操作,直到預測到句末的標記,這標誌著翻譯結束。我們看到,這個方法需要通過多次運行模型來翻譯該句子。

第 3 部分:用於時間序列預測的變換器

我們已經看到了變換器的架構,並且從論文《Attention Is All You Need》

及它的作者那裡知道該模型在語言任務中表現非常出色,現在我們在一個實例中來測試變換器的效果。

這裡我們不用翻譯任務,而是使用德克薩斯州電力可靠性委員會(ERCOT)提供的德克薩斯州每小時電力流量的時間序列預測。每小時的數據可以在此獲得(http://www.ercot.com/gridinfo/load/load_hist/)。如果你想深入了解架構,harvardnlp(http://nlp.seas.harvard.edu/2018/04/03/attention.html )提供了對變換器及其實現的詳細解釋。

既然我們可以使用基於 LSTM 的序列到序列模型來進行多步預測,那麼讓我們來看看變換器做預測的能力。這裡因為我們使用的不是單詞序列而是數值,所以我們首先需要對架構進行一些更改;此外我們進行的是自動回歸實驗,而不是單詞/字符的分類。

數據

現有數據為我們提供了整個 ERCOT 控制區域的每小時負載。我使用了 2003 年至 2015 年的數據作為訓練集,2016 年作為測試集。因為只有負載值和負載的時間戳,所以我將時間戳擴展出了其它特性。從時間戳中,我提取了它對應的工作日並對其進行了一次熱編碼;另外,我使用年份(2003 年,2004 年,...,2015 年)和相應的小時(1,2,3,...,24)作為值本身(value),這為每天的每小時提供了 11 項特性值。出於收斂目的,我還將 ERCOT 負載除以 1000 進行了標準化操作。

為了預測給定的序列,我們需要一個過去的序列。在我們的示例中,我使用了前 24 小時的每小時數據來預測接下來的 12 小時的數據,其中我們可以根據需要調整數據屬性。例如,我們可以將其更改為每日數據而不是每小時數據。

從論文中更改模型

第一步,我們需要刪除嵌入。因為我們的輸入中已經有 11 個數值,而嵌入通常將給定的整數映射到 n 維空間;所以這裡不使用嵌入,而是簡單地使用線性變換將 11 維數據轉換為 n 維空間,這類似於嵌入單詞。

然後,我們需要從變換器輸出中刪除 SoftMax 層,因為我們的輸出節點不是概率而是實際值;接著,就可以開始進行訓練了。

我使用了教師強制來進行訓練,這意味著編碼器由 24 個數據點的集合組成作為輸入,解碼器輸入是 12 個數據點的集合。其中第一個是「序列開始」值,後面的數據點是目標序列。在開始時引入「序列開始」值後,我將解碼器輸入相對於目標序列移動了一個位置。

我使用了一個只有「-1」的 11 維向量作為「序列開始」值。當然這可以改變,根據用例實際情況使用其它值是有益的;但是對於這個例子,這樣的設置非常有用,因為這可以使我們在輸入或輸出序列的任何一個維度中都沒有負值。

此示例的損失函數是均方誤差(the mean squared error)。

結果

下面的兩個圖顯示了結果。我取每天每小時值的平均值並將其與正確值進行比較。第一個圖顯示了前 24 小時的 12 小時預測;對於第二個圖,我們預測了一小時前的 24 小時數據。我們看到該模型能夠很好地捕捉到一些波動,訓練集的根均方誤差(the root mean squared error)為 859;對於驗證集,12 小時預測根均方誤差為 4,106,1 小時預測根均方誤差為 2,583。模型預測的平均絕對百分比誤差對應於第一個圖表為 8.4%,第二個圖表為 5.1%。

圖 3:一年前 24 小時的 12 小時預測

圖 4:一年前 24 小時的 1 小時預測

總結

結果表明,我們可以使用變換器進行時間序列預測。但在評估期間,結果顯示如果我們想要預測的步驟越多,錯誤就越高。上面的第一張圖(圖 3)是通過使用 24 小時預測接下來的 12 小時來實現的。如果我們只預測一個小時,結果會好得多,正如我們在第二個圖上看到的那樣(圖 4)。

對於變換器的參數,如解碼器和編碼器層的數量等,還有很大的優化空間。上述實驗不是一個完美的模型,它通過更好的調整和訓練,可將結果起到一定的改善作用。

使用 GPU 來加速訓練可能也會有很大幫助,本次實驗我並沒有在我的本地機器上運行,而是在 Watson Studio Local Platform 上用 GPU 來訓練了這個模型。你也可以使用 Watson 的機器學習 GPU 來加速訓練。

原文連結:https://medium.com/inside-machine-learning/what-is-a-transformer-d07dd1fbec04

雷鋒網 AI 科技評論

相關焦點

  • 神經結構搜索在機器翻譯中的應用
    東北大學自然語言處理實驗室由姚天順教授創建於 1980 年,現由朱靖波教授、肖桐博士領導,長期從事計算語言學的相關研究工作,主要包括機器翻譯、語言分析、文本挖掘等。團隊研發的支持140種語言互譯的小牛翻譯系統已經得到廣泛應用。
  • 深2.5至4倍,參數和計算量卻更少,DeLighT Transformer是怎麼做到的?
    然而算法優化一直在路上……Google 團隊提出的 NLP 經典之作 Transformer 由 Ashish Vaswani 等人在 2017 年發表的論文《Attention Is All You Need》 中提出。但由於模型參數量過大,該模型訓練困難、部署不方便,研究人員一直在探究如何優化 Transformer。
  • ...規模集成Transformer模型,阿里達摩院如何打造WMT 2018機器翻譯...
    在剛剛結束的 WMT2018 國際機器翻譯大賽上,阿里巴巴達摩院機器智能實驗室機器翻譯團隊打敗多個國外巨頭與研究機構,並在英文-中文翻譯、英文-俄羅斯語互譯、英文-土耳其語互譯這 5 個項目的自動評測指標 BLEU 分值都位居第一。
  • Transformer生成論文摘要方法已出
    選自arXiv作者:Sandeep Subramanian等機器之心編譯參與:Panda寫論文是一件「痛並快樂著」的事情。快樂的是可以將自己的研究公之於眾,痛苦的是有大段大段的文本內容需要完成。現在,這篇介紹論文摘要抽取生成的論文,也許會給這個 NLP 中的經典任務帶來新的解決思路。
  • PyTorch:Bi-LSTM的文本生成
    _(hs_backward)torch.nn.init.kaiming_normal_(cs_backward)torch.nn.init.kaiming_normal_(hs_lstm)torch.nn.init.kaiming_normal_(cs_lstm)一旦定義了包含隱藏狀態和單元狀態的張量,是時候展示整個體系結構的組裝是如何完成的.
  • Transformer新型神經網絡在機器翻譯中的應用|公開課筆記
    大家可以看到我PPT下面的幾個 LOGO,我們翻譯團隊是屬於阿里巴巴機器智能技術實驗室,中間是阿里翻譯的 Logo和我們的口號「Translate and Beyond」。這次分享的題目是「Transformer新型神經網絡在機器翻譯中的應用」。
  • 搜狗機器翻譯團隊獲得 WMT 2017 中英機器翻譯冠軍
    神經機器翻譯在大規模翻譯任務上第一次獲得超越統計機器翻譯(SMT)的效果不過是 2014 年的事情(著名的 RNN encoder-decoder 結構就發表在 2014 年的 EMNLP 上),如今三年過去了,機器翻譯頂級論文中已經幾乎難以見到統計機器翻譯的身影,神經機器翻譯已經成為了機器翻譯領域的主流。
  • 未來的世界:機器翻譯VS人工翻譯
    這個語料加工的技術層面工作,可以讓專業人員(懂英漢兩種語言的法律專業人員)和語言服務專家完成,包括對機器翻譯的譯文進行與原文的比較和校對,然後修改後輸回機器,再讓其進行再學習翻譯,再修改和完善語料庫文本。這樣,隨著機器翻譯實踐的不斷增加,這款專業翻譯機器的準確率達到90%甚至以上不是不可以做到的。翻譯內容越專業,場景或任務越固定,標準越統一,翻譯準確率就越高,替代人工翻譯不是不可能。
  • 百度機器翻譯團隊獲得WMT2019中英翻譯冠軍
    8月1日,WMT2019國際機器翻譯大賽研討會在義大利佛羅倫斯召開。本屆大賽,百度機器翻譯團隊在中文-英文翻譯任務上獲得冠軍。,其中中文-英文翻譯任務是歷年參賽隊伍最多、競爭最為激烈的機器翻譯任務之一。
  • 解析Transformer模型
    前言Google於2017年提出了《Attention is all you need》,拋棄了傳統的RNN結構,「設計了一種Attention機制,通過堆疊Encoder-Decoder結構」,得到了一個Transformer模型,在機器翻譯任務中「取得了BLEU值的新高」。
  • B站「不靠譜」翻譯大賽:機器翻譯,還遠不能取代人工翻譯
    在國內知名的彈幕視頻網站bilibili上,很多up主上傳了令人啼笑皆非的機器翻譯視頻。 網友們把一些影視劇、動漫或者其他著名場面中的臺詞用谷歌翻譯重新加工。如果只是翻譯一遍的話,可能效果還不理想——它們錯得還不夠精彩。於是,網友們把谷歌翻譯的結果再翻譯成第三種語言,然後再翻譯成第四種語言,最後再用谷歌翻譯回中文。
  • 百度機器翻譯五大領域實現新突破 獲WMT2019中英翻譯冠軍
    8月1日,WMT2019國際機器翻譯大賽研討會在義大利佛羅倫斯召開。本屆大賽,百度機器翻譯團隊在中文-英文翻譯任務上獲得冠軍。、競爭最為激烈的機器翻譯任務之一。
  • 谷歌機器翻譯取得顛覆性突破 到底幾分真假?
    optimization 三大技術均不是這篇原創,而是之前的經典工作。換句話說,神經機器翻譯早已取得比統計機器翻譯好的效果,只是大家不知道,誤以為是谷歌拯救了科研界,創造了奇蹟。其實是世界上所有機器翻譯學者近兩年一起的貢獻(例如:清華也貢獻了Sentence loss optimization for machine translation的技術)。那麼谷歌這篇論文最大的價值是什麼呢?
  • 在 TensorFlow 上使用 LSTM 進行情感分析
    深度學習在自然語言處理中的應用自然語言處理是教會機器如何去處理或者讀懂人類語言的系統,目前比較熱門的方向,包括如下幾類:在未進入深度學習時代,NLP也是一個蓬勃發展的領域。然而,在所有的上述任務中,我們都需要根據語言學的知識去做大量的,複雜的特徵工程。如果你去學習這個領域,那麼整個四年你都會在從事這方面的研究,比如音素,語素等等。
  • Transformer在CV領域有可能替代CNN嗎?
    其次,一些特徵提取的方法也需要人為的參與,手工設計出一些特徵提取算子,比如一些經典的邊緣檢測算子,水平檢測,垂直檢測等。 好在transformer的遷移效果更好,大的數據集上的pretrain模型可以很好地遷移到小數據集上。還有一個就是ViT所說的,transformer的scaling能力很強,那麼進一步提升參數量或許會帶來更好的效果(就像驚豔的GPT模型)。
  • 百分點認知智能實驗室出品:機器翻譯是如何煉成的(下)
    (上)」的文章中,我們回顧了機器翻譯的發展史。在本篇文章中,我們將分享機器翻譯系統的理論算法和技術實踐,講解神經機器翻譯具體是如何煉成的。讀完本文,您將了解:  · 神經機器翻譯模型如何進化並發展成令NLP研究者萬眾矚目的Transformer模型;  · 基於Transformer模型,我們如何打造工業級的神經機器翻譯系統。
  • 用純NumPy碼一個RNN、LSTM:這是最好的入門方式了
    機器之心報導參與:思源隨著 TensorFlow 和 PyTorch 等框架的流行,很多時候搭建神經網絡也就調用幾行 API 的事。大多數開發者對底層運行機制,尤其是如何使用純 NumPy 實現神經網絡變得比較陌生。
  • 人工智慧翻譯大比拼 有道翻譯拔得頭籌
    在其中的人工智慧翻譯大賽中,谷歌翻譯、有道翻譯官、搜狗翻譯三款翻譯軟體同臺競技,實測翻譯效果。最終,有道翻譯官憑藉著突出的對話翻譯和拍照翻譯功能,以及幾乎無短板的優勢,在比賽中拔得頭籌。  挑戰經典,看人工智慧翻譯如何「真情告白」第一局裡先「上場」的是谷歌翻譯,隨機翻譯一段對話。但可能是第一上場的緣故,谷歌翻譯表現並不理想。
  • 如何使用LSTM在Keras中快速實現情感分析任務
    我們可以看到,經典 RNN 和 LSTM 的結構存在很大的差異。在 LSTM 中,我們的模型學會了在長期記憶中保存哪些信息,丟掉哪些信息。2. lstm_out:LSTM 網絡將向量序列轉換成一個 lstm_out 向量,它包含整個序列的信息。其他超參數和卷積神經網絡類似,例如 dropout、batch_size。我使用 softmax 作為激活函數。