Transformer 模型詳解

Transformer 是 Google 的團隊在 2017 年提出的一種 NLP 經(jīng)典模型归榕,現(xiàn)在比較火熱的 Bert 也是基于 Transformer。Transformer 模型使用了 Self-Attention 機制,不采用 RNN 的順序結(jié)構(gòu)谷异,使得模型可以并行化訓(xùn)練,而且能夠擁有全局信息。

1. Transformer 結(jié)構(gòu)

首先介紹 Transformer 的整體結(jié)構(gòu)向瓷,下圖是 Transformer 用于中英文翻譯的整體結(jié)構(gòu)。

transformer整體結(jié)構(gòu)

可以看到 Transformer 由 Encoder 和 Decoder 兩個部分組成痕貌,Encoder 和 Decoder 都包含 6 個 block风罩。Transformer 的工作流程大體如下:
第一步:獲取輸入句子的每一個單詞的表示向量 XX 由單詞的 Embedding 和單詞位置的 Embedding 相加得到舵稠。

transformer 輸入的 Embedding

第二步:將得到的單詞表示向量矩陣 (如上圖所示超升,每一行是一個單詞的表示 x) 傳入 Encoder 中,經(jīng)過 6 個 Encoder block 后可以得到句子所有單詞的編碼信息矩陣 C哺徊,如下圖室琢。單詞向量矩陣用 X(n×d) 表示, n 是句子中單詞個數(shù)落追,d 是表示向量的維度 (論文中 d=512)盈滴。每一個 Encoder block 輸出的矩陣維度與輸入完全一致。

transformer 編碼句子信息

第三步:將 Encoder 輸出的編碼信息矩陣 C 傳遞到 Decoder 中轿钠,Decoder 依次會根據(jù)當(dāng)前翻譯過的單詞 1~ i 翻譯下一個單詞 i+1巢钓,如下圖所示。在使用的過程中疗垛,翻譯到單詞 i+1 的時候需要通過 Mask (掩蓋) 操作遮蓋住 i+1 之后的單詞症汹。

Transformer Decoder 預(yù)測

上圖 Decoder 接收了 Encoder 的編碼矩陣 C,然后首先輸入一個翻譯開始符 "<Begin>"贷腕,預(yù)測第一個單詞 "I"背镇;然后輸入翻譯開始符 "<Begin>" 和單詞 "I"咬展,預(yù)測單詞 "have",以此類推瞒斩。這是 Transformer 使用時候的大致流程破婆,接下來是里面各個部分的細(xì)節(jié)。

2. Transformer 的輸入

Transformer 中單詞的輸入表示 x 由單詞 Embedding 和位置 Embedding 相加得到胸囱。

transformer 輸入的 Embedding

2.1 單詞 Embedding

單詞的 Embedding 有很多種方式可以獲取祷舀,例如可以采用 Word2Vec、Glove 等算法預(yù)訓(xùn)練得到旺矾,也可以在 Transformer 中訓(xùn)練得到蔑鹦。

2.2 位置 Embedding

Transformer 中除了單詞的 Embedding,還需要使用位置 Embedding 表示單詞出現(xiàn)在句子中的位置箕宙。因為 Transformer 不采用 RNN 的結(jié)構(gòu)嚎朽,而是使用全局信息,不能利用單詞的順序信息柬帕,而這部分信息對于 NLP 來說非常重要哟忍。所以 Transformer 中使用位置 Embedding 保存單詞在序列中的相對或絕對位置。

位置 Embedding 用 PE 表示陷寝,PE 的維度與單詞 Embedding 是一樣的锅很。PE 可以通過訓(xùn)練得到,也可以使用某種公式計算得到凤跑。在 Transformer 中采用了后者爆安,計算公式如下:

Position Embedding 計算公式

其中,pos 表示單詞在句子中的位置仔引,d 表示 PE 的維度 (與詞 Embedding 一樣)扔仓,2i 表示偶數(shù)的維度,2i+1 表示奇數(shù)維度 (即 2i≤d, 2i+1≤d)咖耘。使用這種公式計算 PE 有以下的好處:

  • 使 PE 能夠適應(yīng)比訓(xùn)練集里面所有句子更長的句子翘簇,假設(shè)訓(xùn)練集里面最長的句子是有 20 個單詞,突然來了一個長度為 21 的句子儿倒,則使用公式計算的方法可以計算出第 21 位的 Embedding版保。
  • 可以讓模型容易地計算出相對位置,對于固定長度的間距 k夫否,PE(pos+k) 可以用 PE(pos) 計算得到彻犁。因為 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。

將單詞的詞 Embedding 和位置 Embedding 相加凰慈,就可以得到單詞的表示向量 x汞幢,x 就是 Transformer 的輸入。

3. Self-Attention

Transformer Multi-Head Attention

上圖是論文中 Transformer 的內(nèi)部結(jié)構(gòu)圖溉瓶,左側(cè)為 Encoder block急鳄,右側(cè)為 Decoder block。紅色圈中的部分為 Multi-Head Attention堰酿,是由多個 Self-Attention 組成的疾宏,可以看到 Encoder block 包含一個 Multi-Head Attention,而 Decoder block 包含兩個 Multi-Head Attention (其中有一個用到 Masked)触创。Multi-Head Attention 上方還包括一個 Add & Norm 層坎藐,Add 表示殘差連接 (Residual Connection) 用于防止網(wǎng)絡(luò)退化,Norm 表示 Layer Normalization瓷胧,用于對每一層的激活值進(jìn)行歸一化玄渗。

因為 Self-Attention 是 Transformer 的重點翔曲,所以我們重點關(guān)注 Multi-Head Attention 以及 Self-Attention,首先詳細(xì)了解一下 Self-Attention 的內(nèi)部邏輯蛀恩。

3.1 Self-Attention 結(jié)構(gòu)

Self-Attention

上圖是 Self-Attention 的結(jié)構(gòu),在計算的時候需要用到矩陣 Q(查詢), K(鍵值), V(值)茂浮。在實際中双谆,Self-Attention 接收的是輸入(單詞的表示向量 x 組成的矩陣 X) 或者上一個 Encoder block 的輸出。而 Q, K, V 正是通過 Self-Attention 的輸入進(jìn)行線性變換得到的席揽。

3.2 Q, K, V 的計算

Self-Attention 的輸入用矩陣 X 進(jìn)行表示顽馋,則可以使用線性變陣矩陣 WQ, WK, WV 計算得到 Q, K, V。計算如下圖所示幌羞,注意 X, Q, K, V 的每一行都表示一個單詞寸谜。

QKV 計算

3.3 Self-Attention 的輸出

得到矩陣 Q, K, V 之后就可以計算出 Self-Attention 的輸出了,計算的公式如下属桦。

Attention 公式

公式中計算矩陣 QK 每一行向量的內(nèi)積熊痴,為了防止內(nèi)積過大,因此除以 dk 的平方根地啰。Q 乘以 K 的轉(zhuǎn)置后愁拭,得到的矩陣行列數(shù)都為 n,n 為句子單詞數(shù)亏吝,這個矩陣可以表示單詞之間的 attention 強度岭埠。下圖為 Q 乘以 K 的轉(zhuǎn)置,1234 表示的是句子中的單詞蔚鸥。

得到 QKT 之后惜论,使用 Softmax 計算每一個單詞對于其他單詞的 attention 系數(shù),公式中的 Softmax 是對矩陣的每一行進(jìn)行 Softmax止喷,即每一行的和都變?yōu)?1馆类。

Softmax 后得到 Attention

得到 Softmax 矩陣之后可以和 V 相乘,得到最終的輸出 Z弹谁。

上圖中 Softmax 矩陣的第 1 行表示單詞 1 與其他所有單詞的 attention 系數(shù)乾巧,最終單詞 1 的輸出 Z1 等于所有單詞 i 的值 Vi 根據(jù) attention 系數(shù)的比例加在一起得到句喜,如下圖所示:

3.4 Multi-Head Attention

在上一步,我們已經(jīng)知道怎么通過 Self-Attention 計算得到輸出矩陣 Z沟于,而 Multi-Head Attention 是由多個 Self-Attention 組合形成的咳胃,下圖是論文中 Multi-Head Attention 的結(jié)構(gòu)圖。

Multi-Head Attention

從上圖可以看到 Multi-Head Attention 包含多個 Self-Attention 層旷太,首先將輸入 X 分別傳遞到 h 個不同的 Self-Attention 中展懈,計算得到 h 個輸出矩陣 Z。下圖是 h=8 時候的情況供璧,此時會得到 8 個輸出矩陣 Z存崖。

Multi Head

得到 8 個輸出矩陣 Z1 到 Z8 之后,Multi-Head Attention 將它們拼接在一起 (Concat)睡毒,然后傳入一個 Linear 層来惧,得到 Multi-Head Attention 最終的輸出 Z

Multi Head 輸出

可以看到 Multi-Head Attention 輸出的矩陣 Z 與其輸入的矩陣 X 的維度是一樣的演顾。

4. Encoder 結(jié)構(gòu)

Encoder

上圖紅色部分是 Transformer 的 Encoder block 結(jié)構(gòu)违寞,可以看到是由 Multi-Head Attention, Add & Norm, Feed Forward, Add & Norm 組成的。剛剛已經(jīng)了解了 Multi-Head Attention 的計算過程偶房,現(xiàn)在了解一下 Add & Norm 和 Feed Forward 部分趁曼。

4.1 Add & Norm

Add & Norm 層由 Add 和 Norm 兩部分組成,其計算公式如下:

Add&Norm

其中 X 表示 Multi-Head Attention 或者 Feed Forward 的輸入棕洋,MultiHeadAttention(X) 和 FeedForward(X) 表示輸出 (輸出與輸入 X 維度是一樣的挡闰,所以可以相加)。

AddX+MultiHeadAttention(X)掰盘,是一種殘差連接摄悯,通常用于解決多層網(wǎng)絡(luò)訓(xùn)練的問題,可以讓網(wǎng)絡(luò)只關(guān)注當(dāng)前差異的部分愧捕,在 ResNet 中經(jīng)常用到奢驯。

殘差

Norm 指 Layer Normalization,通常用于 RNN 結(jié)構(gòu)次绘,Layer Normalization 會將每一層神經(jīng)元的輸入都轉(zhuǎn)成均值方差都一樣的瘪阁,這樣可以加快收斂。

4.2 Feed Forward

Feed Forward 層比較簡單邮偎,是一個兩層的全連接層管跺,第一層的激活函數(shù)為 Relu,第二層不使用激活函數(shù)禾进,對應(yīng)的公式如下豁跑。

Feed Forward

X 是輸入,F(xiàn)eed Forward 最終得到的輸出矩陣的維度與 X 一致泻云。

4.3 組成 Encoder

通過上面描述的 Multi-Head Attention, Feed Forward, Add & Norm 就可以構(gòu)造出一個 Encoder block艇拍,Encoder block 接收輸入矩陣 X(n×d)狐蜕,并輸出一個矩陣 O(n×d)。通過多個 Encoder block 疊加就可以組成 Encoder卸夕。

第一個 Encoder block 的輸入為句子單詞的表示向量矩陣馏鹤,后續(xù) Encoder block 的輸入是前一個 Encoder block 的輸出,最后一個 Encoder block 輸出的矩陣就是 編碼信息矩陣 C娇哆,這一矩陣后續(xù)會用到 Decoder 中。

transformer Encoder 句子到編碼信息

5. Decoder 結(jié)構(gòu)

Transformer Decoder

上圖紅色部分為 Transformer 的 Decoder block 結(jié)構(gòu)勃救,與 Encoder block 相似碍讨,但是存在一些區(qū)別:

  • 包含兩個 Multi-Head Attention 層。
  • 第一個 Multi-Head Attention 層采用了 Masked 操作蒙秒。
  • 第二個 Multi-Head Attention 層的 K, V 矩陣使用 Encoder 的編碼信息矩陣 C 進(jìn)行計算勃黍,而 Q 使用上一個 Decoder block 的輸出計算。
  • 最后有一個 Softmax 層計算下一個翻譯單詞的概率晕讲。

5.1 第一個 Multi-Head Attention

Decoder block 的第一個 Multi-Head Attention 采用了 Masked 操作覆获,因為在翻譯的過程中是順序翻譯的,即翻譯完第 i 個單詞瓢省,才可以翻譯第 i+1 個單詞弄息。通過 Masked 操作可以防止第 i 個單詞知道 i+1 個單詞之后的信息。下面以 "我有一只貓" 翻譯成 "I have a cat" 為例勤婚,了解一下 Masked 操作摹量。

下面的描述中使用了類似 Teacher Forcing 的概念,不熟悉 Teacher Forcing 的童鞋可以參考以下上一篇文章《Seq2Seq 模型詳解》馒胆。在 Decoder 的時候缨称,是需要根據(jù)之前的翻譯,求解當(dāng)前最有可能的翻譯祝迂,如下圖所示睦尽。首先根據(jù)輸入 "<Begin>" 預(yù)測出第一個單詞為 "I",然后根據(jù)輸入 "<Begin> I" 預(yù)測下一個單詞 "have"型雳。

Teacher Forcing 預(yù)測

Decoder 可以在訓(xùn)練的過程中使用 Teacher Forcing 并且并行化訓(xùn)練当凡,即將正確的單詞序列 (<Begin> I have a cat) 和對應(yīng)輸出 (I have a cat <end>) 傳遞到 Decoder。那么在預(yù)測第 i 個輸出時纠俭,就要將第 i+1 之后的單詞掩蓋住宁玫,注意 Mask 操作是在 Self-Attention 的 Softmax 之前使用的下面用 0 1 2 3 4 5 分別表示 "<Begin> I have a cat <end>"柑晒。

第一步: 是 Decoder 的輸入矩陣和 Mask 矩陣欧瘪,輸入矩陣包含 "<Begin> I have a cat" (0, 1, 2, 3, 4) 五個單詞的表示向量,Mask 是一個 5×5 的矩陣匙赞。在 Mask 可以發(fā)現(xiàn)單詞 0 只能使用單詞 0 的信息佛掖,而單詞 1 可以使用單詞 0, 1 的信息妖碉,即只能使用之前的信息。

輸入與Mask矩陣

第二步:接下來的操作和之前的 Self-Attention 一樣芥被,通過輸入矩陣 X 計算得到 Q, K, V 矩陣欧宜。然后計算 QKT 的乘積 QKT。

第三步:在得到 QKT 之后需要進(jìn)行 Softmax拴魄,計算 attention score冗茸,我們在 Softmax 之前需要使用 Mask 矩陣遮擋住每一個單詞之后的信息,遮擋操作如下:

得到 Mask QKT 之后在 Mask QKT 上進(jìn)行 Softmax匹中,每一行的和都為 1夏漱。但是單詞 0 在單詞 1, 2, 3, 4 上的 attention score 都為 0。

第四步:使用 Mask QKT 與矩陣 V 相乘顶捷,得到輸出 Z挂绰,則單詞 1 的輸出向量 Z1 是只包含單詞 1 信息的。

Mask 后的 Attention

第五步:通過上述步驟就可以得到一個 Mask Self-Attention 的輸出矩陣 Zi服赎,然后和 Encoder 類似葵蒂,通過 Multi-Head Attention 拼接多個輸出 Zi 然后計算得到第一個 Multi-Head Attention 的輸出 ZZ 與輸入 X 維度一樣重虑。

5.2 第二個 Multi-Head Attention

Decoder block 第二個 Multi-Head Attention 變化不大践付, 主要的區(qū)別在于其中 Self-Attention 的 K, V 矩陣不是使用 上一個 Decoder block 的輸出計算的,而是使用 Encoder 的編碼信息矩陣 C 計算的缺厉。

根據(jù) Encoder 的輸出 C 計算得到 K, V荔仁,根據(jù)上一個 Decoder block 的輸出 Z 計算 Q (如果是第一個 Decoder block 則使用輸入矩陣 X 進(jìn)行計算),后續(xù)的計算方法與之前描述的一致芽死。

這樣做的好處是在 Decoder 的時候乏梁,每一位單詞都可以利用到 Encoder 所有單詞的信息 (這些信息無需 Mask)。

5.3 Softmax 預(yù)測輸出單詞

Decoder block 最后的部分是利用 Softmax 預(yù)測下一個單詞关贵,在之前的網(wǎng)絡(luò)層我們可以得到一個最終的輸出 Z遇骑,因為 Mask 的存在,使得單詞 0 的輸出 Z0 只包含單詞 0 的信息揖曾,如下落萎。

Decoder最終輸出的Z

Softmax 根據(jù)輸出矩陣的每一行預(yù)測下一個單詞

這就是 Decoder block 的定義,與 Encoder 一樣炭剪,Decoder 是由多個 Decoder block 組合而成练链。

6. Transformer 總結(jié)

Transformer 與 RNN 不同,可以比較好地并行訓(xùn)練奴拦。

Transformer 本身是不能利用單詞的順序信息的媒鼓,因此需要在輸入中添加位置 Embedding,否則 Transformer 就是一個詞袋模型了。

Transformer 的重點是 Self-Attention 結(jié)構(gòu)绿鸣,其中用到的 Q, K, V 矩陣通過輸出進(jìn)行線性變換得到疚沐。

Transformer 中 Multi-Head Attention 中有多個 Self-Attention,可以捕獲單詞之間多種維度上的相關(guān)系數(shù) attention score潮模。

參考文獻(xiàn)

論文:Attention Is All You Need
Jay Alammar 博客:The Illustrated Transformer
pytorch transformer 代碼:The Annotated Transformer

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亮蛔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子擎厢,更是在濱河造成了極大的恐慌究流,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件动遭,死亡現(xiàn)場離奇詭異芬探,居然都是意外死亡,警方通過查閱死者的電腦和手機沽损,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來循头,“玉大人绵估,你說我怎么就攤上這事】睿” “怎么了国裳?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長全跨。 經(jīng)常有香客問我缝左,道長,這世上最難降的妖魔是什么浓若? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任渺杉,我火速辦了婚禮,結(jié)果婚禮上挪钓,老公的妹妹穿的比我還像新娘是越。我一直安慰自己,他們只是感情好碌上,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布倚评。 她就那樣靜靜地躺著,像睡著了一般馏予。 火紅的嫁衣襯著肌膚如雪天梧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天霞丧,我揣著相機與錄音呢岗,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛敷燎,可吹牛的內(nèi)容都是我干的暂筝。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼硬贯,長吁一口氣:“原來是場噩夢啊……” “哼焕襟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饭豹,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤鸵赖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拄衰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體它褪,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年翘悉,在試婚紗的時候發(fā)現(xiàn)自己被綠了茫打。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡妖混,死狀恐怖老赤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情制市,我是刑警寧澤抬旺,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站祥楣,受9級特大地震影響开财,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜误褪,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一责鳍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兽间,春花似錦薇搁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屎鳍,卻和暖如春宏娄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逮壁。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工孵坚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓卖宠,卻偏偏與公主長得像巍杈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扛伍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容