浅谈Attention-based Model【原理篇】


转载请标明出处:http://blog.csdn.net/wuzqchom/article/details/75792501

0. 前言

看了台大的李宏毅老师关于Attention部分的内容,这一部分讲得挺好的(李宏毅老师其它部分的内容也不错,比较幽默,安利一下),记录一下,本博客的大部分内容据来自李宏毅老师的授课资料:Attention-based Model。如发现有误,望不吝赐教。

1. 为什么需要Attention

最基本的seq2seq模型包含一个encoder和一个decoder,通常的做法是将一个输入的句子编码成一个固定大小的state,然后作为decoder的初始状态(当然也可以作为每一时刻的输入),但这样的一个状态对于decoder中的所有时刻都是一样的。
attention即为注意力,人脑在对于的不同部分的注意力是不同的。需要attention的原因是非常直观的,比如,我们期末考试的时候,我们需要老师划重点,划重点的目的就是为了尽量将我们的attention放在这部分的内容上,以期用最少的付出获取尽可能高的分数;再比如我们到一个新的班级,吸引我们attention的是不是颜值比较高的人?普通的模型可以看成所有部分的attention都是一样的,而这里的attention-based model对于不同的部分,重要的程度则不同。

2. Attention-based Model是什么

Attention-based Model其实就是一个相似性的度量,当前的输入与目标状态越相似,那么在当前的输入的权重就会越大,说明当前的输出越依赖于当前的输入。严格来说,Attention并算不上是一种新的model,而仅仅是在以往的模型中加入attention的思想,所以Attention-based Model或者Attention Mechanism是比较合理的叫法,而非Attention Model。

没有attention机制的encoder-decoder结构通常把encoder的最后一个状态作为decoder的输入(可能作为初始化,也可能作为每一时刻的输入),但是encoder的state毕竟是有限的,存储不了太多的信息,对于decoder过程,每一个步骤都和之前的输入都没有关系了,只与这个传入的state有关。attention机制的引入之后,decoder根据时刻的不同,让每一时刻的输入都有所不同。

再引用tensorflow源码attention_decoder()函数关于attention的注释:

“In this context ‘attention’ means that, during decoding, the RNN can look up information in the additional tensor attention_states, and it does this by focusing on a few entries from the tensor.”

3. Attention

对于机器翻译来说,比如我们翻译“机器学习”,在翻译“machine”的时候,我们希望模型更加关注的是“机器”而不是“学习”。那么,就从这个例子开始说吧(以下图片均来自上述课程链接的slides)

这里写图片描述

刚才说了,attention其实就是一个当前的输入与输出的匹配度。在上图中,即为 h 1 h^1 h1 z 0 z^0 z0的匹配度( h 1 h^1 h1为当前时刻RNN的隐层输出向量,而不是原始输入的词向量 z 0 z^0 z0初始化向量,如rnn中的initial memory),其中的match为计算这两个向量的匹配度的模块,出来的 α 0 1 \alpha^1_0 α01即为由match算出来的相似度。好了,基本上这个就是attention-based model 的attention部分了。那么,match什么呢?

对于“match”, 理论上任何可以计算两个向量的相似度都可以,比如:

  • 余弦相似度
  • 一个简单的 神经网络,输入为 h h h w w w,输出为 α \alpha α
  • 或者矩阵变换 α = h T W z \alpha=h^TWz α=hTWz (Multiplicative attention,Luong et al., 2015)

现在我们已经由match模块算出了当前输入输出的匹配度,然后我们需要计算当前的输出(实际为decoder端的隐状态)和每一个输入做一次match计算,分别可以得到当前的输出和所有输入的匹配度,由于计算出来并没有归一化,所以我们使用softmax,使其输出时所有权重之和为1。那么和每一个输入的权重都有了(由于下一个输出为“machine”,我们希望第一个权重和第二个权权重越大越好),那么我们可以计算出其加权向量和,作为下一次的输入。

这里有一个问题:就是如果match用后面的两种,那么参数应该怎么学呢?

如下图所示:

这里写图片描述

那么再算出了 c 0 c^0 c0之后,我们就把这个向量作为rnn的输入(如果我们decoder用的是RNN的话),然后d第一个时间点的输出的编码 z 1 z^1 z1 c 0 c^0 c0和初始状态 z 0 z^0 z0共同决定。我们计算得到 z 1 z^1 z1之后,替换之前的 z 0 z^0 z0再和每一个输入的encoder的vector计算匹配度,然后softmax,计算向量加权,作为第二时刻的输入…如此循环直至结束。

这里写图片描述

再看看Grammar as a Foreign Language一文当中的公式:

这里写图片描述

上面的符号表示和前面描述的不太一样,经统一符号的公式如下:

u t i = v T t a n h ( W 1 h i + W 2 Z t ) u_t^{i}=v^{T}tanh(W_1h^{i}+W_2Z^{t}) uti=vTtanh(W1hi+W2Zt)

α t i = s o f t m a x ( u t i ) \alpha_t^{i}=softmax(u_t^{i}) αti=softmax(uti)

c t = ∑ i α t i h i c^{t}=\sum_i\alpha_{t}^{i}h^i ct=iαtihi

得到 c t c^t ct之后,就可以作为第t时刻RNN的input,而 Z t Z^t Zt可以作为t时刻RNN的隐状态的输入,这样就能够得到新的隐状态 Z t + 1 Z^{t+1} Zt+1,如此循环,直到遇到停止符为止。

上式 v T v^T vT为一个向量, u t i u_{t}^{i} uti即为t时刻的decoder隐状态向量和第i个输入的相似度(未归一化)。
在第一个式子当中的 t a n h tanh tanh里面的内容,tensorflow对于第一部分的实现是采用卷积的方式实现,而第二部分使用的是线性映射函数linear实现。
v T v^T vT向量的长度即为attention_vec_size,tensorflow 中直接把输入向量的长度设置为attention向量的长度,你要设置其他的值也可以,这里比较奇怪,tensorflow没有将其作为函数的参数,难道设成和输入的向量相同的效果更好?(有知情者也烦请告知)

4. 遗留问题

本来到这就结束了,但是仔细想想,其实还有一个地方有所疑问。就是加入match是一个简单地神经网络或者一个矩阵,神经网络的权值和矩阵里面的值怎么来?
其实这些都是可以BP的时候就可以自动学到的。比如我们明确输出是什么,在第一时刻的时候,那就会调整 z 0 z^0 z0 c 0 c^0 c0的值,进而就会调整所有的 α \alpha α值,之前说过 α \alpha α是match的输出,如果match是后两种的话,就会进而调整match中的参数。

文本处理方面的注意力机制是在神经机器翻译首先提出,附文献:
DzmitryBahdanau,KyunghyunCho,andYoshuaBengio.Neuralmachinetranslationbyjointlylearning to align and translate. arXiv preprint arXiv:1409.0473, 2014.

更多内容:浅谈Attention-based Model【源码篇】

  • 35
    点赞
  • 184
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答1: "attention-based"的意思是基于注意力的,指的是一种基于人类注意力模式的算法或模型。例如,注意力机制可以用于自然语言处理中的机器翻译、文本摘要等任务。在这些任务中,模型将注意力集中在输入数据的不同部分,以便更好地理解和处理数据。 ### 回答2: 注意力 在机器学习中,Attention-based即“基于注意力的”,主要指的是一种在深度学习中基于注意力机制的模型。注意力机制的思想来源于人类对外界信息的处理过程,就像我们在处理一些任务时会有所关注和聚焦,忽略一些无关的信息,集中精力去处理关键信息一样。 在深度学习中,Attention-based模型主要用于处理一些序列数据,例如自然语言生成、机器翻译、语音识别等任务。其主要思路是,在每个时间步中,通过计算输入序列中每个位置与当前时间步的关联程度,来决定该位置对当前输出的贡献程度。这样的处理方式可以使模型更好地处理长序列数据,从而提高其性能。 在自然语言处理中,Attention-based模型的应用非常广泛。例如,在机器翻译中,该模型可以根据当前要翻译的句子与其它语言中的句子的对应关系,来决定每个位置对最终翻译结果的影响程度,从而得到更加准确的翻译结果。在文本摘要方面,该模型也可以用于决定每个句子中的关键信息,从而生成更加准确的摘要内容。 总的来说,Attention-based模型是一种非常有用的处理序列数据的方法,其应用范围广泛,并且目前正在逐步得到应用和改进。 ### 回答3: Attention-based,即基于注意力的,是近年来人工智能领域内的一个热门研究方向。它在机器学习和自然语言处理等领域中有着广泛的应用。 在自然语言处理中,attention-based技术是一种从输入文本中学习到其最相关并最重要的部分的一种方法。该方法涉及到一种被称为“注意力机制”的技术,它可以为每个输入单词或输入序列分配一个注意力得分,以指示模型应该关注哪些部分。 通过Attention-based机制可以提高机器翻译、文本摘要、语言生成、序列标注等NLP任务的性能。例如,在翻译英语到德语的过程中,Attention-based机制先将英语句子的每个单词与德语句子的每个单词进行对齐,然后给每个源语言的单词赋予一个权重,以便决定哪些单词会得到优先翻译。 在图像识别领域,Attention-based技术也被广泛使用。当给深度学习模型提供图像和标签时,Attention机制可以自动识别图像的重要部分,帮助模型准确地学习图像和标签之间的关系。 总的来说,Attention-based技术的出现,使得机器学习和自然语言处理等领域的效率和准确性得到了显著提升,同时也提高了模型的可解释性和解释性,让我们对这些黑盒子模型的理解更深入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值