Attention原理图解(非常详细)

1.前言

希望大家结合上一篇博文讲的seq2seq详细总结来看,这样的模型其实是存在缺点的:

  • 遗忘:输入文本很长时,语义向量c 偏向于记住靠近它的几个单词,它的运行机制相当于读完整个文本再去做翻译,而我们人类会一句一句的翻译,这样就引入了Attention 机制
  • 它与 seq2seq 最大的不同是: seq2seq 的语义向量 c 是固定的,而Attention 每个时刻的 语义向量 c 不同
  • seq2seq模型的语义向量 c 无法表达输入序列各单词的重要性,而attenton 每个时刻的c向量都能反映输入单词的权重关系
  • seq2seq没有对齐机制,而attention具有这种性质,它能计算出目标单词与哪个输入单词关系最大

2. 简单的网络结构

看个图,大家就能明白啦
Attention原理图解(非常详细)
Attention原理图解(非常详细)
h1,h2,h3,h4是 RNNCeil 每个时刻的隐层状态
Attention原理图解(非常详细)
Attention原理图解(非常详细)
Attention原理图解(非常详细)

3.attention模型结构分析

这个结构图比上面画的更官方一点
Attention原理图解(非常详细)

  • 编码部分是双向的GRU
  • h 是编码的隐层状态(有正向和反向)
  • s 是解码的隐层状态
观查到 s3, y3的箭头有3个。像seq2seq讲解那样画一个输入关系的图,便于好记~

Attention原理图解(非常详细)
① 观测上图:每一时刻t 的输出y_t 由三个要素决定:t 时刻i的隐状态 s_tt 时刻的语义向量c_t,上一时刻 t−1的输出y_t−1
每一时刻t 的隐层状态s_t 由三个要素决定:t-1 时刻i的隐状态 s_t-1t 时刻的语义向量c_t,上一时刻 t−1的输出y_t−1
Attention原理图解(非常详细)
这里 ht’ 就是 s_t, ht-1’s_t-1
同样:f 是 softmax层(在论文中接了Maxout层),g 是RNNCeil 如RNN, GRU
②语义向量 C 怎么得到? ?
Attention原理图解(非常详细)
hi 是双向隐层拼接的结果
αt,i 是第 t 时刻,hi 的权重系数
S 是解码部分的隐层状态,h 是编码部分的隐层状态

以上面那个图为例:求第 三 时刻的 语义向量 c3:
c3 = α3,1 * h1 + α3,2 * h2 + α3,3 * h3 + α3,4 * h4
好了,我们现在的问题就只剩计算 score(s, h)

4. 计算权重α

这里的权重反映的是相似度,αt,i有两种方法求
Attention原理图解(非常详细)
score 计算完之后必须用 softmax 归一化

score衡量两个向量的相关性,衡量两向量相关性的方法有:
  1. 内积:越大越相似
    score (x,y) = x • y
    缺点:x, y向量维度必须一致才能做内积
  2. 乘以一个矩阵W,W的作用是把 x, y 维度变得一样
    score (x,y) = (x^T)Wy
  3. 训练神经网络
    以 x ,y 向量作为输入,输出为一个实数,只有一个隐层h 如图:
    Attention原理图解(非常详细)
    Attention原理图解(非常详细)
    只要把 x,y 向量换成St-1, hi 或 St, hi 就可以计算score了
    对比三种方法:第 2 种最好,因为x 和 y 有关联,score 就是真正意思上的相似的,而第三种,将 x,y 统一作为输入,已经变得无关了。