序列建模(三):BahdanauAttention & LuongAttention

[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.png
Seq2Seq.png

早期的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)算。


Seq2Seq_Attention.png

如上圖所示叭披,左邊藍(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融合作為最終的輸出。

image.png

-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)化兢卵。

Bahdanau Attention 模型結(jié)構(gòu)(未展示Alignment Model).png
-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
word\_y_1, ... ,word\_y_j, ... ,word\_y_{Ty}
每一個(gè)word\_y_j都是output_dim的向量

-3.3.2- Input Sentence
word\_x_1, ... ,word\_x_j, ... ,word\_x_{Tx}
每一個(gè)word\_x_j都是imput_dim的向量

-3.3.3- Probality \alpha_{ij} 's associated energy \epsilon_{ij}(中間計(jì)算結(jié)果,非模型參數(shù)):
\epsilon_{ij}=a(s_{i-1},h_j)
\begin{bmatrix} \epsilon_{11} & {\cdots} & \epsilon_{i1} & {\cdots} & \epsilon_{Ty1} \\ \ {\vdots} & { } & {\vdots} & { } & {\vdots} \\ \epsilon_{1j} & {\cdots} & \epsilon_{ij} & {\cdots} & \epsilon_{Tyj} \\ \ {\vdots} & { } & {\vdots} & { } & {\vdots} \\ \epsilon_{1Tx} & {\cdots} & \epsilon_{iTx} & {\cdots} & \epsilon_{TyTx} \\ \end{bmatrix}
E矩陣的每個(gè)元素\epsilon_{ij}都是一個(gè)標(biāo)量

-3.3.4- Probality \alpha_{ij}(中間計(jì)算結(jié)果王滤,非模型參數(shù)):
\alpha_{ij}={exp(\epsilon_{ij})\over{\sum_{k=1}^{Tx} exp(\epsilon_{ik})}}
\begin{bmatrix} \alpha_{11} & {...} & \alpha_{i1} & {...} & \alpha_{Ty1} \\ \ {\vdots} & { } & {\vdots} & { } & {\vdots} \\ \alpha_{1j} & {\cdots} & \alpha_{ij} & {\cdots} & \alpha_{Tyj} \\ \ {\vdots} & { } & {\vdots} & { } & {\vdots} \\ \alpha_{1Tx} & {\cdots} & \alpha_{iTx} & {\cdots} & \alpha_{TyTx} \\ \end{bmatrix}
A矩陣的每個(gè)元素\alpha_{ij}都是一個(gè)標(biāo)量

-3.3.5- Context Vector c_i(中間計(jì)算結(jié)果贺嫂,非模型參數(shù)):
c_i={\sum_{j=1}^{Tx} \alpha_{ij}h_j}
對(duì)標(biāo)word\_y_i的每個(gè)Context Vector c_i都是一個(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)成雁乡,其中:

Luong Attention - Global 模型結(jié)構(gòu).png
-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(s_{i-1},h_j) \begin{cases} s_{i-1}^T h_j &dot \\ s_{i-1}^T W_a h_j &general \\ v_a^T tanh(W_a[s_{i-1};h_j]) &concat \\ \end{cases}
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
word\_y_1, ... ,word\_y_j, ... ,word\_y_{Ty}
每一個(gè)word\_y_j都是output_dim的向量

-4.3.2- Input Sentence
word\_x_1, ... ,word\_x_j, ... ,word\_x_{Tx}
每一個(gè)word\_x_j都是imput_dim的向量

-4.3.3- Probality \alpha_{ij} 's associated energy \epsilon_{ij}(中間計(jì)算結(jié)果踱稍,非模型參數(shù)):
\epsilon_{ij}=score(s_{i-1},h_j)
E矩陣的每個(gè)元素\epsilon_{ij}都是一個(gè)標(biāo)量

-4.3.4- Probality \alpha_{ij}(中間計(jì)算結(jié)果曲饱,非模型參數(shù)):
\alpha_{ij}={exp(\epsilon_{ij})\over{\sum_{k=1}^{Tx} exp(\epsilon_{ik})}}
A矩陣的每個(gè)元素\alpha_{ij}都是一個(gè)標(biāo)量

-4.3.5- Context Vector c_i(中間計(jì)算結(jié)果悠抹,非模型參數(shù)):
c_i={\sum_{j=1}^{Tx} \alpha_{ij}h_j}
對(duì)標(biāo)word\_y_i的每個(gè)Context Vector c_i都是一個(gè) hidden_dim 的向量

-5- LuongAttention - Local

-5.1- Luong Attention - Local 模型結(jié)構(gòu)
Luong Attention - Local 模型結(jié)構(gòu).png
-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
word\_y_1, ... ,word\_y_j, ... ,word\_y_{Ty}
每一個(gè)word\_y_j都是output_dim的向量

-5.3.2- Input Sentence
word\_x_1, ... ,word\_x_j, ... ,word\_x_{Tx}
每一個(gè)word\_x_j都是imput_dim的向量

-5.3.3- Probality \alpha_{ij}(中間計(jì)算結(jié)果,非模型參數(shù)):
\alpha_{ij}=softmax(W_a s_{i-1})
A矩陣的每個(gè)元素\alpha_{ij}都是一個(gè)標(biāo)量

-5.3.4- Context Vector c_i(中間計(jì)算結(jié)果扩淀,非模型參數(shù)):
c_i={\sum_{j=1}^{Tx} \alpha_{ij}h_j}
對(duì)標(biāo)word\_y_i的每個(gè)Context Vector c_i都是一個(gè) hidden_dim 的向量

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末楔敌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子驻谆,更是在濱河造成了極大的恐慌卵凑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胜臊,死亡現(xiàn)場(chǎng)離奇詭異勺卢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)象对,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門黑忱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人勒魔,你說(shuō)我怎么就攤上這事甫煞。” “怎么了冠绢?”我有些...
    開(kāi)封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵抚吠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我唐全,道長(zhǎng)埃跷,這世上最難降的妖魔是什么蕊玷? 我笑而不...
    開(kāi)封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任邮利,我火速辦了婚禮,結(jié)果婚禮上垃帅,老公的妹妹穿的比我還像新娘延届。我一直安慰自己,他們只是感情好贸诚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布方庭。 她就那樣靜靜地躺著,像睡著了一般酱固。 火紅的嫁衣襯著肌膚如雪械念。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天运悲,我揣著相機(jī)與錄音龄减,去河邊找鬼。 笑死班眯,一個(gè)胖子當(dāng)著我的面吹牛希停,可吹牛的內(nèi)容都是我干的烁巫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼宠能,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亚隙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起违崇,我...
    開(kāi)封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阿弃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后羞延,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體恤浪,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年肴楷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了水由。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赛蔫,死狀恐怖砂客,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呵恢,我是刑警寧澤鞠值,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站渗钉,受9級(jí)特大地震影響彤恶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳄橘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一声离、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘫怜,春花似錦术徊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至暗挑,卻和暖如春笋除,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炸裆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工垃它, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓嗤瞎,卻偏偏與公主長(zhǎng)得像墙歪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贝奇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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