簡(jiǎn)介
Transformer是谷歌提出的只基于Attention的網(wǎng)絡(luò)模型,它也是一種Encoder-Decoder的網(wǎng)絡(luò)結(jié)構(gòu),但是沒(méi)有使用任何CNN或者RNN的結(jié)構(gòu),而是全靠Attention,so Attention is All You Need.這樣做有什么好處呢?傳統(tǒng)的RNN系模型(LSTM,GRU等)都是序列模型,每一步都需要上一步的結(jié)果,所以無(wú)法并行化.而CNN系雖然可以并行,但是只能捕捉到局部信息,無(wú)法考慮到上下文關(guān)系的語(yǔ)義信息.所以google提出了一種新的架構(gòu),只用Attention.它不僅可以實(shí)現(xiàn)并行化,還可以一步得到全局信息.
Attention
Attention的相關(guān)知識(shí)可以參考我另一篇文章:Attention注意力機(jī)制介紹
Google在Transformer中使用的是乘法Attention結(jié)構(gòu)圖如下
然后經(jīng)過(guò)堆疊形成Multi-Head Attention.什么是Multi-Head Attention?這個(gè)是Google提出的新概念,如圖所示,就是把Q,K,V通過(guò)參數(shù)矩陣映射一下卵牍,然后再做Attention,把這個(gè)過(guò)程重復(fù)h次,結(jié)果拼接起來(lái).
更準(zhǔn)確來(lái)說(shuō),Google所用的是Self Multi-Head Attention,也就是說(shuō)Multi-Head中每個(gè)Attention都是self-attention.
下面是Transformer的模型結(jié)構(gòu)圖:
Position Embedding
模型的第一部分是Position Embedding,使用Attention的弊端就是會(huì)丟失文本序列的語(yǔ)序信息,對(duì)于NLP中的任務(wù)來(lái)說(shuō),順序是很重要的信息,它代表著局部甚至是全局的結(jié)構(gòu),所以為了彌補(bǔ)這一缺陷,google在文本編碼部分使用了位置編碼,將文本的語(yǔ)序信息融入到文本向量中.
Encoder
接下來(lái)就是Encoder部分,輸入是經(jīng)過(guò)Position Embedding后的文本表示,encoder由N層相同的層組成,每一層分別由兩部分組成:第一部分是 multi-head self-attention,第二部分是position-wise feed-forward network,是一個(gè)全連接層,包含兩個(gè)線性變換和一個(gè)非線性函數(shù)(實(shí)際上就是ReLU),如圖5:
Decoder
和 encoder 類似,decoder 也是由N個(gè)相同的層組成,每一個(gè)層包括以下3個(gè)部分:第一個(gè)部分是 multi-head self-attention mechanism,第二部分是 multi-head context-attention mechanism,第三部分是一個(gè) position-wise feed-forward network.
同時(shí),在Encoder和Decoder的每個(gè)部分后面都會(huì)連接一個(gè)Layer normalization.
Layer normalization
Normalization有很多種,但是它們都有一個(gè)共同的目的,那就是把輸入轉(zhuǎn)化成均值為0方差為1的數(shù)據(jù).我們?cè)诎褦?shù)據(jù)送入激活函數(shù)之前進(jìn)行normalization(歸一化),因?yàn)槲覀儾幌M斎霐?shù)據(jù)落在激活函數(shù)的飽和區(qū).我們可能會(huì)對(duì)輸入數(shù)據(jù)進(jìn)行歸一化,但是經(jīng)過(guò)該網(wǎng)絡(luò)層的作用后,我們的數(shù)據(jù)已經(jīng)不再是歸一化的了.隨著這種情況的發(fā)展,數(shù)據(jù)的偏差越來(lái)越大,我的反向傳播需要考慮到這些大的偏差,這就迫使我們只能使用較小的學(xué)習(xí)率來(lái)防止梯度消失或者梯度爆炸.
Batch normalization和Layer normalization的區(qū)別是,BN是對(duì)一批數(shù)據(jù)進(jìn)行歸一化,而LN是對(duì)每一個(gè)樣本進(jìn)行歸一化.
最后將上述模塊組合到一起就是Transformer.
本文是作者的學(xué)習(xí)筆記,所以有些知識(shí)寫(xiě)的不是很詳細(xì),可以參考其他大佬文章:
蘇神:https://kexue.fm/archives/4765
簡(jiǎn)楓:https://zhuanlan.zhihu.com/p/47812375