美文网首页
Attention 机制

Attention 机制

作者: 大豆油 | 来源:发表于2019-10-18 20:23 被阅读0次

    记录一下自己所理解的 Attention 机制:首先先从 Encoder-Decoder 框架来宏观角度的看 Attention 机制,再从微观角度来看。

    一、Encoder-Decoder 框架

    抽象的文本处理领域的Encoder-Decoder框架

    由此可见,生成 i 时刻要生成的单词:

    二、Soft Attention 模型(对比于 Hard 模型:one-hot 编码的固定区域)

    上图展示的 Encoder-Decoder 框架没有体现出“注意力模型”,因为在目标句子 Target 中每个单词的生成过程如下:

    其中 f 是 Decoder 的非线性变换函数,可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子 Source 的语义编码 C 都是一样的,没有任何区别。而语义编码 C 是由句子 Source 的每个单词经过 Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实句子 Source 中任意单词对生成某个目标单词 yi 来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。

    真正体现注意力机制的框架如下:

    引入注意力模型的 Encoder-Decoder 框架

    即生成目标句子单词的过程成了下面的形式:

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

    其中,f2 代表 Encoder 对输入英文单词的某种变换函数,比如 Encoder 是 RNN 模型的话,f2 函数结果是某个时刻输入 xi 后隐层节点的状态值;g 函数一般是对构成的元素加权求和。所以,Attention 形成过程如下图:

    问题:分配的概率分布值(0.6,0.2,0.2)如何生成的呢?
    以 Encoder 采用 RNN,Decoder 也采用 RNN 模型为例,则 Encoder-Decoder 框架转换成下图:

    RNN 作为具体模型的 Encoder-Decoder 框架

    那么下图很通用的表示了注意力分配概率分布值的计算过程:

    注意力分配概率计算

    物理意义:一般在自然语言处理应用里会把 Attention 模型看作是输出 Target 句子中某个单词和输入 Source 句子每个单词的对齐模型。

    三、Attention 机制的本质思想

    三阶段计算 Attention 过程

    在第一个阶段,可以引入不同的函数和计算机制,根据Query和某个Key_i,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值,即如下方式:

    Query, Key, Value 的定义

    对于一个 Attention 机制而言,定义好 Query, Key, Value 是至关重要的,这一点我个人认为是一个经验工程,看的多了,自然就懂了。 我这里简单举阅读理解与机器翻译的例子:

    • 对于机器翻译而言,常见的是: Query 就是上一时刻 Decoder 的输出Si-1 , 而Key,Value 是一样的,指的是 Encoder 中每个单词的上下文表示。
    • 对于英语高考阅读理解而言, Query 可以是问题的表示,也可以是问题+选项的表示,而对于Key,Value而言,往往也都是一样的,都指的是文章。而此时Attention的目的就是找出文章中与问题问题+选项的相关片段,以此来判断我们的问题是否为正确的选项。

    由此我们可以看出, Attention 中 Query, Key, Value 的定义都是很灵活的,不同的定义可能产生不一样的化学效果


    四、Self-Attention

    在 self-attention 中,我们可以认为source = target。 self-attention可以捕捉到句子里面的长依赖关系。 self-attention 是针对句子中所有词两两计算,不存在距离长短这一说。

    下面介绍 self-attention 的具体计算:

    上图是分别得到 查询向量、键向量、值向量。下图就是全部的流程:

    分以下步骤实现:

    1. 获得查询向量、键向量、值向量。
    2. 计算得分。这些分数是通过打分单词(所有输入句子的单词)的键向量与“Thinking”的查询向量相点积来计算的。所以如果我们是处理位置最靠前的词的自注意力的话,第一个分数是q1和k1的点积,第二个分数是q1和k2的点积。
    3. 第三步和第四步是将分数除以8(8是论文中使用的键向量的维数64的平方根,这会让梯度更稳定。这里也可以使用其它值,8只是默认值),然后通过softmax传递结果。softmax的作用是使所有单词的分数归一化,得到的分数都是正值且和为1。
    4. 将每个值向量乘以softmax分数(这是为了准备之后将它们求和)。这里的直觉是希望关注语义上相关的单词,并弱化不相关的单词(例如,让它们乘以0.001这样的小数)。
    5. 对加权值向量求和(译注:自注意力的另一种解释就是在编码某个单词时,就是将所有单词的表示(值向量)进行加权求和,而权重是通过该词的表示(键向量)与被编码词表示(查询向量)的点积并通过softmax得到。),然后即得到自注意力层在该位置的输出(在我们的例子中是对于第一个单词)。

    注意:self-attention 是针对句子内部,所以并不是输出整个句子的 Attention 结果,而是每个单词的 Attention 结果,与上面介绍的 Encoder-Decoder 机制有点不一样。简单的说:Attention 机制发生在 Target 的元素 Query 和 Source 中的所有元素之间。而 Self Attention 顾名思义,指的不是 Target 和 Source 之间的 Attention 机制,而是 Source 内部元素之间或者 Target 内部元素之间发生的 Attention 机制,也可以理解为 Target=Source 这种特殊情况下的注意力计算机制。


    五、Global attention 与 Local attention

    Global Attention Local Attention

    在 soft attention阵营中,很快又划分为两大阵营: Glocal attention 与 Local attention, 二者的区别在于关注的范围大小不同, 其中,Global attention 关注全部的文字序列,而 Local attention 关注的是固定的窗口中的所有文字序列。

    比较二者, Global attention 的计算量要比 Local Attention 要大,尤其是对于长句子而言,效率变得很低; 而 Local Attention 只与窗口内的文字相关,因此窗口的大小就显得至关重要了,且在 local attention 中多了一个预测中心词 pt,这有可能会忽略一些重要的词。因此基本不考虑 Local Attention。


    参考文献

    1. 图解Transformer(完整版)
    2. 深度学习中的注意力模型(2017版)
    3. NLP中的 Attention 机制(不定期更新)

    相关文章

      网友评论

          本文标题:Attention 机制

          本文链接:https://www.haomeiwen.com/subject/vrvlmctx.html