本文近期學習NMT相關知識,學習大佬資料,匯總便於后期復習用,有問題,歡迎斧正。
目錄
RNN
Seq2Seq
Attention
Seq2Seq + Attention
Transformer
Transformer-xl
1. RNN
根據輸出和輸入序列不同數量rnn可以有多種不同的結構,不同結構自然就有不同的引用場合。如下圖,
one to one 結構,僅僅只是簡單的給一個輸入得到一個輸出,此處並未體現序列的特征,例如圖像分類場景。
one to many 結構,給一個輸入得到一系列輸出,這種結構可用於生產圖片描述的場景。
many to one 結構,給一系列輸入得到一個輸出,這種結構可用於文本情感分析,對一些列的文本輸入進行分類,看是消極還是積極情感。
many to many 結構,給一些列輸入得到一系列輸出,這種結構可用於翻譯或聊天對話場景,對輸入的文本轉換成另外一些列文本。
同步 many to many 結構,它是經典的rnn結構,前一輸入的狀態會帶到下一個狀態中,而且每個輸入都會對應一個輸出,我們最熟悉的就是用於字符預測了,同樣也可以用於視頻分類,對視頻的幀打標簽。
2. Seq2Seq
在 many to many 的兩種模型中,上圖可以看到第四和第五種是有差異的,經典的rnn結構的輸入和輸出序列必須要是等長,它的應用場景也比較有限。而第四種它可以是輸入和輸出序列不等長,這種模型便是seq2seq模型,即Sequence to Sequence。
它實現了從一個序列到另外一個序列的轉換,輸入序列和輸出序列不等長。比如google曾用seq2seq模型加attention模型來實現了翻譯功能,類似的還可以實現聊天機器人對話模型。經典的rnn模型固定了輸入序列和輸出序列的大小,而seq2seq模型則突破了該限制。


其實對於seq2seq的decoder,它在訓練階段和預測階段對rnn的輸出的處理可能是不一樣的,比如在訓練階段可能對rnn的輸出不處理,直接用target的序列作為下時刻的輸入,如上圖一。而預測階段會將rnn的輸出當成是下一時刻的輸入,因為此時已經沒有target序列可以作為輸入了,如上圖二。
encoder-decoder結構
seq2seq屬於encoder-decoder結構的一種,這里看看常見的encoder-decoder結構,基本思想就是利用兩個RNN,一個RNN作為encoder,另一個RNN作為decoder。
encoder負責將輸入序列壓縮成指定長度的向量,這個向量就可以看成是這個序列的語義,這個過程稱為編碼,如下圖,獲取語義向量最簡單的方式就是直接將最后一個輸入的隱狀態作為語義向量C。也可以對最后一個隱含狀態做一個變換得到語義向量,還可以將輸入序列的所有隱含狀態做一個變換得到語義變量。

Decoder則負責根據語義向量生成指定的序列,這個過程也稱為解碼,如下圖,最簡單的方式是將encoder得到的語義變量作為初始狀態輸入到decoder的rnn中,得到輸出序列。可以看到上一時刻的輸出會作為當前時刻的輸入,而且其中語義向量C只作為初始狀態參與運算,后面的運算都與語義向量C無關。
decoder處理方式還有另外一種,就是語義向量C參與了序列所有時刻的運算,如下圖,上一時刻的輸出仍然作為當前時刻的輸入,但語義向量C會參與所有時刻的運算。

優點:能夠解決輸入輸出語句定長問題
缺點:
當輸入序列非常長時,模型難以學到合理的向量表示
序列輸入時,隨着序列的不斷增長,原始根據時間步的方式的表現越來越差,這是由於原始的這種時間步模型設計的結構有缺陷,即所有的上下文輸入信息都被限制到固定長度,整個模型的能力都同樣收到限制,我們暫且把這種原始的模型稱為簡單的編解碼器模型。
編解碼器的結構無法解釋,也就導致了其無法設計。
長輸入序列帶來的問題:
使用傳統編碼器-解碼器的RNN模型先用一些LSTM單元來對輸入序列進行學習,編碼為固定長度的向量表示;然后再用一些LSTM單元來讀取這種向量表示並解碼為輸出序列。
采用這種結構的模型在許多比較難的序列預測問題(如文本翻譯)上都取得了最好的結果,因此迅速成為了目前的主流方法。
這種結構在很多其他的領域上也取得了不錯的結果。然而,它存在一個問題在於:輸入序列不論長短都會被編碼成一個固定長度的向量表示,而解碼則受限於該固定長度的向量表示。
這個問題限制了模型的性能,尤其是當輸入序列比較長時,模型的性能會變得很差(在文本翻譯任務上表現為待翻譯的原始文本長度過長時翻譯質量較差)。
“一個潛在的問題是,采用編碼器-解碼器結構的神經網絡模型需要將輸入序列中的必要信息表示為一個固定長度的向量,而當輸入序列很長時則難以保留全部的必要信息(因為太多),尤其是當輸入序列的長度比訓練數據集中的更長時。”
3. Attention
參考大佬博客《深度學習中 的 Attention機制》
當我們人在看一樣東西的時候,我們當前時刻關注的一定是我們當前正在看的這樣東西的某一地方,換句話說,當我們目光移到別處時,注意力隨着目光的移動也在轉移。
這意味着,當人們注意到某個目標或某個場景時,該目標內部以及該場景內每一處空間位置上的注意力分布是不一樣的。
這一點在如下情形下同樣成立:當我們試圖描述一件事情,我們當前時刻說到的單詞和句子和正在描述的該事情的對應某個片段最先關,而其他部分隨着描述的進行,相關性也在不斷地改變。
從上面兩種情形來看,對於 Attention的作用角度出發,我們就可以從兩個角度來分類 Attention種類:
空間注意力 Spatial Attention
時間注意力 Temporal Attention
這樣的分類更多的是從應用層面上,而從 Attention的作用方法上,可以將其分為 Soft Attention 和 Hard Attention,這既我們所說的, Attention輸出的向量分布是一種one-hot的獨熱分布還是soft的軟分布,這直接影響對於上下文信息的選擇作用。
注意力機制即 Attention mechanism在序列學習任務上具有巨大的提升作用,在編解碼器框架內,通過在編碼段加入Attention模型,對源數據序列進行數據加權變換,或者在解碼端引入Attention 模型,對目標數據進行加權變化,可以有效提高序列對序列的自然方式下的系統表現。
Attention機制的基本思想是:打破了傳統編碼器-解碼器結構在編解碼時都依賴於內部一個固定長度向量的限制。
Attention機制的實現是 通過保留LSTM編碼器對輸入序列的中間輸出結果,然后訓練一個模型來對這些輸入進行選擇性的學習並且在模型輸出時將輸出序列與之進行關聯。
換一個角度而言,輸出序列中的每一項的生成概率取決於在輸入序列中選擇了哪些項。
Attention-based Model 其實就是一個相似性的度量,當前的輸入與目標狀態約相似,那么在當前的輸入的權重就會越大。就是在原有的model上加入了Attention的思想。
沒有attention機制的encoder-decoder結構通常把encoder的最后一個狀態作為decoder的 輸入(可能作為初始化,也可能作為每一時刻的輸入),但是encoder的state畢竟是有限的,存儲不了太多的信息,對於decoder過程,每一個步驟都和之前的輸入都沒有關系了,只與這個傳入的state有關。attention機制的引入之后,decoder根據時刻的不同,讓每一時刻的輸入都有所不同。
采用傳統編碼器-解碼器結構的LSTM/RNN模型存在一個問題:不論輸入長短都將其編碼成一個固定長度的向量表示,這使模型對於長輸入序列的學習效果很差(解碼效果很差)。而attention機制則克服了上述問題,原理是在模型輸出時會選擇性地專注考慮輸入中的對應相關的信息。使用attention機制的方法被廣泛應用在各種序列預測任務上,包括文本翻譯、語音識別等。
Attention-based Model
Attention-based Model其實就是一個相似性的度量,當前的輸入與目標狀態越相似,那么在當前的輸入的權重就會越大,說明當前的輸出越依賴於當前的輸入。嚴格來說,Attention並算不上是一種新的model,而僅僅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比較合理的叫法,而非Attention Model。
參考博客 淺談Attention-based Model【原理篇】,對Attention的公式梳理一下。
對於“match”, 理論上任何可以計算兩個向量的相似度都可以,比如:
余弦相似度
一個簡單的 神經網絡,輸入為hh和ww,輸出為αα
或者矩陣變換α=hTWzα=hTWz (Multiplicative attention,Luong et al., 2015)
4. seq2seq + Attention
學習大佬博客《圖解Seq2Seq Attention模型》


5. Transformer
參考文章:《圖解Transformer》https://jalammar.github.io/illustrated-transformer/
self-attention:
當模型處理單詞的時候,self attention層可以通過當前單詞去查看其輸入序列中的其他單詞,以此來尋找編碼這個單詞更好的線索。更容易捕獲長距離依賴信息。
Multi-headed:
1. 它拓展了模型關注不同位置的能力。
2.它為attention層提供了多個“representation subspaces”。
6. Transformer-xl
解決transformer的長距離依賴問題,一是在Transformer中引入重用機制,二是使用相對位置編碼。
重用機制
為了突破使用固定長度片段帶來的語境限制,這篇論文在Transformer體系結構中引入了重復機制。
在訓練期間,為模型處理下一個新的片段時,會緩存前一個片段計算的隱藏狀態序列,並作為擴展語境重用,如下圖中所示。
雖然梯度仍然保留在一個片段內,但這個額外的輸入,允許網絡利用歷史信息,從而能夠對長期依賴建模,並避免場景碎片。
除了這些好處之外,重復機制還能夠加快評估速度。在評估期間,可以重復使用來自先前片段的表征,而不是像Vanilla模型從頭開始。
在針對enwiki8數據集的實驗中,Transformer-XL在評估過程中比Vanilla模型快1800倍。
相對位置編碼
但是,想要重用隱藏狀態,還需要解決一個關鍵的技術挑戰:重用狀態時,如何保持位置信息的一致性?
在標准的Transformer中,序列順序的信息,都是由一組位置編碼提供,每一個位置都有絕對的位置信息。但將這個邏輯應用到重用機制中時,會導致性能損失。
這個問題的解決思路是,對隱藏狀態中的相對位置信息進行編碼。從概念上講,位置編碼為模型提供了關於應如何收集信息的時間線索,即應該在哪里介入處理。
以相對的方式定義時間線索,將相同的信息注入每層的注意分數,更加直觀,也更通用。
基於這個思路,可以創建一組相對位置編碼,使得重用機制變得可行,也不會丟失任何的時間信息。
將相對位置嵌入Transformer之中,並配合重用機制,就得到了Transformer-XL的架構。
基於這些改進,Transformer-XL在相關的數據集上都取得了很好的成績。論文中表示,這是第一個在字符級和單詞級建模方面比RNN結果更好的自注意力模型。
參考博客:量子位
