1. 語言模型
2. Attention Is All You Need(Transformer)算法原了解析
3. ELMo算法原了解析
4. OpenAI GPT算法原了解析
5. BERT算法原了解析
6. 從Encoder-Decoder(Seq2Seq)了解Attention的本質
7. Transformer-XL原理介紹
1. 前言
谷歌在2017年發表了一篇論文名字教《Attention Is All You Need》,提出了一個隻基于attention的結構來處理序列模型相關的問題,比如機器翻譯。傳統的神經機器翻譯大都是利用RNN或者CNN來作為encoder-decoder的模型基礎,而谷歌最新的隻基于Attention的Transformer模型摒棄了固有的定式,并沒有用任何CNN或者RNN的結構。該模型可以高度并行地工作,是以在提升翻譯性能的同時訓練速度也特别快。
2. Transformer模型結構
Transformer的主體結構圖:

2.1 Transformer的編碼器解碼器
模型分為編碼器和解碼器兩個部分。
- 編碼器由6個相同的層堆疊在一起,每一層又有兩個支層。第一個支層是一個多頭的自注意機制,第二個支層是一個簡單的全連接配接前饋網絡。在兩個支層外面都添加了一個residual的連接配接,然後進行了layer nomalization的操作。模型所有的支層以及embedding層的輸出次元都是\(d_{model}\)。
- 解碼器也是堆疊了六個相同的層。不過每層除了編碼器中那兩個支層,解碼器還加入了第三個支層,如圖中所示同樣也用了residual以及layer normalization。具體的細節後面再講。
2.2 輸入層
編碼器和解碼器的輸入就是利用學習好的embeddings将tokens(一般應該是詞或者字元)轉化為d維向量。對解碼器來說,利用線性變換以及softmax函數将解碼的輸出轉化為一個預測下一個token的機率。
2.3 位置向量
由于模型沒有任何循環或者卷積,為了使用序列的順序資訊,需要将tokens的相對以及絕對位置資訊注入到模型中去。論文在輸入embeddings的基礎上加了一個“位置編碼”。位置編碼和embeddings由同樣的次元都是\(d_{model}\)是以兩者可以直接相加。有很多位置編碼的選擇,既有學習到的也有固定不變的。
2.4 Attention模型
2.4.1 Scaled attention
論文中用的attention是基本的點乘的方式,就是多了一個所謂的scale。輸入包括次元為\(d_k\)的queries以及keys,還有次元為\(d_v\)的values。計算query和所有keys的點乘,然後每個都除以\(\sqrt{d_k}\)(這個操作就是所謂的Scaled)。之後利用一個softmax函數來擷取values的權重。
實際操作中,attention函數是在一些列queries上同時進行的,将這些queries并在一起形成一個矩陣\(Q\)同時keys以及values也并在一起形成了矩陣\(K\)以及\(V\)。則attention的輸出矩陣可以按照下述公式計算:
\[Attention(Q,K,V) = softmax({QK^T\over {\sqrt {d_k}}})V
\]
2.4.2 Multi-Head Attention
本文結構中的Attention并不是簡簡單單将一個點乘的attention應用進去。作者發現先對queries,keys以及values進行\(h\)次不同的線性映射效果特别好。學習到的線性映射分别映射到\(d_k\),\(d_k\)以及\(d_v\)維。分别對每一個映射之後的得到的queries,keys以及values進行attention函數的并行操作,生成\(dv\)維的output值。具體結構和公式如下。
\[MultiHead(Q,K,V) = Concat(head_1,...,head_h)
\[where: head_i = Attention(Q{W_i}^Q,K{W_i}^K,V{W_i}^V)
2.4.3 模型中的attention
Transformer以三種不同的方式使用了多頭attention。
- 在encoder-decoder的attention層,queries來自于之前的decoder層,而keys和values都來自于encoder的輸出。這個類似于很多已經提出的seq2seq模型所使用的attention機制。
- 在encoder含有self-attention層。在一個self-attention層中,所有的keys,values以及queries都來自于同一個地方,本例中即encoder之前一層的的輸出。
- 類似的,decoder中的self-attention層也是一樣。不同的是在scaled點乘attention操作中加了一個mask的操作,這個操作是保證softmax操作之後不會将非法的values連到attention中。
2.4.4 Feed Foreword
每層由兩個支層,attention層就是其中一個,而attention之後的另一個支層就是一個前饋的網絡。公式描述如下。
\[FFN(x) = max(0,xW_1 + b_1)W_2 + b_2
3. 總結
模型的整體架構基本介紹完了,其最重要的創新應該就是Self-Attention和Multi-Head Attention的架構。在摒棄傳統CNN和RNN的情況下,還能提高表現,降低訓練時間。Transformer用于機器翻譯任務,表現極好,可并行化,并且大大減少訓練時間。并且也給我們開拓了一個思路,在處理問題時可以增加一種結構的選擇。