叨叨游戏网
您的当前位置:首页一文详解Attention机制

一文详解Attention机制

来源:叨叨游戏网

Attention机制

我们知道Seq2Seq模型有一个缺点就是句子太长的话encoder会遗忘,那么decoder接受到的句子特征也就不完全,我们看一下下面这个图,纵轴BLUE是机器翻译的指标,横轴是句子的单词量,我们可以看出用了attention之后模型的性能大大提升。

Attention原理

在encoder结束之后,attention和decoder同时工作, 回忆一下,decoder的初始状态 s 0 s_{0} s0 是 encoder最后一个状态, 不同于常规的Seq2Seq, encoder所有状态都要保留,这里需要计算 s 0 s_{0} s0 与每个状态的相关性, 我使用 α i = aligh ⁡ ( h i , s 0 ) \alpha_{i}=\operatorname{aligh}\left(h_{i}, s_{0}\right) αi=aligh(hi,s0) 这个公式表示计算两者相关性,把结果即为 α i , \alpha_{i}, αi, 记做Weight, encoder有m个状态, 所以一共有m个 α , \alpha, α, 这里所有的值都是介于0和1的实 数, 全部加起来为1。

更抽象的理解

简而言之,Attention 机制就是对输入的每个元素考虑不同的权重参数,从而更加关注与输入的元素相似的部分,而抑制其它无用的信息,具体是通过一个叫做attention函数来实现的,它是用来得到attention value的。比较主流的attention框架如下:

上图其实可以描述出attention value的本质:它其实就是一个查询(query)到一系列键值(key-value)对的映射。

Attention 的优缺点

优点:

  • 一步到位的全局联系捕捉。attention机制可以灵活的捕捉全局和局部的联系,而且是一步到位的。另一方面从attention函数就可以看出来,它先是进行序列的每一个元素与其他元素的对比,在这个过程中每一个元素间的距离都是一,因此它比时间序列RNNs的一步步递推得到长期依赖关系好的多,越长的序列RNNs捕捉长期依赖关系就越弱。
  • 并行计算减少模型训练时间。Attention 机制每一步的计算都不依赖于上一步的计算结果,因此可以并行处理。
  • 模型复杂度小,参数少

缺点:
缺点很明显,attention机制不是一个"distance-aware"的,它不能捕捉语序顺序(这里是语序哦,就是元素的顺序)。这在NLP中是比较糟糕的,自然语言的语序是包含太多的信息。如果确实了这方面的信息,结果往往会是打折扣的。 当然这个缺点也好搞定,再添加位置信息就好了,所以就有了 position-embedding(位置向量)的概念了,这里就不细说了。

转载来源
https://zhuanlan.zhihu.com/p/135970560
https://zhuanlan.zhihu.com/p/35571412?spm=a2c4e.10696291.0.0.3f4619a49c8SGU
https://www.cnblogs.com/ydcode/p/110380.html

因篇幅问题不能全部显示,请点此查看更多更全内容