2. Attention Is All You Need(Transformer)算法原理解析

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的結構。該模型能夠高度並行地工做,因此在提高翻譯性能的同時訓練速度也特別快。html

2. Transformer模型結構

Transformer的主體結構圖:算法

image

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 \]性能

image

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) \]spa

image

2.4.3 模型中的attention

Transformer以三種不一樣的方式使用了多頭attention。

  1. 在encoder-decoder的attention層,queries來自於以前的decoder層,而keys和values都來自於encoder的輸出。這個相似於不少已經提出的seq2seq模型所使用的attention機制。
  2. 在encoder含有self-attention層。在一個self-attention層中,全部的keys,values以及queries都來自於同一個地方,本例中即encoder以前一層的的輸出。
  3. 相似的,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用於機器翻譯任務,表現極好,可並行化,而且大大減小訓練時間。而且也給咱們開拓了一個思路,在處理問題時能夠增長一種結構的選擇。

相關文章
相關標籤/搜索