分類目錄:《深入理解深度學(xué)習(xí)》總目錄
相關(guān)文章:
·注意力機(jī)制(Attention Mechanism):基礎(chǔ)知識
·注意力機(jī)制(Attention Mechanism):注意力匯聚與Nadaraya-Watson核回歸
·注意力機(jī)制(Attention Mechanism):注意力評分函數(shù)(Attention Scoring Function)
·注意力機(jī)制(Attention Mechanism):Bahdanau注意力
·注意力機(jī)制(Attention Mechanism):自注意力(Self-attention)
·注意力機(jī)制(Attention Mechanism):多頭注意力(Multi-head Attention)
· 注意力機(jī)制(Attention Mechanism):帶掩碼的多頭注意力(Masked Multi-head Attention)
·注意力機(jī)制(Attention Mechanism):位置編碼(Positional Encoding)
· Transformer:編碼器(Encoder)部分
· Transformer:解碼器(Decoder)的多頭注意力層(Multi-headAttention)
假設(shè)我們想把英語句子“I am good.”(原句)翻譯成法語句子“Je vais bien.”(目標(biāo)句)。首先,將原句“I am good.”送入編碼器,使編碼器學(xué)習(xí)原句,并計(jì)算特征值?!渡钊肜斫馍疃葘W(xué)習(xí)——Transformer:編碼器(Encoder)部分》中,我們學(xué)習(xí)了編碼器是如何計(jì)算原句的特征值的。然后,我們把從編碼器求得的特征值送入解碼器。解碼器將特征值作為輸入,并生成目標(biāo)句Je vais bien,如下圖所示。
在編碼器部分,我們了解到可以疊加
N
N
N個(gè)編碼器。同理,解碼器也可以有
N
N
N個(gè)疊加在一起。為簡化說明,我們設(shè)定
N
=
2
N=2
N=2。如下圖所示,一個(gè)解碼器的輸出會(huì)被作為輸入傳入下一個(gè)解碼器。我們還可以看到,編碼器將原句的特征值(編碼器的輸出)作為輸入傳給所有解碼器,而非只給第一個(gè)解碼器。因此,一個(gè)解碼器(第一個(gè)除外)將有兩個(gè)輸入:一個(gè)是來自前一個(gè)解碼器的輸出,另一個(gè)是編碼器輸出的特征值。
接下來,我們學(xué)習(xí)解碼器究竟是如何生成目標(biāo)句的。當(dāng)
t
=
1
t=1
t=1時(shí)(
t
t
t表示時(shí)間步),解碼器的輸入是<sos>
,這表示句子的開始。解碼器收到<sos>
作為輸入,生成目標(biāo)句中的第一個(gè)詞,即Je,如下圖
t
=
1
t=1
t=1所示。當(dāng)
t
=
2
t=2
t=2時(shí),解碼器使用當(dāng)前的輸入和在上一步(
t
?
1
t-1
t?1)生成的單詞,預(yù)測句子中的下一個(gè)單詞。在本例中,解碼器將<sos>
和Je
作為輸入,并試圖生成目標(biāo)句中的下一個(gè)單詞,如下圖
t
=
2
t=2
t=2所示。同理,解碼器在
t
=
3
t=3
t=3時(shí),將<sos>
、Je
和vais
作為輸入,并試圖生成句子中的下一個(gè)單詞,如下圖
t
=
3
t=3
t=3所示。在每一步中,解碼器都將上一步新生成的單詞與輸入的詞結(jié)合起來,并預(yù)測下一個(gè)單詞。因此,在最后一步(
t
=
4
t=4
t=4),解碼器將<sos>
、Je
、vais
和bien
作為輸入,并試圖生成句子中的下一個(gè)單詞,如下圖
t
=
4
t=4
t=4所示。
從上圖中可以看到,一旦生成表示句子結(jié)束的<eos>
標(biāo)記,就意味著解碼器已經(jīng)完成了對目標(biāo)句的生成工作。
在編碼器部分,我們將輸入轉(zhuǎn)換為嵌入矩陣,并將位置編碼添加到其中,然后將其作為輸入送入編碼器。同理,我們也不是將輸入直接送入解碼器,而是將其轉(zhuǎn)換為嵌入矩陣,為其添加位置編碼,然后再送入解碼器。如下圖所示,假設(shè)在時(shí)間步
t
=
2
t=2
t=2,我們將輸入轉(zhuǎn)換為嵌入(我們稱之為嵌入值輸出,因?yàn)檫@里計(jì)算的是解碼器在以前的步驟中生成的詞的嵌入),將位置編碼加入其中,然后將其送入解碼器。
一個(gè)解碼器模塊及其所有的組件如下圖所示。解碼器內(nèi)部有3個(gè)子層:
- 帶掩碼的多頭注意力層
- 多頭注意力層
- 前饋網(wǎng)絡(luò)層
與編碼器模塊相似,解碼器模塊也有多頭注意力層和前饋網(wǎng)絡(luò)層,但多了帶掩碼的多頭注意力層。
以英法翻譯任務(wù)為例,假設(shè)訓(xùn)練數(shù)據(jù)集樣本如下樣本:
原句(英語) | 目標(biāo)句(法語) |
---|---|
I am good. | Je vais bien. |
Good morning. | Bonjour. |
Thank you very much. | Merci beaucoup. |
上述數(shù)據(jù)集由兩部分組成:原句和目標(biāo)句。在上文中我們學(xué)習(xí)了解碼器在測試期間是如何在每個(gè)步驟中逐字預(yù)測目標(biāo)句的。在訓(xùn)練期間,由于有正確的目標(biāo)句,解碼器可以直接將整個(gè)目標(biāo)句稍作修改作為輸入。解碼器將輸入的<sos>
作為第一個(gè)標(biāo)記,并在每一步將下一個(gè)預(yù)測詞與輸入結(jié)合起來,以預(yù)測目標(biāo)句,直到遇到<eos>
標(biāo)記為止。因此,我們只需將<sos>
標(biāo)記添加到目標(biāo)句的開頭,再將整體作為輸入發(fā)送給解碼器。比如要把英語句子“I am good.”轉(zhuǎn)換成法語句子“Je vais bien.”。我們只需在目標(biāo)句的開頭加上<sos>
標(biāo)記,并將<sos>Je vais bien
作為輸入發(fā)送給解碼器。解碼器將預(yù)測輸出為Je vais bien<eos>
,如下圖所示。
我們不是將輸入直接送入解碼器,而是將其轉(zhuǎn)換為嵌入矩陣(輸出嵌入矩陣)并添加位置編碼,然后再送入解碼器。假設(shè)添加輸出嵌入矩陣和位置編碼后得到下圖所示的矩陣
X
X
X。
將矩陣
X
X
X送入解碼器。解碼器中的第一層是帶掩碼的多頭注意力層。這編碼器中的多頭注意力層的工作原理相似,但有一點(diǎn)不同,具體的原理可以參考《深入理解深度學(xué)習(xí)——注意力機(jī)制(Attention Mechanism):帶掩碼的多頭注意力(Masked Multi-head Attention)》中的帶掩碼的多頭注意力。最后,我們把注意力矩陣
M
M
M送到解碼器的下一個(gè)子層,也就是另一個(gè)多頭注意力層。這個(gè)多頭注意力層的設(shè)計(jì)可以參考文章《深入理解深度學(xué)習(xí)——Transformer:解碼器(Decoder)的多頭注意力層(Multi-headAttention)》,它會(huì)輸出一個(gè)注意力矩陣到后面的前饋網(wǎng)絡(luò)層。
解碼器的下一個(gè)子層是前饋網(wǎng)絡(luò)層,且解碼器的前饋網(wǎng)絡(luò)層的工作原理與我們在《深入理解深度學(xué)習(xí)——Transformer:編碼器(Encoder)部分》中學(xué)習(xí)的編碼器部分的前饋網(wǎng)絡(luò)層完全相同。同樣,疊加和歸一組件連接子層的輸入和輸出,如下圖所示。
一旦解碼器學(xué)習(xí)了目標(biāo)句的特征,我們就將頂層解碼器的輸出送入線性層和Softmax層,如下圖所示。
線性層將生成一個(gè)logit向量,其大小等于原句中的詞匯量。假設(shè)原句只由以下3個(gè)詞組成:
vocabulary = {bien, Je, vais}
那么,線性層返回的logit向量的大小將為3。接下來,使用Softmax函數(shù)將logit向量轉(zhuǎn)換成概率,然后解碼器將輸出具有高概率值的詞的索引值。讓我們通過一個(gè)示例來理解這一過程。假設(shè)解碼器的輸入詞是<sos>
和Je
?;谳斎朐~,解碼器需要預(yù)測目標(biāo)句中的下一個(gè)詞。然后,我們把頂層解碼器的輸出送入線性層。線性層生成logit向量,其大小等于原句中的詞匯量。假設(shè)線性層返回如下logit向量:
logit
=
[
45
,
40
,
49
]
\text{logit}=[45, 40, 49]
logit=[45,40,49],則Softmax函數(shù)應(yīng)用于logit向量,從而得到概率:
prob
=
[
0.018
,
0.000
,
0.981
]
\text{prob}=[0.018, 0.000, 0.981]
prob=[0.018,0.000,0.981]。從概率矩陣中,我們可以看出索引2的概率最高。所以,模型預(yù)測出的下一個(gè)詞位于詞匯表中索引2的位置。由于vais
這個(gè)詞位于索引2,因此解碼器預(yù)測目標(biāo)句中的下一個(gè)詞是vais
。通過這種方式,解碼器依次預(yù)測目標(biāo)句中的下一個(gè)詞。
上文就是解碼器的所有組件。下面,讓我們把它們放在一起,看看它們是如何作為一個(gè)整體工作的。下圖顯示了兩個(gè)解碼器。為了避免重復(fù),只有解碼器1被展開說明。
通過上圖,我們可以得出以下幾點(diǎn):文章來源:http://www.zghlxwxcb.cn/news/detail-495880.html
- 我們將解碼器的輸入轉(zhuǎn)換為嵌入矩陣,然后將位置編碼加入其中,并將其作為輸入送入底層的解碼器(解碼器1)。
- 解碼器收到輸入,并將其發(fā)送給帶掩碼的多頭注意力層,生成注意力矩陣 M M M。
- 將注意力矩陣 M M M和編碼器輸出的特征值 R R R作為多頭注意力層(編碼器—解碼器注意力層)的輸入,并再次輸出新的注意力矩陣。
- 把從多頭注意力層得到的注意力矩陣作為輸入,送入前饋網(wǎng)絡(luò)層。前饋網(wǎng)絡(luò)層將注意力矩陣作為輸入,并將解碼后的特征作為輸出。
- 我們把從解碼器1得到的輸出作為輸入,將其送入解碼器2。
- 解碼器2進(jìn)行同樣的處理,并輸出目標(biāo)句的特征。我們還可以將 N N N個(gè)解碼器層層堆疊起來。從最后的解碼器得到的輸出(解碼后的特征)將是目標(biāo)句的特征。
- 我們將目標(biāo)句的特征送入線性層和Softmax層,通過概率得到預(yù)測的詞并輸出。
參考文獻(xiàn):
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015
[2] Aston Zhang, Zack C. Lipton, Mu Li, Alex J. Smola. Dive Into Deep Learning[J]. arXiv preprint arXiv:2106.11342, 2021.
[3] 車萬翔, 崔一鳴, 郭江. 自然語言處理:基于預(yù)訓(xùn)練模型的方法[M]. 電子工業(yè)出版社, 2021.
[4] 邵浩, 劉一烽. 預(yù)訓(xùn)練語言模型[M]. 電子工業(yè)出版社, 2021.
[5] 何晗. 自然語言處理入門[M]. 人民郵電出版社, 2019
[6] Sudharsan Ravichandiran. BERT基礎(chǔ)教程:Transformer大模型實(shí)戰(zhàn)[M]. 人民郵電出版社, 2023
[7] 吳茂貴, 王紅星. 深入淺出Embedding:原理解析與應(yīng)用實(shí)戰(zhàn)[M]. 機(jī)械工業(yè)出版社, 2021.文章來源地址http://www.zghlxwxcb.cn/news/detail-495880.html
到了這里,關(guān)于深入理解深度學(xué)習(xí)——Transformer:解碼器(Decoder)部分的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!