Attention机制粗读

参考链接:

  1. 浅谈Attention机制的理解
  2. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用
  3. Attention机制详解(一)——Seq2Seq中的Attention

Intuition

类似于人的注意力机制。
在观察某幅图像时,人不会将注意力平均的分散到图像的每一处,而是根据需求重点关注特定的某一部分。当我们发现图像的某一部分经常出现我们需要注意的东西的时候,我们就会在将来出现类似场景时把注意力放在图像的这部分上

从数学角度来理解,相当于从序列中学习到每一个元素的重要程度,然后为其赋予一系列注意力分配系数,按照权重参数将元素合并。

Application

  1. 在机器翻译、语音识别应用中,为句子中的每个词赋予不同的权重,使神经网络模型的学习变得更加灵活。
  2. 做为一种对齐关系,解释翻译输入/输出句子之间的对齐关系,解释模型到底学到了什么知识,为我们打开深度学习的黑箱,提供了一个窗口。

Model

Attention机制粗读_第1张图片
图一:传统的Seq2Seq模型

参数解释:
[ x 1 . . . x T x_1...x_T x1...xT]表示输入序列,每个元素代表输入序列中的一个单词向量;
c是固定长度隐向量(称之为背景向量或者上下文向量);
[ y 1 . . . y T ′ y_1...y_{T'} y1...yT]表示输出序列;
T, T’分别代表输入序列长度和Decoder层隐状态数目。

模型解释:
Encoder和Decoder分别是两个RNN;
Encoder将输入序列编码成为固定长度隐向量c;
Decoder以c为预测y1的初始向量,同时作为背景向量指导输出序列中每一个步骤的y的输出。

数学表示:
假设hi为Encoder中的隐状态,那么Encoder的计算过程用公式表示为:
h i = f ( h i − 1 , x i ) h_i=f(h_{i-1},x_i) hi=f(hi1,xi)
假设si为Decoder中的隐状态,那么Decoder的计算过程用公式表示为:
s i = g ( s i − 1 , c ) s_i=g(s_{i-1},c) si=g(si1,c)

可以看到,传统的Seq2Seq模型对于输入序列X缺乏区分度。

Attention机制粗读_第2张图片
图二:Attention机制图解

参数解释:
[ x 1 . . . x T x_1...x_T x1...xT]表示输入序列,每个元素代表输入序列中的一个单词向量;
hi表示Encoder模块RNN的隐状态;
a i , j a_{i,j} ai,j表示Encoder端的第j个单词与Decoder端的第i个单词之间的权值和影响程度;
sj表示Decoder模型RNN的隐状态;
[ y 1 . . . y T ′ y_1...y_{T'} y1...yT]表示输出序列;
T, T’分别代表输入序列长度和Decoder层隐状态数目。

模型解释:
可以看到,最大的变化在于背景向量ci的计算方式(图中改成了Bi-RNN,但是这不是重点)
不是简单的直接将隐状态累加,而是加权累加。
权值的计算来自于encoder端单词对于decoder端单词的影响程度。

数学表示:
c i = ∑ j a i , j h j c_i=\sum_ja_{i,j}h_j ci=jai,jhj

a i , j = s o f t m a x ( e i , j ) = e x p ( e i , j ) ∑ k e x p ( e i , k ) a_{i,j}=softmax(e_{i,j})=\frac{exp(e_{i,j})}{\sum_kexp(e_{i,k})} ai,j=softmax(ei,j)=kexp(ei,k)exp(ei,j)
e i , j = a ( s i − 1 , h j ) e_{i,j}=a(s_{i-1},h_j) ei,j=a(si1,hj)

其中,a代表相关性算符, e i , j e_{i,j} ei,j衡量encoder端的j个词对于decoder端的第i个词的对齐程度/影响程度,计算的时候往往依赖encoder端的第j个隐状态和decoder端的第i-1个隐状态(因为第i个隐状态还没有计算出来呀)。
不同的计算方式代表着不同的Attention模型。

Concrete Model

Self-Attention

Attention机制粗读_第3张图片
Self-Attention的基本结构如上图所示。

直观理解:
首先对于模型

你可能感兴趣的:(NLP基础)