Attention based models

2020-05-18 16:27:00 浏览数 (1)

Attention mechanism在深度学习中就像是万金油般的存在,涉及领域广泛,深受练丹师的喜爱。

推荐一篇综述 -> An Attentive Survey of Attention Models

我会大体介绍attention发展过程中几篇经典的paper,从机器翻译领域萌芽再到各个领域遍地开花.

Neural Machine Translation by Jointly Learning to Align and Translate 这是attention的经典之作,最初是针对机器翻译领域,在传统的encoder-decoder 结构中会将整个输入语句(source) 编码成一个固定长度的向量作为context 帮助decoder解码。无论输入语句多长,都被压缩为一个固定长度的向量,可能会丢失source中很多重要的信息,原文中用“squash”来形容这个过程,可想这种方式的暴力。

原文表述

而在这篇文章上,作者借鉴了人类“注意力”,使得在decoder中解码t时刻target的状态时,只对source中部分片段而不是全部,而注意哪些片段则是由模型、下游任务所决定。对于需要格外“注意”的赋予大权重,对于可有可无的赋予小权重(嵌入在模型中,是可微的)

从上图可以看出,在decoder 中t 时刻,yt的计算依靠与yt-1,st和ct, st,st是decoder中RNN在t时刻的隐状态。ct是根据当前时刻target 信息st与source 的hidden state 计算attention获得,意味着在decoder阶段并不是对encoder传过来的信息全盘皆收,而是根据需要有选择的侧重其中的某些部分,将目标端和源端联系了起来, 比如at,i表示目标端y t对源端xi的关注度,关注度越高说明xi对翻译yt越有用. 这里的attention计算方法被称为Additive attention (or multi-layer perceptron attention)

2. Effective Approaches to Attention-based Neural Machine Translation 这篇文章的提出了local attention是由于在机器翻译领域,对于输入语句比较长的情况,比如输入为段落、文档,可能会出现计算量比较大的问题,因为在decoder阶段每一个时刻的target都要同encoder输入数据中的所有hidden state计算attention, 进而计算ct。

这是一方面的原因。另一方面则是针对在hard attention 和 soft attention之间做一个调和,提出了local attention.

local

attention

文中提到了local attention的两种策略,一种是假设source 和 target是对齐的,那么pt = t. 一种是由的decoder中target的状态ht来决定。

上下文向量ct导出为窗口内源隐藏状态集合的加权平均值[pt-D,pt D];D为经验选择。为了有利于pt附近的对准点,我们将高斯分布置于pt的中心。

除此之外,作者也探讨了global attention(我没看出和之前有什么区别)和score的几种计算方式,也就是at的计算:

3. Hierarchical Attention Networks for Document Classification 作者将attention 机制应用在word级别上来获得sentence representation 和sentence级别上获得document representation用于文档分类。

从上t图就可以非常直观地感受到hierarchial, attention机制不断从粒度上进行递进。

这里的attention是source2token,如果在word级别计算sentence representation, 注意力则是sentence中的每个token 对整个句子语义的重要度(注意力).

word-leve source2token attention

这里的uw是训练参数,可以理解为句子的整体表示,uw是一个向量。

sentence attention 同理

4. A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING

之前计算attention时得到的是一个向量,比如在source2token下计算句子中n个token对整个句子的重要性,那么每个token都会得到一个标量, n个token最终会形成n维的向量。在本文中,作者认为在计算每个token对整个句子(也可以是其他对象,比如target的si)的重要性时可以用一个向量来表示(这里向量的维度是r), 可以理解为在衡量token的重要时是在r个aspect上进行,当然这个r可以等于特征维度,来表示不同的特征的权重是不同。

至于操作过程,原始:

改进后:

Ws2只需要从一个da维的向量变成一个r*da维的矩阵即可。

attention weight 就从n维的向量a变成一个n*r的矩阵A了。

比较基本的到此为止我应该介绍差不多了,在之后的发展中,attention 机制在各个领域被应用,被改进,形成了各种各样,色彩缤纷的attention.

2017年对attention注意是一个不平凡的一年。

5. Recurrent Attention Network on Memory for Aspect Sentiment Analysis 简称RAM

这篇文章改进attention为:The results of multiple attentions are non-linearly combined with a recurrent neural network 。

这里应用aspect level 的情感分析,这里M为memory,其实就是 M = {m1,...,mt,...,mT} (考虑了句子中token与apect的位置关系--location weighted,不属于attention就不缀述了) 可以理解为长度为T的序列先输入到word embedding层之后又经过了下bi-lstm, 看上图的左侧。

作者将attention嵌入到了循环结构中,使得每个时刻得到的attention能够非线性组合起来。

从以上三个公式可以看出, 在计算attention时相对于之前的又多考虑了两个方面,一个是et-1,一个是v*(这里tao 不好表示,用*表示aspect在句子中的位置). et-1是t-1时刻的episode,v*为apect表示(其实就是h*)。e0等同于v*。

将it(AL)和et-1输入到GRU cell中获得et,得到et可以计算it 1(AL). 这里我理解it(AL)表示当前记忆中的信息,作为当前时刻的输入,而et-1在表示上一时刻得到的attention表示(蕴含了前t-1时刻的考虑memory影响的aspect), 经过n轮得到的aspect表示,用来做情感极性分类。 ps:水印源自我的知乎

0 人点赞