Tensorflow学习——Attention

tf.contrib.seq2seq.LuongAttention

init(
num_units,
memory,
memory_sequence_length=None,
scale=False,
probability_fn=None,
score_mask_value=float('-inf'),
name='LuongAttention'
)

参数 含义
num_units 在encoder阶段产生了多个特征向量,每个特征向量的大小
memory 一个batch里,encoder阶段产生的所有的特征向量,在RNNencoder中,维数为[batch_size, max_time, num_units],即encoder阶段产生了max_time个大小为num_units的特征向量
memory_sequence_length 记录memory中 的特征向量的长度,维数是[batch_size,],令memory中超过memory_sequence_length的值为0
scale 是否进行scale
probability_fn 将打分函数直接转成概率,默认的是softmax
score_mask_value 在将分数传到probability_fn函数之前的掩码值,在有Probability_fn函数的情况下才用

原理

论文为Effective Approaches to Attention-based Neural Machine Translation.

论文中提出了两种模式:Global Attention和Local Attention,Global Attention在encoder产生的所有信息中进行Attention操作,Local Attention在部分信息中进行Attention操作。

Global Attention

Tensorflow学习——Attention_第1张图片

针对encoder产生的时序特征向量hs,有一个与其长度相同的对齐向量at,at 相当于在t时刻对hs 的权重向量,作用就是在t时刻找到hs中对deocder有影响的部分, at 由decoder当前隐藏状态和hs 得到:

文中使用了三种打分函数:


屏幕快照 2017-12-28 下午5.00.57.png

最后一种将decoder当前隐藏状态hths直接相连进行打分,通过分数算出权重与hs想乘得到上下文向量ct,通过ctht得到Attention隐藏状态h ̃t


利用隐藏状态求出概览分布:

整体的过程为:ht →at →ct →h ̃t

Local Attention

gloabl attention有一个缺点是在每一个target word生成时都需要考虑所有encdoer产生的特征信息,代价较高且对于长序列可能会有影响。于是用local attention来解决这个问题,local attention选取特征信息中的一部分,相比于global更容易训练。
大致步骤为在每个时刻t先产生一个对其位置ptct通过[pt−D,pt+D]中的信息求得。
文中尝试了两种方法:local-p和local-m。

local-m:

对齐方法为pt = t,对齐函数于global中的相同

local-p:

pt为中心生成一个高斯分布,对齐函数为:

tf.contrib.seq2seq.BahdanauAttention

init(
num_units,
memory,
memory_sequence_length=None,
normalize=False,
probability_fn=None,
score_mask_value=float('-inf'),
name='BahdanauAttention'
)

参数 含义
normalize 是否进行weight normalization

原理

参照论文Neural Machine Translation by Jointly Learning to Align and Translate.
Luong在论文中提到了BahdanauAttention的流程为 ht−1 → at → ct → ht。

Tensorflow学习——Attention_第2张图片
BahdanauAttention

具体的公式如下:
条件概率为:p(yi|y1, . . . , yi−1, x) = g(yi−1, si, ci)
其中si代表i时刻rnn的隐藏状态,ci为上下文向量。
ci是根据encoder的输出特征向量(h1 , · · · , hTx )加权得来的,每个时刻的ci都不一样,ci为:


每个 αij由下面的公式计算得出:

其中: eij =a(si−1,hj),a就相当于对齐函数,在文中作者用一个前馈神经网络实现的。

你可能感兴趣的:(Tensorflow学习——Attention)