序列建模(三):BahdanauAttention & LuongAttention

[github上tensorflow官方文档link]
[参考link]
[参考link]

主要参考14年和15年的两篇论文:

发表年月 论文链接
1409.0473 NMT_BahdanauAttention
1508.04025 LuongAttention

目前tensorflow也是提供对这两种Attention机制的支持的:
tf.contrib.seq2seq.BahdanauAttention
tf.contrib.seq2seq.LuongAttention

-1- 固定长度的Context Vector

Encoder_Decoder.png
Seq2Seq.png

早期的Encoder Decoder结构、Seq2Seq结构的模型,在Encoder(一层or多层RNN/LSTM/GRU)和Decoder(一层or多层RNN/LSTM/GRU)之间,靠一个固定长度的Context Vector来传递信息,相当于Input Sentence经过Encoder后被压缩成一个固定长度的Context Vector,然后这个压缩向量再被Decoder解码成Output Sentence。

固定长度的Context Vector在完成对Input Sentence的压缩功能时,不可避免的会产生一个问题:对于较长的、含有较多信息的句子,仍用定长向量压缩的话,压缩会造成更多的信息损失,导致模型表现不够准确。

-2- 引入Attention机制

⚠️先入为主,现在开始给自己灌输一个概念:Attention机制就是在Encoder、Decoder的基础上,加了一个Alignment_Model or a()函数 or score()函数。而且这个Alignment_Model是可以和Encoder、Decoder一起,通过反向传播的方式jointly训练的。⚠️

注意力机制通过利用原始的sentence信息,减少信息损失。在Decoder解码生成每个时刻的y时,不再仅仅利用最后时刻的隐藏状态向量Context Vector,还会同时利用到x1、x2、x3 ... 同时注意力机制还能使翻译器zoom in or out(使用局部或全局信息)。

注意力机制听起来很高大上、很神秘,其实它的整个实现只需要一些参数和简单的数学运算。


Seq2Seq_Attention.png

如上图所示,左边蓝色的代表Encoder,红色的代表Decoder。Attention机制在传统Encoder和Decoder的基础上,计算了更多的上下文向量context vector,对于Decoder中 每个 要生成的 word_y ,都会生成一个上下文向量context vector

每个上下文向量context vector都是由Input_Sentence的每个word_x的信息加权求和得到的,其中权重向量就是注意力向量,它代表生成Output_Sentence在此刻的word_y时,Input_Sentence的各个word_x对该word_y的重要程度。最后将上下文向量和此刻的y的信息进行融合作为输出。

构建每个上下文向量context vector过程很简单:
首先:
对于一个固定的target word_y,我们把这个target state_y跟所有的Encoder的state_x进行比较,这样对每个state_x得到了一个score;
然后:
使用softmax对这些score_x进行归一化,这样就得到了基于该target state_y的条件概率分布。
最后:
对source的state_x进行加权求和,得到上下文向量context_vector_y,将上下文向量与target state_y融合作为最终的输出。

image.png

-3- BahdanauAttention

-3.1- Bahdanau Attention模型结构

Bahdanau Attention模型由一个Encoder、一个Decoder和一个Alignment Model构成,其中:
Encoder
Encoder是一个双向RNN的结构,由2个RNN_cell以pair的形式构成。
为什么Encoder要使用双向RNN的结构呢?
对于Input Sentence的word_x_j,使用双向RNN计算的隐状态h_j,既包含了前向的语意信息,又包含了后向的语意信息;考虑到RNN的健忘性,隐状态h_j更多表征了word_x_j附近几个words(preceding_words & following_words)的信息。
这样的隐状态h_j组成的序列,接下来被用于和Decoder和Alignment Model一起计算各Context_Vector_i。
Decoder
Decoder是一个单向RNN的结构,由1个RNN_cell构成。
Alignment Model
Alignment Model 对齐模型,是一个前馈神经网络,训练时和模型中的其他组件一起jointly训练得到。Alignment Model可以通过损失函数的gradient反向传播方式优化。

Bahdanau Attention 模型结构(未展示Alignment Model).png
-3.2- Bahdanau Attention模型中待训练的参数矩阵

Encoder(bi-RNN)模型参数:
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)模型参数:
input_layer_matrix
hidden_layer_matrix
output_layer_matrix

Alignment Model 对齐模型的模型参数:
Alignment Model a()
Alignment Model 对齐模型,是一个前馈神经网络,训练时和模型中的其他组件一起jointly训练得到。Alignment Model可以通过损失函数的gradient反向传播方式优化。

-3.3- Bahdanau Attention模型的前向传播(predict/calculate_error)及Attention_Prob的计算

-3.3.1- Output Sentence
word\_y_1, ... ,word\_y_j, ... ,word\_y_{Ty}
每一个word\_y_j都是output_dim的向量

-3.3.2- Input Sentence
word\_x_1, ... ,word\_x_j, ... ,word\_x_{Tx}
每一个word\_x_j都是imput_dim的向量

-3.3.3- Probality \alpha_{ij} 's associated energy \epsilon_{ij}(中间计算结果,非模型参数):
\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矩阵的每个元素\epsilon_{ij}都是一个标量

-3.3.4- Probality \alpha_{ij}(中间计算结果,非模型参数):
\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矩阵的每个元素\alpha_{ij}都是一个标量

-3.3.5- Context Vector c_i(中间计算结果,非模型参数):
c_i={\sum_{j=1}^{Tx} \alpha_{ij}h_j}
对标word\_y_i的每个Context Vector c_i都是一个 hidden_dim 的向量

-3.3.6- 输出(这块还不是很懂
BahdanauAttention对Encoder和Decoder的双向的RNN的state拼接起来??作为输出???

-4- LuongAttention - Global

-4.1- Luong Attention - Global 模型结构

Luong Attention模型由一个Encoder、一个Decoder和一个Alignment Model构成,其中:

Luong Attention - Global 模型结构.png
-4.2- Luong Attention - Global 模型中待训练的参数矩阵

Encoder(bi-RNN)模型参数:...
Decoder(RNN)模型参数:...
Alignment Model 对齐模型参数score() or Wa
在Luong Attention - Global 模型中,对齐模型score()由参数矩阵Wa构成:
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()有三种可选方式
(注意:上述表达式并不是参数分三个区间的三个表达式,而是三选一的关系)

-4.3- Luong Attention - Global 模型的前向传播(predict/calculate_error)及Attention_Prob的计算

-4.3.1- Output Sentence
word\_y_1, ... ,word\_y_j, ... ,word\_y_{Ty}
每一个word\_y_j都是output_dim的向量

-4.3.2- Input Sentence
word\_x_1, ... ,word\_x_j, ... ,word\_x_{Tx}
每一个word\_x_j都是imput_dim的向量

-4.3.3- Probality \alpha_{ij} 's associated energy \epsilon_{ij}(中间计算结果,非模型参数):
\epsilon_{ij}=score(s_{i-1},h_j)
E矩阵的每个元素\epsilon_{ij}都是一个标量

-4.3.4- Probality \alpha_{ij}(中间计算结果,非模型参数):
\alpha_{ij}={exp(\epsilon_{ij})\over{\sum_{k=1}^{Tx} exp(\epsilon_{ik})}}
A矩阵的每个元素\alpha_{ij}都是一个标量

-4.3.5- Context Vector c_i(中间计算结果,非模型参数):
c_i={\sum_{j=1}^{Tx} \alpha_{ij}h_j}
对标word\_y_i的每个Context Vector c_i都是一个 hidden_dim 的向量

-5- LuongAttention - Local

-5.1- Luong Attention - Local 模型结构
Luong Attention - Local 模型结构.png
-5.2- Luong Attention - Local 模型中待训练的参数矩阵

Encoder(bi-RNN)模型参数:...
Decoder(RNN)模型参数:...
Alignment Model 对齐模型参数Wa

-5.3- Luong Attention - Local 模型的前向传播(predict/calculate_error)及Attention_Prob的计算

-5.3.1- Output Sentence
word\_y_1, ... ,word\_y_j, ... ,word\_y_{Ty}
每一个word\_y_j都是output_dim的向量

-5.3.2- Input Sentence
word\_x_1, ... ,word\_x_j, ... ,word\_x_{Tx}
每一个word\_x_j都是imput_dim的向量

-5.3.3- Probality \alpha_{ij}(中间计算结果,非模型参数):
\alpha_{ij}=softmax(W_a s_{i-1})
A矩阵的每个元素\alpha_{ij}都是一个标量

-5.3.4- Context Vector c_i(中间计算结果,非模型参数):
c_i={\sum_{j=1}^{Tx} \alpha_{ij}h_j}
对标word\_y_i的每个Context Vector c_i都是一个 hidden_dim 的向量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容