[github上tensorflow官方文檔link]
[參考link]
[參考link]
主要參考14年和15年的兩篇論文:
發(fā)表年月 | 論文鏈接 |
---|---|
1409.0473 | NMT_BahdanauAttention |
1508.04025 | LuongAttention |
目前tensorflow也是提供對(duì)這兩種Attention機(jī)制的支持的:
tf.contrib.seq2seq.BahdanauAttention
tf.contrib.seq2seq.LuongAttention
-1- 固定長(zhǎng)度的Context Vector
早期的Encoder Decoder結(jié)構(gòu)痰滋、Seq2Seq結(jié)構(gòu)的模型,在Encoder(一層or多層RNN/LSTM/GRU)和Decoder(一層or多層RNN/LSTM/GRU)之間际跪,靠一個(gè)固定長(zhǎng)度的Context Vector來(lái)傳遞信息躏敢,相當(dāng)于Input Sentence經(jīng)過(guò)Encoder后被壓縮成一個(gè)固定長(zhǎng)度的Context Vector闷愤,然后這個(gè)壓縮向量再被Decoder解碼成Output Sentence。
固定長(zhǎng)度的Context Vector在完成對(duì)Input Sentence的壓縮功能時(shí)件余,不可避免的會(huì)產(chǎn)生一個(gè)問(wèn)題:對(duì)于較長(zhǎng)的讥脐、含有較多信息的句子,仍用定長(zhǎng)向量壓縮的話啼器,壓縮會(huì)造成更多的信息損失旬渠,導(dǎo)致模型表現(xiàn)不夠準(zhǔn)確。
-2- 引入Attention機(jī)制
??先入為主端壳,現(xiàn)在開(kāi)始給自己灌輸一個(gè)概念:Attention機(jī)制就是在Encoder告丢、Decoder的基礎(chǔ)上,加了一個(gè)Alignment_Model
or a()函數(shù)
or score()函數(shù)
更哄。而且這個(gè)Alignment_Model
是可以和Encoder芋齿、Decoder一起腥寇,通過(guò)反向傳播的方式j(luò)ointly訓(xùn)練的成翩。??
注意力機(jī)制通過(guò)利用原始的sentence信息,減少信息損失赦役。在Decoder解碼生成每個(gè)時(shí)刻的y時(shí)麻敌,不再僅僅利用最后時(shí)刻的隱藏狀態(tài)向量Context Vector,還會(huì)同時(shí)利用到x1掂摔、x2术羔、x3 ... 同時(shí)注意力機(jī)制還能使翻譯器zoom in or out(使用局部或全局信息)。
注意力機(jī)制聽(tīng)起來(lái)很高大上乙漓、很神秘级历,其實(shí)它的整個(gè)實(shí)現(xiàn)只需要一些參數(shù)和簡(jiǎn)單的數(shù)學(xué)運(yùn)算。
如上圖所示叭披,左邊藍(lán)色的代表Encoder寥殖,紅色的代表Decoder。Attention機(jī)制在傳統(tǒng)Encoder和Decoder的基礎(chǔ)上涩蜘,計(jì)算了更多的上下文向量context vector
嚼贡,對(duì)于Decoder中 每個(gè)
要生成的 word_y
,都會(huì)生成一個(gè)上下文向量context vector
同诫。
每個(gè)上下文向量context vector
都是由Input_Sentence的每個(gè)word_x
的信息加權(quán)求和得到的粤策,其中權(quán)重向量就是注意力向量,它代表生成Output_Sentence在此刻的word_y
時(shí)误窖,Input_Sentence的各個(gè)word_x
對(duì)該word_y
的重要程度叮盘。最后將上下文向量和此刻的y的信息進(jìn)行融合作為輸出秩贰。
構(gòu)建每個(gè)上下文向量context vector
過(guò)程很簡(jiǎn)單:
首先:
對(duì)于一個(gè)固定的target word_y
,我們把這個(gè)target state_y
跟所有的Encoder的state_x
進(jìn)行比較柔吼,這樣對(duì)每個(gè)state_x
得到了一個(gè)score;
然后:
使用softmax對(duì)這些score_x
進(jìn)行歸一化萍膛,這樣就得到了基于該target state_y
的條件概率分布。
最后:
對(duì)source的state_x
進(jìn)行加權(quán)求和嚷堡,得到上下文向量context_vector_y
蝗罗,將上下文向量與target state_y
融合作為最終的輸出。
-3- BahdanauAttention
-3.1- Bahdanau Attention模型結(jié)構(gòu)
Bahdanau Attention模型由一個(gè)Encoder蝌戒、一個(gè)Decoder和一個(gè)Alignment Model構(gòu)成串塑,其中:
Encoder
:
Encoder是一個(gè)雙向RNN的結(jié)構(gòu),由2
個(gè)RNN_cell以pair的形式構(gòu)成北苟。
為什么Encoder要使用雙向RNN的結(jié)構(gòu)呢桩匪?
對(duì)于Input Sentence的word_x_j,使用雙向RNN計(jì)算的隱狀態(tài)h_j友鼻,既包含了前向的語(yǔ)意信息傻昙,又包含了后向的語(yǔ)意信息;考慮到RNN的健忘性彩扔,隱狀態(tài)h_j更多表征了word_x_j附近幾個(gè)words(preceding_words & following_words)的信息妆档。
這樣的隱狀態(tài)h_j組成的序列,接下來(lái)被用于和Decoder和Alignment Model一起計(jì)算各Context_Vector_i虫碉。
Decoder
:
Decoder是一個(gè)單向RNN的結(jié)構(gòu)贾惦,由1
個(gè)RNN_cell構(gòu)成。
Alignment Model
:
Alignment Model 對(duì)齊模型敦捧,是一個(gè)前饋神經(jīng)網(wǎng)絡(luò)须板,訓(xùn)練時(shí)和模型中的其他組件一起jointly訓(xùn)練得到。Alignment Model可以通過(guò)損失函數(shù)的gradient反向傳播方式優(yōu)化兢卵。
-3.2- Bahdanau Attention模型中待訓(xùn)練的參數(shù)矩陣
Encoder(bi-RNN)模型參數(shù):
left_input_layer_matrix
:
left_hidden_layer_matrix
:
left_output_layer_matrix
:
right_input_layer_matrix
:
right_hidden_layer_matrix
:
right_output_layer_matrix
:
Decoder(RNN)模型參數(shù):
input_layer_matrix
:
hidden_layer_matrix
:
output_layer_matrix
:
Alignment Model 對(duì)齊模型的模型參數(shù):
Alignment Model a()
:
Alignment Model 對(duì)齊模型习瑰,是一個(gè)前饋神經(jīng)網(wǎng)絡(luò),訓(xùn)練時(shí)和模型中的其他組件一起jointly訓(xùn)練得到秽荤。Alignment Model可以通過(guò)損失函數(shù)的gradient反向傳播方式優(yōu)化甜奄。
-3.3- Bahdanau Attention模型的前向傳播(predict/calculate_error)及Attention_Prob的計(jì)算
-3.3.1- Output Sentence
:
, ... ,, ... ,
每一個(gè)都是output_dim的向量
-3.3.2- Input Sentence
:
, ... ,, ... ,
每一個(gè)都是imput_dim的向量
-3.3.3- Probality
's associated energy
(中間計(jì)算結(jié)果,非模型參數(shù)):
E
矩陣的每個(gè)元素都是一個(gè)標(biāo)量
-3.3.4- Probality
(中間計(jì)算結(jié)果王滤,非模型參數(shù)):
A
矩陣的每個(gè)元素都是一個(gè)標(biāo)量
-3.3.5- Context Vector
(中間計(jì)算結(jié)果贺嫂,非模型參數(shù)):
對(duì)標(biāo)的每個(gè)Context Vector 都是一個(gè) hidden_dim 的向量
-3.3.6- 輸出(這塊還不是很懂
)
BahdanauAttention對(duì)Encoder和Decoder的雙向的RNN的state拼接起來(lái)??
作為輸出???
-4- LuongAttention - Global
-4.1- Luong Attention - Global 模型結(jié)構(gòu)
Luong Attention模型由一個(gè)Encoder、一個(gè)Decoder和一個(gè)Alignment Model構(gòu)成雁乡,其中:
-4.2- Luong Attention - Global 模型中待訓(xùn)練的參數(shù)矩陣
Encoder(bi-RNN)模型參數(shù):...
Decoder(RNN)模型參數(shù):...
Alignment Model 對(duì)齊模型參數(shù)score()
or Wa
:
在Luong Attention - Global 模型中第喳,對(duì)齊模型score()
由參數(shù)矩陣Wa
構(gòu)成:
score()
有三種可選方式
(注意:上述表達(dá)式并不是參數(shù)分三個(gè)區(qū)間的三個(gè)表達(dá)式,而是三選一的關(guān)系)
-4.3- Luong Attention - Global 模型的前向傳播(predict/calculate_error)及Attention_Prob的計(jì)算
-4.3.1- Output Sentence
:
, ... ,, ... ,
每一個(gè)都是output_dim的向量
-4.3.2- Input Sentence
:
, ... ,, ... ,
每一個(gè)都是imput_dim的向量
-4.3.3- Probality
's associated energy
(中間計(jì)算結(jié)果踱稍,非模型參數(shù)):
E
矩陣的每個(gè)元素都是一個(gè)標(biāo)量
-4.3.4- Probality
(中間計(jì)算結(jié)果曲饱,非模型參數(shù)):
A
矩陣的每個(gè)元素都是一個(gè)標(biāo)量
-4.3.5- Context Vector
(中間計(jì)算結(jié)果悠抹,非模型參數(shù)):
對(duì)標(biāo)的每個(gè)Context Vector 都是一個(gè) hidden_dim 的向量
-5- LuongAttention - Local
-5.1- Luong Attention - Local 模型結(jié)構(gòu)
-5.2- Luong Attention - Local 模型中待訓(xùn)練的參數(shù)矩陣
Encoder(bi-RNN)模型參數(shù):...
Decoder(RNN)模型參數(shù):...
Alignment Model 對(duì)齊模型參數(shù)Wa
:
-5.3- Luong Attention - Local 模型的前向傳播(predict/calculate_error)及Attention_Prob的計(jì)算
-5.3.1- Output Sentence
:
, ... ,, ... ,
每一個(gè)都是output_dim的向量
-5.3.2- Input Sentence
:
, ... ,, ... ,
每一個(gè)都是imput_dim的向量
-5.3.3- Probality
(中間計(jì)算結(jié)果,非模型參數(shù)):
A
矩陣的每個(gè)元素都是一個(gè)標(biāo)量
-5.3.4- Context Vector
(中間計(jì)算結(jié)果扩淀,非模型參數(shù)):
對(duì)標(biāo)的每個(gè)Context Vector 都是一個(gè) hidden_dim 的向量