转自:

https://blog.csdn.net/Michale_L/article/details/126281676?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166917753116782414933549%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166917753116782414933549&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-126281676-null-null.142^v66^control,201^v3^add_ask,213^v2^t3_control1&utm_term=%E6%B3%A8%E6%84%8F%E6%9C%BA%E5%88%B6&spm=1018.2226.3001.4187

目录

一、Encoder-Decoder框架

二、注意力机制

2.1 经典注意力机制

2.2 注意力分布

2.3 加权分布

注意力机制就是在某时刻将注意力放在某些事物上,而忽略另外的一些事物。

下面基于Encoder-Decoder框架说明

一、Encoder-Decoder框架
简单说一下Encoder-Decoder框架的原理

 

对于句子对<source,target>:

 

编码器对输入source进行编码,转换成中间语义向量C:

 

对于解码器Decoder,根据中间语义向量C和当前已生成的历史信息来生成下一时刻要生成的单词:

 

基本的Encoder-Decoder框架没有体现出注意力机制

把Decoder生成拆开来看:

 

f是非线性变换函数,在生成目标单词时,使用的语义向量C都是一样的,所以,source中任意单词对某个单词来说,影响力都是相同的。

如果输入句子比较短,对于输出影响不是很大,但如果输入句子很长,这时所有的语义都通过一个语义向量C来表示,单词自身的信息会消失,很多细节信息会被丢失,最终的输出也会受到影响,所以要引入注意力机制。

二、注意力机制
2.1 经典注意力机制
在机器翻译中,比如输入source为Tom chase Jerry。输出想得到中文:汤姆 追逐 杰瑞。在翻译Jerry这个单词时,在普通Encoder-Decoder模型中,source里的每个单词对“杰瑞”贡献是相同的,但这样明显和实际不是很相符,在翻译“杰瑞”的时候,我们更关注的应该是”Jerry”,对于另外两个单词,关注的会少一些。

引入Attention模型后,在生成“杰瑞“的时候,会体现出输入source的不同影响程度,比如:

 

每个概率代表了翻译当前单词“杰瑞”时注意力分配模型分配给不同英文单词的注意力大小。

在注意力机制中,对于target中每个单词都有一个对应source中单词的注意力概率。

由于注意力模型的加入,原来在生成target单词时候的中间语义C就不再是固定的,而是会根据注意力概率变化的,加入了注意力模型的Encoder-Decoder框架如下:

 

生成target的过程就变成了如下形式:

 

每个可能对应着不同的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下:

 

其中,表示Encoder对输入英文单词的某种变换函数, 比如如果Encoder是用RNN模型的话,这个函数的结果往往是某个时刻输入后隐层节点的状态值。g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般g函数就是对构成元素的加权求和:

 

其中,代表输入句子Source的长度,代表在Target输出第i个单词时,Source输入第j个单词的注意力分配系数;代表Source输入句子中第j个单词的语义编码。举例输出汤姆如下:

 

2.2 注意力分布
注意力分布α就是判断什么信息重要,什么信息不重要,分别赋予不同的权重。

如何计算α:

用X表示输入当输入 N 个向量 :[x1,…,xN],想要从中选出对于目标而言比较重要的信息,需要引入目标任务的表示,称为 查询向量(query vector),此时问题可以转换为考察输入的不同内容和查询向量之间的相关度,也就是对不同内容进行打分,赋予 与当前任务比较相关的部分 更大的权重,再通过一个softmax层得到分布,也就是输入信息的不同部分的权重。

注意力变量z∈[1, N]来表示被选择信息的索引位置,即z=i来表示选择了第i个输入信息,然后计算在给定了q和X的情况下,选择第i个输入信息的概率αi:

 

其中αi构成的概率向量就称为注意力分布(Attention Distribution)。s(xi , q)是注意力打分函数,有以下几种形式:

 

其中W、U和v是可学习的网络参数,d是输入信息的维度

加性模型引入了可学习的参数,将查询向量 q 和原始输入向量 h 映射到不同的向量空间后进行计算打分,显然相较于加性模型,点积模型具有更好的计算效率。

另外,当输入向量的维度比较高的时候,点积模型通常有比较大的方差,从而导致Softmax函数的梯度会比较小。因此缩放点积模型通过除以一个平方根项来平滑分数数值,也相当于平滑最终的注意力分布,缓解这个问题。

最后,双线性模型可以重塑为 ,即分别对查询向量 q 和原始输入向量 h 进行线性变换之后,再计算点积。相比点积模型,双线性模型在计算相似度时引入了非对称性。

形象表示打分函数:

 

如果Encoder-Decoder都采用RNN,框架如下:

 

那计算注意力分布概率值的过程如下:

 

表示Source中单词 j 对应的隐层节点状态,表示Target中单词 i 的隐层节点状态,注意力计算的是Target中单词 i 对Source中每个单词对齐可能性,即打分函数。

计算α,不只是编码器的隐藏状态作为输入,解码器的隐藏状态也要作为输入

可以结合下图理解:

 

2.3 加权分布
对于软性注意力机制,就是每一个输入按各自权重加权平均,即把每个编码器隐状态xi 和对应的注意力分布相乘求和

 

用图像形象表示:

 

求和之和算出来的就是引入注意力机制的语义向量,再将其输入到解码器中。

结合下图理解:

 

这样Decoder的最终输出就会有选择性地关注应该关注的地方。
————————————————
版权声明:本文为CSDN博主「Michael_Lzy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Michale_L/article/details/126281676

原文地址:http://www.cnblogs.com/wcxia1985/p/16917895.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性