Seq2Seq那些事:詳解深度學習中的“注意力機制”

人工智慧頻道發表於2019-01-22

作者——Raimi Karim

幾十年來,統計機器翻譯一直是主導的翻譯模型[9],直到神經機器翻譯(NMT)的誕生。NMT是一種新興的機器翻譯方法,它試圖構建和訓練單個的大型神經網路來讀取文字並輸出翻譯[1]。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

NMT是來自Kalchbrenner、Blunsom( ),Sutskever、Cho等人的提議。本文將基於seq2seq框架以及如何在此基礎上構建注意力。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖0.1:輸入序列長度為4的seq2seq

在seq2seq中,我們的想法是讓兩個具有編碼器——解碼器架構的遞迴神經網路(RNN):逐個讀取輸入字以獲得固定維度(編碼器)的向量表示,並且以這些輸入為條件,使用另一個RNN(解碼器)一個接一個地提取輸出字。解釋改編自[5]。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖0.2:輸入序列長度為64的seq2seq

seq2seq的問題在於,解碼器從編碼器接收的唯一資訊是最後一個編碼器的隱藏狀態(參見圖0.2中的2個微小節點),這是一種向量表示,類似於輸入序列的數字彙總。因此,對於長文字,我們不合理地期望著解碼器僅使用這一個向量表示來輸出翻譯。讓我們來看看,你能否將此段翻譯成你知道的另一種語言?

如果我們做不到,那麼我們就不應該對解碼器這麼苛刻。讓我們從每一個編碼器的時間步長中給編碼器一個向量表示,以便它可以做出優秀的翻譯,而不僅僅是一個向量表示。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖0.3:作為編碼器和解碼器之間的介面引起注意力。這裡,第一個解碼器時間步驟是準備在給出第一個翻譯單詞之前從編碼器接收資訊。

注意力是編碼器和解碼器之間的介面,它為解碼器提供來自每個編碼器隱藏狀態的資訊(除了圖0.3中的紅色隱藏狀態)。透過此設定,模型能夠選擇性地輸入序列的有用部分,從而瞭解它們之間的對齊排列。這有助於模型有效地處理較長的句子。)[9]。

定義:對齊

對齊意味著將原始文字的片段與其對應的翻譯片段進行匹配。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖0.3:法語單詞"la"的對齊分佈在輸入序列中,但主要分佈在這四個詞

上:'the','European','Economic'和'Area'。深紫色表示更好的注意力得分

如[2]中所介紹的,有兩種型別的注意力。使用所有編碼器隱藏狀態的注意力型別也稱為全域性注意力。相反,區域性注意力僅使用編碼器隱藏狀態的子集。由於本文的範圍是全域性注意力,因此本文中對"注意力"的任何引用均被視為"全域性注意力"。

本文概述了注意力是如何工作的,以便我們可以在沒有(或在閱讀了論文或教程之後)數學符號的情況下理解它們。

內容

  1. 注意力:概述
  2. 注意力:例子
  3. 總結

附錄:得分函式

1.   注意力:概述

在瞭解如何使用注意力之前,請允許我與你分享使用seq2seq模型的翻譯任務背後的直覺。

直覺:seq2seq

從頭到尾讀取德語文字。完成後,開始逐字翻譯成英文。如果句子非常長,他可能已經"忘記"了他在文字的前面部分讀過的內容。

這是一個簡單的seq2seq模型。我將要經歷的注意力層的分佈計算是seq2seq +注意力模型。這是對這個模型的快速直覺。

直覺:seq2seq +注意力

譯者在閱讀德語文字的同時,寫下關鍵詞,之後他開始翻譯成英語。在翻譯每個德語單詞時,他會使用他寫下的關鍵詞。、

透過給每個單詞分配一個分數,注意力將不同的焦點放在不同的單詞上。然後,利用softmax,再使用編碼器隱藏狀態的加權和來聚合編碼器隱藏狀態,以獲得上下文向量。注意力層的實現可以分為4個步驟。

步驟0:準備隱藏狀態。

讓我們首先準備第一個解碼器隱藏狀態(紅色)和所有可用的編碼器隱藏狀態(綠色)。在我們的例子中,我們有4個編碼器隱藏狀態和當前解碼器隱藏狀態。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖1.0:準備好注意力

步驟1:獲取每個編碼器隱藏狀態的分數。

透過得分函式(也稱為比對評分函式[2]或比對模型[1])獲得得分(標量)。在該示例中,得分函式是解碼器和編碼器隱藏狀態之間的點積。

有關各種評分功能,請參閱附錄A。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖1.1:獲得分數

Seq2Seq那些事:詳解深度學習中的“注意力機制”

在上面的例子中,我們獲得了編碼器隱藏狀態[5,0,1]的高注意力分數60分。這意味著要翻譯的下一個詞將受到此編碼器隱藏狀態的嚴重影響。

步驟2:透過softmax層執行所有得分。

我們將得分放到softmax層,使得softmaxed得分(標量)加起來為1。這些softmaxed得分代表注意力的分佈[3,10]。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖1.2:獲得softmaxed分數

Seq2Seq那些事:詳解深度學習中的“注意力機制”

請注意力,基於softmaxed得分,注意力僅按預期分佈在[5,0,1]上。實際上,這些數字不是二進位制數,而是0到1之間的浮點數。

步驟3:將每個編碼器隱藏狀態乘以它的softmaxed得分。

透過將每個編碼器隱藏狀態與其softmaxed得分(標量)相乘,我們獲得對齊向量[2]。這正是進行對齊的機制。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖1.3:獲取對齊向量

Seq2Seq那些事:詳解深度學習中的“注意力機制”

在這裡,我們看到除了[5,0,1]之外的所有編碼器隱藏狀態的對齊由於低注意力分數而減少到0。這意味著我們可以期望第一個被翻譯的單詞應該與輸入單詞匹配[5,0,1]嵌入。

步驟4:總結對齊向量。

將對齊向量相加以得到上下文向量[1,2]。上下文向量是來自前一步驟的對齊向量的聚合資訊。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

Seq2Seq那些事:詳解深度學習中的“注意力機制”

步驟5:將上下文向量輸入到解碼器中。

這樣做的方式取決於架構設計。稍後我們將在第2a、2b和2c節的示例中看到架構如何利用解碼器的上下文向量。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖1.5:將上下文向量輸入解碼器

這是整個動畫過程:

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖1.6:注意力

直覺:注意力實際上是如何工作的?

答:反向傳播。反向傳播將盡一切努力確保輸出接近實際情況。這是透過改變RNN中的權重和得分函式(如果有的話)來完成的。這些權重將影響編碼器隱藏狀態和解碼器隱藏狀態,進而影響注意力得分。

2.注意力:例子

我們在上一節中已經看到了seq2seq和seq2seq +注意力架構。在接下來的小節中,讓我們檢查另外3個基於seq2seq的NMT架構,以實現注意力。為了完整起見,我還附加了他們的雙語評估研究(BLEU)分數:用於評估生成的句子到參考句子的標準度量。

2a.Bahdanau等(2015)[1]

作者在論文《基於共同學習對齊和翻譯的神經機器翻譯》中使用"對齊"一詞來表示在訓練模型時調整直接負責得分的權重。以下是有關架構的注意力事項:

1. 編碼器是一個雙向(正向+反向)門控迴圈單元(BiGRU)。解碼器是一個GRU,其初始隱藏狀態是從反向編碼器GRU的最後隱藏狀態修改而來的向量(未在下圖中示出)。

2.注意力層中的得分函式是add/ concat。

3. 到下一個解碼器步驟的輸入是來自前一個解碼器時間步長(粉紅色)的輸出和來自當前時間步長(深綠色)的上下文向量之間的串聯。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖2a:來自Bahdanau等的NMT。編碼器是BiGRU,解碼器是GRU

作者在WMT'14英法資料集上獲得了26.75的BLEU分數。

直覺:具有雙向編碼器的seq2seq+注意力

譯者A在閱讀德語文字的同時寫下關鍵字。譯者B從最後一個單詞到第一個單詞閱讀相同的德語文字,同時記下關鍵詞。這兩個人定期討論他們到目前為止閱讀的每一個字。一旦讀完這篇德語文字,翻譯者B就會負責根據討論和他們倆所選擇的綜合關鍵詞,將德語句子逐字翻譯成英語。

譯者A是正向RNN,譯者B是反向RNN。

2b. Luong 等(2015)[2]

基於注意力的神經機器翻譯的有效方法的作者已經明確地簡化和概括了Bahdanau等人的體系結構。方法如下:

1. 編碼器是一個兩層的長短期記憶(LSTM)網路。解碼器也具有相同的架構,其初始隱藏狀態是最後的編碼器隱藏狀態。

2. 他們實驗的得分函式是(i) additive/concat, (ii)dot product, (iii) location-based, and (iv) 'general'

3.來自當前解碼器時間步長的輸出與來自當前時間步長的上下文向量之間的串聯被輸入到前饋神經網路,以給出當前解碼器時間步長的最終輸出(粉紅色)。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖2b:來自Luong等人的NMT。編碼器是2層LSTM,同樣用於解碼器

在WMT'15英德測試中,該模型的BLEU得分為25.9。

直覺:具有2層堆疊編碼器的seq2seq+注意力

譯者A在閱讀德語文字的同時寫下關鍵字。同樣,譯者B(比譯者A更專業)也會讀取相同的德語文字,同時記下關鍵字。請注意,譯者A閱讀的每個單詞都要向譯者B報告。完成閱讀後,他們都會根據他們所選擇的綜合關鍵詞,逐字逐句地將句子翻譯成英語。

2c.谷歌的神經機器翻譯(GNMT)[9]

因為我們大多數人都必須以這樣或那樣的方式使用谷歌翻譯,所以我覺得有必要談論谷歌的NMT,它是在2016年釋出的。GNMT是我們見過的前兩個例子的組合。

1. 編碼器由8個LSTM組成,其中第一個是雙向的(其輸出是連線的),來自連續層的輸出之間存在殘餘連線(從第3層開始)。解碼器是8個單向LSTM的獨立堆疊。

2.使用的得分函式是add/ concat,如[1]中所示。

3.同樣,與[1]中一樣,下一個解碼器步驟的輸入是前一個解碼器時間步長(粉紅色)的輸出與當前時間步長(深綠色)的上下文向量之間的串聯。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

圖2c:Google的谷歌翻譯NMT。跳過連線用彎曲箭頭表示。 *注意力LSTM單元只顯示隱藏狀態和輸入;它不顯示單元格狀態輸入。

該模型在WMT'14英法測試上達到38.95 BLEU,在WMT'14英德測試上達到24.17 BLEU。

直覺:GNMT——具有8個堆疊編碼器的seq2seq(+雙向+剩餘連線)+注意力

從譯者A,B,...,H開始,8位譯者從下到上排成一列。每位譯者都閱讀相同的德語文字。在每個單詞中,譯者A與譯者B分享他/她的發現,譯者B將改進它並與譯者C分享——重複這個過程,直到傳遞給譯者H。此外,在閱讀德語文字時,譯者H寫下相關的關鍵詞基於他所知道的和他收到的資訊。

當每個人都讀完了這個英文文字後,譯者A就會被告知翻譯第一個單詞。首先,他試圖回憶,然後他與譯者B分享他的答案,譯者B改進答案並與譯者C分享——重複這個過程直到傳遞給譯者H。譯者H然後根據他寫的關鍵詞寫出第一個翻譯詞。重複此操作,直到我們完成翻譯。

3.總結

以下是你在本文中看到的所有體系結構的快速總結:

  • seq2seq
  • seq2seq+注意力
  • 具有雙向編碼器的seq2seq+注意力
  • 具有2個堆疊編碼器的seq2seq+注意力
  • GNMT——具有8個堆疊編碼器的seq2seq(+雙向+剩餘連線)+注意力

附錄A:得分函式

以下是Lilian Weng編寫的一些得分函式。本文提到了add/ concat和點積。涉及點積運算(點積,餘弦相似度等)的得分函式的思想是測量兩個向量之間的相似性。對於前饋神經網路得分函式,其思想是讓模型與翻譯一起學習對齊權重。

Seq2Seq那些事:詳解深度學習中的“注意力機制”

Seq2Seq那些事:詳解深度學習中的“注意力機制”

參考

[1]基於共同學習對齊和翻譯的神經機器翻譯(Bahdanau et.al,2015)()

[2]基於注意力的神經機器翻譯的有效方法(Luong et.al,2015)()

[3]Attention Is All You Need(Vaswani et.al,2017)()

[4]自我注意力GAN(Zhang et.al,2018)()

[5]用神經網路進行序列學習的序列(Sutskever等,2014)()

[6] TensorFlow的seq2seq教程注意力事項(seq2seq +注意力教程)()

[7] Lilian Weng的部落格(開始注意力的開始)()

[8] Jay Alammar關於Seq2Seq的部落格(關於seq2seq的精彩插圖和工作例項+注意力)()

[9]谷歌的神經機器翻譯系統:縮小人機翻譯之間的差距(Wu等,2016)()

相關文章

動畫RNN,LSTM和GRU()

逐行Word2Vec實現(關於字嵌入)()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545819/viewspace-2564383/,如需轉載,請註明出處,否則將追究法律責任。

相關文章