注意力机制

注意力机制的学习

  • 注意力机制的宏观理解
  • 注意力机制的引入
  • 注意力机制的计算
  • 扩展
  • 参考

注意力机制的宏观理解

  从人的角度出发,人在观察事物时,对观察到的情况不是同等关注的。例如,在街上看见一辆豪车,我们会不自觉地专注于豪车,甚至忽略车旁边的行人。这就是一种注意力机制,同样在seq2seq模型中,其他单词对当前单词翻译造成的影响也不是相同的,会有重要性差异。本文主要关注注意力机制,不会过多介绍具体模型

注意力机制的引入

  以seq2seq为例,直观介绍注意力机制的计算方法,其实就是一种权重计算方法。seq2seq模型的基本结构如下:
seq2seq
其中X为输入,Y为输出,C为中间语义,相当于翻译中的中介。

  不加入注意力机制时,该模型的运行过程为:

  1. 使用Encoder将输入X进行编码
  2. 通过非线性变换,将X转换为中间语义C
  3. 将中间语义经过Decoder解码为输出Y

在这过程中,由于输入X时一个一个到达的,即x1,x2,x3,x4按顺序到达,为了更好的翻译,输出yi时,会利用y1-yi-1的输出当作先验,同时使用中间语义:
y i = G ( C , y 1 , . . . , y i − 1 ) y_i = G(C,y_1,...,y_{i-1}) yi=G(C,y1,...,yi1)
  显然,在上述计算方法中,虽然当前的输出利用了之前所有的输出,使得整个翻译更符合句子的意思,但是使用的中间语义C却是始终没变的,这是不合理的。因为中间语义C是整个句子的中间语义,而在翻译时是逐个单词翻译的,C并没有体现出单个单词的信息,关注的是整体,没有体现出注意力机制。当句子较长时,缺阀局部信息,结果并不理想,因此需要引入注意力机制,引入更多局部信息,引入注意力机制后的模型如下:
attention
针对每个输出,中间语义C都不同,中间语义C体现了注意力机制

注意力机制的计算

  注意力机制主要通过中间语义C来体现,所以现在的主要问题就是如何计算C。在不存在注意力机制时,C的是输入X的非线性变换,X每个分量的权重都相同。因此,引入注意力机制后,理所当然计算C时,X每个分量的权重应该不用,重点关注的分量权重大,不重要的分量权重小。在seq2seq中,X的分量就是每一个单词。
   首先我们对输入的单词进行编码,这样才能进行数学计算:
词嵌入向量
在得到了单词的词嵌入向量之后,注意力机制需要计算每个单词的权重。其实从另一个角度理解,对于当前单词来说,和当前单词意思联系大的单词,应该大权重,例如:I am a student中,student与自身和I的联系较大,应该将student和I分配大权重。需要建立联系,我们需要提取单词的特征,因此在注意力机制中,需要引入三个向量Q,K,V。
  Q为查询向量,K为键向量,V为值向量。C的计算过程如下:

  1. 使用单词的词嵌入向量分别与WQ,WK,WV做矩阵乘法,得到每个单词的Q,K,V向量
  2. 计算第i个单词的权重时,使用Qi与单词的K向量做内积
  3. 将得到的内积除以K向量维数的平方根(使梯度更加稳定),作为最后结果
  4. 将结果的值做softmax得到每个单词的权重
  5. 根据每个单词的权重与V向量相乘,得到输入向量Z
  6. 最后将Z向量做非线性变换得到C
    注意力机制_第1张图片
    注意力机制_第2张图片

根据我个人理解,Q向量和V向量其实都代表了当前单词的特征,但是为了能够满足权重分配条件,才使用了两个向量。这里的权重分配条件是指,特征相近的单词Q*K应该更大,如果只用一个向量表示特征的话,无法满足这个条件

  上述的注意力机制, 属于自适应机制。从宏观来说,它会将句子中的一些单词建立联系,例如:The girl is more beautiful than my sister, I like her.这句话中,her就会与the girl,而不是mysister,建立联系,这对于整体的翻译是很重要的。

扩展

  • 大战多头怪:加入注意力机制后,模型会在句子中的某些单词间建立联系,但是如果只是用一组Q,V,K,得到一个Z,建立的联系可能不够全面。因此,提出来使用多组Q,V,K,得到多个Z,最后将得到的所有Z进行组合,再进行非线性变换,得到C的方法,这样一个单词会和多个单词建立联系
    注意力机制_第3张图片

参考

  • [1] 注意力机制的基本思想和实现原理
  • [2] 图解Transformer

你可能感兴趣的:(自然语言处理,深度学习,神经网络)