对Attention 机制的简单理解

参考文章

浅谈 Attention 机制的理解
attention机制原理及简单实现
深度学习中的注意力机制

Attention 机制是什么?

    对于注意力机制,单从名字上理解可以理解为生物观察事物时的注意点都着重在什么地方,比如当我们想看汽车的轮胎时,我们的注意力会向汽车的下半部分看,这就是注意力的焦点,这个机制正是想模仿这种行为,使机器的学习过程有侧重点。注意力的实现过程,简单说可以说是对一系列注意力分配系数,然后通过权重比例分配侧重点。

详述

    根据所学习的博客,这里也使用Encoder-Decoder作为例子进行解释。
    Encoder-Decoder是一个很常见的深度学习模型框架,这种编码解码的手段将输入序列转为向量然后解码获得结果,这一过程最常见的例子就是应用于机器翻译中。
    单纯的Encoder-Decoder模型在翻译过程中,比如Tom chase Jerry这句话,对于“汤姆”这个翻译机器会认为他受Tom、chase、Jerry这三个词影响,但实际情况是他受Tom的影响是最大的,这种学习侧重不突出的情况一般称为分心模型。
    而在Attention 机制的作用下,Encoder-Decoder在学习过程中会学习到每个元素的重要程度,然后根据重要程度再进行合并。在 Encoder 将输入的序列元素进行编码时,得到的不再是一个固定的语义编码,而是存在多个语义编码,且不同的语义编码由不同的序列元素以不同的权重参数组合而成。如下图,根据不同的注意力权重对不同语句部分分别输出不同的语义编码然后根据不同的语义编码分别输出对应位置的结果实现原文片段和对应译文的匹配:对Attention 机制的简单理解
    在Attention 机制的作用下,编码过程不是直接编码,而是给予权重后加权求和:对Attention 机制的简单理解
    f函数即为编码函数,这里的aij表示某元素Xj对Ci的重要性,也就是注意力权重,计算公式可以用softmax表示:
对Attention 机制的简单理解
    这里的eij即为元素的匹配度,匹配度越高,说明它对其的重要程度越高,对应的aij就越大。

Attention Value

    Attention机制实现重点就是计算出Attention Value,也就是编码之后得到的语义编码。获取该值的方式常用的为键值对查询方式:
对Attention 机制的简单理解
    整个计算过程如上图所示。在自然语言中,key值和value值往往相同,且需注意最终获得的语义编码是一个向量,而且这个向量很好的表现了对应元素与上下文的关系,既有全局联系也有局部联系。对于全局联系,是由于在上面计算eij提到计算了对应元素与其他元素之间的匹配度,这里可以体现出全局关系,而局部关系则是因为计算过程中有了注意力权重,对于注意力高的重点学习,这里体现局部联系。
    对于attention机制有博主将其看为了“软寻址”。他与传统的寻址区别开来,不是按地址寻址,而是计算key与query的相似度,他可能取值时会把所有地址的值都取出来然后根据重要程度进行合并,最终得到结果。

优缺点

    优点:
    1、不仅能一步到位直接获取全局联系,还能获得局部联系,优于RNN实现过程中的一步步递推的长期依赖关系。
    2、可以实现并行计算,各步计算不相互依赖,减少运行时间。
    3、模型复杂度不高,参数较少。

    缺点:
    单纯的attention机制由于并行计算,所以无法考虑语序问题,这需要再增加位置向量予以解决。