BahdanauAttention与LuongAttention注意力机制简介

在使用tensorflow时发现其提供了两种Attention Mechanisms(注意力机制),如下

The two basic attention mechanisms are:

那么这两种注意力机制有何异同呢?下面我们通过两个方面介绍,首先简单回顾下注意力机制,然后再对这两种经典的注意力机制进行比较。

一、注意力机制回顾

简单来说,注意力本质上就是一个经过softmax层输出的向量。

在早期机器翻译应用中,神经网络结构一般如下图,是一个RNN的Encoder-Decoder模型。左边是Encoder,代表输入的sentence。右边代表Decoder,是根据输入sentence对应的翻译。Encoder会通过RNN将最后一个step的隐藏状态向量c作为输出,Deocder利用向量c进行翻译。这样做有一个缺点,翻译时过分依赖于这个将整个sentence压缩成固定输入的向量。输入的sentence有可能包含上百个单词,这么做不可避免会造成信息的丢失,翻译结果也无法准确了。

注意力机制的引入就是为了解决此问题,注意力机制使得机器翻译中利用原始的sentence信息,减少信息损失。在解码层,生成每个时刻的y,都会利用到x1,x2,x3....,而不再仅仅利用最后时刻的隐藏状态向量。同时注意力机制还能使翻译器zoom in or out(使用局部或全局信息)。

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

在基本的Encoder-Decoder模型中,注意力机制在Encoder和Decoder加入了上下文向量context vector,如上图所示,左边蓝色的代表Encoder,红色的代表Decoder。对于Decoder中每个要生成的y,都会生成一个上下文向量。这个上下文向量是由每个输入的words的信息加权求和得到的,其中权重向量就是注意力向量,它代表在此刻生成y时输入的单词的重要程度。最后将上下文向量和此刻的y的信息进行融合作为输出。

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

具体流程的数学表达如下:

为了理解这个看起来有些复杂的数学公式,我们需要记住三点:

  1. 在解码时,对于每个输出的word都需要计算上下文向量。所以,我们会得到一个n\ast m的2D矩阵, n代表source word数量,m代表target word数量
  2. 我们可以通过context vector,target word,attention function f计算attention vevtor
  3. attention mechanism是可以训练的。

二、BahdanauAttention与LuongAttention

2.1 BahdanauAttention

BahdanauAttention是Bahdanau在论文NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE中提出的,整体Attention结构如下图:

1)第i个target word上下文向量c_i{}会根据每个source word的隐向量h_j{}加权求和得到:

2)对于每个 h_j{}a_{ij}计算如下

其中

e_{ij}是对齐模型,代表位置j的输入和位置i的输出匹配程度的分数,这个分数基于RNN的 i-1 位置的隐含状态s_{i-1}和 j 位置的h_{j}计算得到。

2.2 LuongAttention

LuongAttention是Luong在论文Effective Approaches to Attention-based Neural Machine Translation中提出的。整体结构如下

 与BahdanauAttention整体结构类似,LuongAttention对原结构进行了一些调整,其中Attention向量计算方法如下

 其中与BahdanauAttention机制有以下几点改进:

  1. BahdanauAttention对Encoder和Decoder的双向的RNN的state拼接起来作为输出,LuongAttention仅使用最上层的RNN输出
  2. BahdanauAttention的计算流程为 ht−1 → at → ct → ht,它使用前一个位置t-1的state计算t时刻的ht。LuongAttention计算流程为  ht → at → ct → h˜t 使用t位置的state当前位置的ht
  3. BahdanauAttention只在concat对齐函数上进行了实验,LuongAttention在多种对齐函数进行了实验,下图为LuongAttention设计的三种对齐函数

2.3 总结 

BahdanauAttention与LuongAttention两种注意力机制大体结构类似,都是基于第一节中的attention框架设计,主要的不同点就是在对齐函数上,在计算第 i个位置的score,前者是需要使用 s_{i-1}h_{j} 来进行计算,后者使用s_{i}h_{j}计算,这么来看还是后者直观上更合理些,逻辑上也更顺滑。两种机制在不同任务上的性能貌似差距也不是很大,具体的细节还待进一步做实验比较。

  • 38
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Attention 机制是一种用于序列到序列模型的技术,它使得模型可以关注输入序列中与当前输出相关的部分。BahdanauLuong 是两种常用的 Attention 机制,它们的区别主要在于计算注意力分配时所使用的方法。 Bahdanau Attention Bahdanau Attention 是一种基于内容的注意力机制,它将注意力分配看作是一种给定上下文向量和一组查询向量的加权求和。在 Bahdanau Attention 中,上下文向量是由编码器输出的所有隐藏状态的加权和,而查询向量则是由解码器当前隐藏状态计算得出的。 具体来说,Bahdanau Attention 的计算过程如下: 1. 对于解码器当前隐藏状态 $s_t$,计算一组查询向量 $q_t$。 2. 对于编码器的所有隐藏状态 $h_i$,计算其对应的注意力得分 $e_{ti}$。 3. 将注意力得分 $e_{ti}$ 通过 softmax 函数转化为注意力权重 $a_{ti}$。 4. 将编码器所有隐藏状态 $h_i$ 与注意力权重 $a_{ti}$ 做加权求和,得到当前时间步的上下文向量 $c_t$。 Luong Attention Luong Attention 是一种基于位置的注意力机制,它将注意力分配看作是一种根据解码器当前隐藏状态和编码器所有隐藏状态之间的相似度计算得出的权重分布。在 Luong Attention 中,有三种不同的计算方式:点乘注意力、拼接注意力和缩放点积注意力。 具体来说,Luong Attention 的计算过程如下: 1. 对于解码器当前隐藏状态 $s_t$,计算一组查询向量 $q_t$。 2. 对于编码器的所有隐藏状态 $h_i$,计算其对应的特征向量 $z_i$。 3. 根据解码器当前隐藏状态 $s_t$ 和编码器的所有特征向量 $z_i$,计算相似度得分 $e_{ti}$。 4. 根据相似度得分 $e_{ti}$,使用 softmax 函数计算注意力权重 $a_{ti}$。 5. 将编码器所有隐藏状态 $h_i$ 与注意力权重 $a_{ti}$ 做加权求和,得到当前时间步的上下文向量 $c_t$。 简而言之,Bahdanau Attention 是基于内容的注意力机制,而 Luong Attention 则是基于位置的注意力机制,它们在计算注意力分配时所使用的方法有所不同。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值