点击上方,选择星标或置顶,每天给你送干货!
阅读大概需要12分钟
跟随小博主,每天进步一丢丢
作者:CHEONG
来自:机器学习与自然语言处理
一、Attention机制原理理解 Attention 机制通俗的说,对于某个时刻的输出y,它在输入x上各个部分上的注意力,这里的注意力也就是权重,即输入x的各个部分对某时刻输入y贡献的权重,在此基础上我们先来简单理解一下Transformer模型中提到的self-attention和context-attention (1) Self-attention :输入序列即是输出序列,即计算自身的attention,计算序列对其本身的attention权重 (2) Context-attention :即是encoder-decoderattention,如在机器翻译模型中即计算encoder序列中的每个词对decoder序列各个词的attention权重 二、Attention计算方式 1、Content-base attention 论文:Neural Turing Machines 论文链接:https://arxiv.org/pdf/1410.5401.pdf attention相似度的度量使用的是余弦相似度: 2、Additive attention 论文:Neural Machine Translation By JointlyLearning to Align and Translate 论文链接:https://arxiv.org/pdf/1409.0473.pdf 下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍 3、Location-Baseattention、General attention、Dot-Productattention 论文 :Effective Approaches toAttention-based Neural Machine Translation 论文链接: https://arxiv.org/pdf/1508.04025.pdf 下面有对这篇论文中的attention实现过程详细介绍,这里不做介绍 4、ScaledDot-Product attention 论文: Attention is all you need 论文链接: https://arxiv.org/pdf/1706.03762.pdf 大家熟悉的Transformer中提到的Attention机制,下面有介绍 三、Attention发展历程及演变 1、seq2seq中引入attention机制 首先attention机制常用在seq2seq模型中,下图一是传统的seq2seq,输出y对输入序列x1,x2,x3...没有区分,没有辨识度,下图二中我们引入了attention机制,每个输出的词y受输入X1,X2,X3...影响的权重不同,这个权重便是由Attention计算,因此可以把Attention机制看成注意力分配系数,计算输入每一项对输出权重影响大小 (Learning Phrase Representations using RNN Encoder–Decoderfor Statistical Machine Translation论文截图) (NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN ANDTRANSLATE论文 截 图 ) 介绍一下上图中attention实现过程 (1) 首先利用双向RNN结构得到隐层状态(h1, h2, …, hn) (2) 如当前已经decoder到隐层St-1,接下来计算每一个输入位置hj对当前位置i的影响 这里attention的计算方式可以有很多种,点乘形式、加权点乘形式或求和形式 (3) 对eij进行softmax将其normalization得到attention权重分布,如下所示 (4) 利用aij进行加权求和得到相应的context vector (5) 计算最终输出 2、SoftAttention和Hard Attention (Show, Attend and Tell: Neural Image Caption Generation withVisual Attention论文提出) Softatttention 是参数化的,是可导的可嵌入到模型中直接训练,上述seq2seq中的即是soft attention;Hard attention是一个随机的过程,为了实现梯度的反向传播,需要采用蒙特卡洛采样的方法来估计模块的梯度,目前更多的研究和应用还是更倾向于使用Soft Attention,因为其可以直接求导,进行梯度反向传播,大致了解一下即可 3、GlobalAttention和Local Attention ( EffectiveApproaches to Attention-based Neural Machine Translation 截 图 ) 上左图是Global Attention,右图是Local Attention 全局Attention和局部attention存在共同之处,例如在翻译模型的解码阶段都是将LSTM的顶层隐藏状态ht作为输入,目标是活得一个上下文向量ct来捕获源信息帮助预测当前单词,两种方式不同便在于对上下文向量ct的获取方式不同,但其后步骤是共享的,即首先由上下文信息和隐藏层信息获得注意力隐层状态: 然后再通过注意力隐层状态通过softmax获得预测分布 下面介 绍 一下全局Attention和局部Attention 对 上下文向量ct的 获 取 (1) Global Attention 全局Attention在 计 算上下文向量ct 时 考 虑编码 器所有的 隐层 状 态 ,attention向量是通 过比较当前目标隐藏状态ht和每个源隐藏状态hs得到: ht 和hs之 间 的 计 算方式可以采用如下几种: 当前也可以通 过 基于location的方式 计 算attention得分: (2) Local Attention 全局Attention的缺点在于对每个目标单词必须关注源序列中的所有单词,消耗资源因此局部Attention的思想是对每个目标单词只选择一部分源单词进行预测上下文向量ct, 具体来说,在时刻t 模型首先为每个目标单词生成一个对齐位置pt。上下文向量ct 通过窗口[pt -D,pt +D] 内的源隐藏状态集合加权平均计算得到;D 根据经验选择。 8 与全局方法不同,局部对齐向量at 是固定维度的,即∈ ℝ 2D+1 4、Transformer中Attention 简单说一下Transformer中使用的Scaled Dot-Product Attention和Multi-Head Attention,详细 内容可参见博主之前写的文章:Transformer模型细节理解及Tensorflow实现 ,Transformer 模型的 PyTorch 实现 ( Attention is all your need论文截图 ) ScaledDot-Product Attention :通过Q,K矩阵计算矩阵V的权重系数 Multi-HeadAttention :多头注意力是将Q,K,V通过一个线性映射成h个Q,K,V,然后每个都计算Scaled Dot-Product Attention,最后再合起来,Multi-HeadAttention目的还是对特征进行更全面的抽取 5、Attention组合使用相关论文 (1) Hierarchical Attention Networks for Document Classification (2) Attention-over-Attention Neural Networks for ReadingComprehension (3) Multi-step Attention: Convolutional Sequence to SequenceLearning (4) Multi-dimensional Attention: Coupled Multi-Layer Attentionsfor Co-Extraction of Aspect and Opinion Terms 6、Attention应用领域 (1) 机器翻译 (2) 蕴含关系推理 (3) 文本摘要生成 四、Attention实例分析 首先看在Encoder-Decoder中引入Attention机制,如机器翻译 每个输出的词Y受输入X1,X2,X3,X4影响的权重不同,这个权重便是由Attention计算 因此可以把Attention机制看成注意力分配系数,计算输入每一项对输出权重影响大小 下面一张图给出了Attention机制在机器翻译中实际权重计算过程 首先由原始数据经过矩阵变化得到Q、K、V向量,如下图 以单词Thinking为例,先用Thinking的q向量和所有词的k向量相乘,使用下面公式: 这种得到每个单词对单词Thinking的贡献权重,然后再用得到的权重和每个单词的向量v相乘,得到最终Thinking向量的输出 Attention中缩放的目的是为了加速神经网络的计算 五、Attention机制实现分析 1、HierarchicalAttention Network中的注意力机制实现 HAN 结构包含了Word encoder、Word attention、Sentence encoder、Sentence attention,其中有word attention和sentence attention 解释: h 是隐层GRU的输出,设置w,b,us三个随机变量,先一个全连接变换经过激活函数tanh得到ui,然后在计算us和ui相乘,计算softmax输出a,最后得到权重a之后再和h相乘,得到最终经过注意力机制的输出v,下左图是word attention计算公式,下右图是sentece attention计算公式 HAN中Attention实现核心代码如下: attention 中mask的作用,下面看一下mask一种实现 通过将超过seq_length的部分mask称False,然后将mask为False的部分弄成无穷小,这样在反向传播时无穷小倒数为0,防止消息逆向传播 下面也是mask的一种实现方式,下面通过add和mul两种方式实现上面所说的mask 2 、Transformer中Multi-Head Attention实现 可参见之前的文章:Transformer模型细节理解及Tensorflow实现 推荐阅读: 【一分钟论文】 NAACL2019-使用感知句法词表示的句法增强神经机器翻译 【一分钟论文】Semi-supervised Sequence Learning半监督序列学习 详解Transition-based Dependency parser基于转移的依存句法解析器 经验 | 初入NLP领域的一些小建议 学术 | 如何写一篇合格的NLP论文 干货 | 那些高产的学者都是怎样工作的? 一个简单有效的联合模型 近年来NLP在法律领域的相关研究工作