• 回答数

    3

  • 浏览数

    136

小龇everything
首页 > 英语培训 > 注意力机制英文

3个回答 默认排序
  • 默认排序
  • 按时间排序

Cupnightsky

已采纳

关键字的是【屏蔽】,要集中注意力就得摒除杂念,除此以外扯多了都是分散注意力瞎掰,简单的说,神经网络在集中资源处理一件事时,会加强相关回路联通,削弱甚至屏蔽相关性较弱的回路,也就是交通管制——大官游街,闲人避让,如何达成这个效果,就是神经递质为主的神经信号传递环节的任务了,受体量大就神经兴奋,反之神经抑制,使得某些回路兴奋畅通,某些回路受到抑制进入关闭状态,所以就有两耳不闻窗外事,就有了三日不知肉味,就有了吸毒上瘾六亲不认,就有了催眠忽悠坑蒙拐骗,从信息系统的角度,就是信息控制产生的信息不对称效果。

注意力机制英文

150 评论(9)

忘心敛意

本文大部分的内容来自于 深度学习中的注意力机制 意力机制借鉴了人类注意力的说法,比如我们在阅读过程中,会把注意集中在重要的信息上。在训练过程中,输入的权重也都是不同的,注意力机制就是学习到这些权重。最开始attention机制在CV领域被提出来,但后面广泛应用在NLP领域。 需要注意的是,注意力机制是一种通用的思想和技术,不依赖于任何模型,换句话说,注意力机制可以用于任何模型。只是我们介绍注意力机制的时候更多会用encoder-decoder框架做介绍。 Encoder-Decoder 框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。下图是文本处理领域里Encoder-Decoder 框架最抽象的一种表示。 在NLP领域,可以把Encoder-Decoder框架看作是:将一个句子(篇章)转换成另一个句子(篇章)。最直观的例子就是机器翻译,将一种语言的表达翻译成另一种语言。对于句子对,将给定输入句子 source,通过Encoder-Decoder框架生成目标句子target。其中,source和target都是一组单词序列:Encoder是对source进行编码,转换成中间语义 : 对于解码器Decoder,其任务是根据中间语义C和当前已经生成的历史信息来生成下一时刻要生成的单词:我们从最常见的Soft Attention模型开始介绍attention的基本思路。 在上一节介绍的Encoder-Decoder框架是没有体现出“注意力模型”的,为什么这么说呢?我们可以看下target的生成过程: 其中, 是Decoder的非线性变换函数。从上面式子中可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子source的语义编码 都是一样的,没有任何区别。而语义编码 又是通过对source经过Encoder编码产生的,因此对于target中的任何一个单词,source中任意单词对某个目标单词 来说影响力都是相同的,这就是为什么说图1中的模型没有体现注意力的原因。 下面从一个例子入手,具体说明下注意力机制是怎么做的。 比如机器翻译任务,输入source是英文句子:Tom chase Jerry;输出target想得到中文:汤姆 追逐 杰瑞。在翻译“Jerry”这个单词的时候,在普通Encoder-Decoder模型中,source里的每个单词对“杰瑞”的贡献是相同的,很明显这样不太合理,因为“Jerry”对于翻译成“杰瑞”更重要。如果引入Attention模型,在生成“杰瑞”的时候,应该体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:每个英文单词的概率代表了翻译当前单词“杰瑞”时注意力分配模型分配给不同英文单词的注意力大小。同理,对于target中任意一个单词都应该有对应的source中的单词的注意力分配概率,可以把所有的注意力概率看作 ,其中 表示source长度, 表示target长度。而且,由于注意力模型的加入,原来在生成target单词时候的中间语义 就不再是固定的,而是会根据注意力概率变化的 ,加入了注意力模型的Encoder-Decoder框架就变成了如图2所示。根据图2,生成target的过程就变成了下面形式: 因为每个 可能对应着不同的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下: 其中, 表示Encoder对输入英文单词的某种变换函数,比如如果Encoder是用RNN模型的话,这个 函数的结果往往是某个时刻输入 后隐层节点的状态值;g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素加权求和,即: 其中, 代表输入句子Source的长度, 代表在Target输出第 个单词时Source输入句子第 个单词的注意力分配系数,而 则是Source输入句子中第 个单词的语义编码。假设下标 就是上面例子所说的“汤姆”生成如下图:那另一个问题来了:注意力概率分布是怎么得到的呢?为了便于说明,我们假设图1的Encoder-Decoder框架中,Encoder和Decoder都采用RNN模型,那么图1变成下图4: 那么注意力分配概率分布值的通用计算过程如图5:上面就是经典的soft Attention模型的基本思想,区别只是函数 会有所不同。 从我的角度看,其实Attention机制可以看作,Target中每个单词是对Source每个单词的加权求和,而权重是Source中每个单词对Target中每个单词的重要程度。因此,Attention的本质思想会表示成下图6: 将Source中的构成元素看作是一系列的数据对,给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,即权重系数;然后对Value进行加权求和,并得到最终的Attention数值。将本质思想表示成公式如下: 其中, 表示Source的长度。 深度学习中的注意力机制 中提到: 因此,Attention机制的具体计算过程实际上分成了3个阶段,如图7: 第一阶段可以引入不同的函数和计算机制,根据Query和某个 ,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量cosine相似性或者引入额外的神经网络来求值,如下:第二阶段引入类似SoftMax的计算方式,对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。即一般采用的公式如下: 第三阶段的计算结果 即为 对应的权重系数,然后进行加权求和即可得到Attention数值: 通过如上三个阶段的计算,就可以求出针对Query的Attention数值。 上面介绍的是soft Attention,hard Attention的区别在于soft Attention中 是概率分布,而hard Attention取值为0/1。Hard Attention在图像上有使用,具体可见 引入attention机制 。 这里的global attention其实就是soft Attention,global attention需要考虑encoder中所有的 ;而local Attention直观上理解是只考虑局部的 。 Self-attention是Google在transformer模型中提出的,上面介绍的都是一般情况下Attention发生在Target元素Query和Source中所有元素之间。而Self Attention,指的是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力机制。当然,具体的计算过程仍然是一样的,只是计算对象发生了变化而已。 上面内容也有说到,一般情况下Attention本质上是Target和Source之间的一种单词对齐机制。那么如果是Self Attention机制,到底学的是哪些规律或者抽取了哪些特征呢?或者说引入Self Attention有什么增益或者好处呢?仍然以机器翻译为例来说明,如图8和图9: 具体做法是点乘 和 ,然后除以 ,并经过Softmax,以此得到 的权重。也就是说Attention计算过程如下式,其中 是scaled factor:注意力的计算一般有两种:加性注意力(additive attention)、乘法(点积)注意力(multiplicative attention)。(这里可以和第3部分计算相似度对应) 加性注意力是最经典的注意力机制,它使用了有一个隐藏层的前馈网络(全连接)来计算注意力; 乘法注意力就是Transformer用的方式。这两种注意力在复杂度上是相似的,但是乘法注意力在实践中要更快速、具有高效的存储,因为它可以使用矩阵操作更高效地实现。 Transformer原文: Multi-Head Attention是用不同的 得到不同的Attention,最后将这些Attention拼接起来作为输出。公式如下: 其中, ;在Transformer模型中, 。 Scaled Dot-Product Attention和Multi-Attention如下图所示:

305 评论(9)

小雨后哒晴天

自注意力机制是注意力机制的一种,有关注意力机制的介绍可以参考我的前一篇博客: Seq2Seq中的Attention机制 。

Attention机制最早是在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是2014年google mind团队的这篇论文《Recurrent Models of Visual Attention》,他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是第一个将attention机制应用到NLP领域中。接着attention机制被广泛应用在基于RNN/CNN等神经网络模型的各种NLP任务中。2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力(self-attention)机制来学习文本表示。自注意力机制也成为了大家近期的研究热点,并在各种NLP任务上进行探索 [1] 。

Seq2Seq中的Attention是在Decoder阶段,如果用在机器翻译中的话就是着重考虑输出与输入的对应关系 ,比如将英文 walk by river bank. 翻译成中文的时候,翻译 走 这个字就只需将attention放在 walk 即可,其它三个单词对翻译 走 这个词是没有帮助的,所以我们不需要关注它们。 而self-attention就不同,它是关注 walk 与 by , river , bank 的内在联系 。在翻译的时候,self-attention会去联系上下文语境,然后决定 bank 到底该翻译为 银行 还是 河岸 。

对于两个词向量而言,对它们做点积,如果结果越大表明它们越相似,结果越小表明它们差别越大(两向量不相关,点积为0)。比如"river"和"bank"两个词向量可能比较相似,因为它们都表示自然界中的两个环境,因此它们的点积相较于其它词向量的点积可能更大。

我们将输入与输入的转置作点积,会得到一个新的矩阵,该矩阵为各个词向量之间的相关性,如Fig.1所示:

为了避免点积之后获得太大的值,需要对点积之后的矩阵进行放缩,这里通常采用的是softmax激活函数,对每一列进行放缩,放缩之后每一列中的数相加和等于1,如Fig.2所示。

Tab.1 Scalar product

最后我们会得到如Tab.1所示的词向量之间的相关性矩阵。从图中可以看到,"river"和"bank"的相关性比较高,所以它的颜色较深。Softmax为非线性激活函数,我们可以对self-attention进行叠加,让它成为一个深度self-attention网络模型。

将输入词向量与相关性矩阵相乘,会得到Contextualized embeddings向量,如Fig.3所示。

回顾一下 的计算过程可以发现, self-attention的输出就是所有输入的权重和 ,而权重 不是参数,而是输入 本身。因此,self-attention的输入与输出的维度是一样的。

在搜索栏中输入一个问题,这个叫 query ,然后搜索算法会根据你输入的问题的关键字 keys 来匹配你可能想要的结果,而匹配到的结果就叫做 values 。把这一关系放在Attention中,输入为 query ,通过计算 query 与各个 key 的相似性,得到每个 key 对应 value 的权重系数,然后对 value 进行加权求和,即得到最终attention的数值 [4] 。其整个过程如Fig.4所示。

166 评论(8)

相关问答