您當前的位置:首頁 > 詩詞

純注意力模型

作者:由 張雨石 發表于 詩詞時間:2019-12-22

本文是參考文獻[1]的閱讀筆記。

背景

可以在參考文章[2]中詳細學習Transformer。本文下一部分也會對Transformer layer做簡要介紹。

Transformer的出現使得NLP領域往前邁了一大步,這其中的功勞,就是Transformer中使用的多頭注意力機制。

但是,在Transformer的每一個單元中,除了多頭注意力機制之外,還有一個全連線層,全連線層在注意力層之後如下圖所示

純注意力模型

由於全連線層的引數量巨大,所以Transformer的效果好,可能不一定全是由注意力層帶來的,全連線層也可能對最終的好效果有所幫助。

那麼,可不可以去掉全連線層或者替代全連線層從而可以保持效果的同時降低引數量呢?這就是論文[1]的工作。

Transformer層次

接下來我們先來簡要介紹一下Transformer中每一個小層次單元的結構。結構如上圖所示。具體步驟為:

context的資訊可以轉換為key和value

然後對於輸入x,先將其轉換為query

然後query和key去計算attention權重

得到的權重將value組合起來得到結果矩陣

結果矩陣經過add-norm得到輸出

再輸入給全連線層

再經過add-norm得到這個小結構的輸出

在第一步,使用的公式如下:

純注意力模型

第二步和第三步使用的公式如下:

純注意力模型

第四步公式如下

純注意力模型

第六步公式如下:

純注意力模型

第五步和第七步的公式如下:

純注意力模型

整個單元的公式如下:

純注意力模型

用attention替換全連線層

在計算全連線層FF(xt)的時候,我們使用的啟用函式是relu,那麼如果將啟用函式替換成softmax,那麼公式將變為

純注意力模型

此時,有意思的事情是,我們發現這個操作跟上一部分第三四步計算attention權重的公式很像。這裡的V和xt可以看成key和query,U可以看成value。

所以,我們可以把attention層+全連線層的結構替換為全部都是attention的結構,如下圖:

純注意力模型

需要做的就是預定義N對矩陣,充當著key和value,然後對於輸入x,可以按照多頭注意力的方式去進行計算:

純注意力模型

純注意力模型

純注意力模型

這裡的N對矩陣是和輸入無關,可以認為它們起的作用跟當初的全連線層中的引數矩陣起的作用一樣。

因而,整個子結構就變成了:

純注意力模型

語言模型

試驗過程中,對於使用transformer進行語言模型的建模中,還採用了幾種技術:

相對位置編碼

快取(Transformer-xl)

自適應注意力寬度

自適應softmax

實驗結果

在字元語言模型的效果如下:

純注意力模型

純注意力模型

在word層次上的語言模型上的效果如下:

純注意力模型

效果和預定義矩陣對的多少的關係如下

純注意力模型

其他的合併方式的對比如下:

純注意力模型

其中,

all attn: 論文提出的方法

att split: 原有的attention和新設計的attention分別計算權重和做加權

head split: 一半的頭用來計算原有的attention,一半來計算新加的。

single head: 新設計的attention只有一個頭

FF-attn: 保持原有的全連線結構,只把relu替換為softmax。

參考文獻

[1]。 Sukhbaatar, Sainbayar, et al。 “Augmenting self-attention with persistent memory。” arXiv preprint arXiv:1907。01470 (2019)。

[2]。 Transformer技術講解。 英文連結 中文連結