深度学习之注意力机制Attention
深度学习之注意力机制Attention一、Encoder-Decoder机制1.1 前言1.2 Encoder-Decoder原理二、Attention机制一、Encoder-Decoder机制1.1 前言Encoder-Decoder机制:编码-解码框架,大部分Attention模型都基于该机制,该机制处理序列-序列的问题,即输入一个序列,生成一个序列问题。比如:1)文本摘要,输入一篇文章(序列
深度学习之注意力机制Attention
一、基本Encoder-Decoder机制
1.1 前言
1.1.1 说明
- Seq2Seq 是一种重要的 RNN 模型,也称为 Encoder-Decoder 模型,可以理解为一种 N × M N×M N×M的模型。模型包含两个部分:Encoder 用于编码序列的信息,将任意长度的序列信息编码到一个向量 c c c里。而 Decoder 是解码器,解码器得到上下文信息向量 c c c之后可以将信息解码,并输出为序列。
- 传统的RNN模型采用N-N模型(输入为N维,输出为N维),N-1(输入为N维,输出为1维),1-N(输入为1维,输出为N维),输入输出模式比较固定,不灵活,所以采用Encoder-Decoder模型可将输入维度为N,映射为输出维度为M。
1.1.2 原理
- Encoder-Decoder机制:编码器-解码器框架,大部分Attention模型都基于该机制,该机制处理序列-序列的问题,即输入一个序列,生成一个序列问题。比如:
1)文本摘要,输入一篇文章(序列数据),生成文章的摘要(序列数据);
2)文本翻译,输入一句或一篇英文(序列数据),生成翻译后的中文(序列数据);
3)问答系统,输入一个question(序列数据),生成一个answer(序列数据);
- 编码器:将输入变成中间表达形式(特征);
- 解码器:将中间表示解码成输出;
1.2 基本Encoder-Decoder原理
- Encoder-Decoder框架在NLP领域中抽象后的最简单的结构图如下所示:
- Encoder:编码器,对于输入的序列
x
1
,
x
2
,
.
.
.
,
x
n
x_1, x_2,...,x_n
x1,x2,...,xn进行编码,使其转化为一个语义编码
C
C
C,语义编码
C
C
C存储了序列
x
1
,
x
2
,
.
.
.
,
x
n
x_1, x_2,...,x_n
x1,x2,...,xn的信息;
1)Encoder编码方式:文本处理领域主要有RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU;
2)对于上图中的序列 x 1 , x 2 , . . . , x n x_1, x_2,...,x_n x1,x2,...,xn,通过RNN生成隐藏状态序列 h 1 , h 2 , . . . , h n h_1, h_2,...,h_n h1,h2,...,hn,其确定语义编码 C C C的方式有几种?
①直接用最后时刻输出的 h t h_t ht作为 C C C的状态值,即用 h 4 h_4 h4直接作为语义编码 C C C的值;
②也可以将所有时刻的隐藏层的值进行汇总,然后生成语义编码 C C C的值,即 C = q ( h 1 , h 2 , h 3 , h 4 ) C=q(h_1,h_2,h_3,h_4) C=q(h1,h2,h3,h4), q q q是非线性激活函数。
得到了语义编码 C C C之后,就可以在Decoder中对语义编码 C C C进行解码了。 - Decoder:解码器,根据输入的语义编码 C C C,然后将其解码成序列数据,解码方式可以采用RNN/LSTM/GRU/BiRNN/BiLSTM/BiGRU。Decoder和Encoder的编码解码方式可以任意组合,并不是说我Encoder使用了RNN,Decoder就一定也需要使用RNN才能解码,Decoder可以使用LSTM,BiRNN。
- 解码方式1:如下图所示,参考论文使用 RNN 编码器-解码器学习短语表示进行统计机器翻译,语义编码
C
C
C包含了整个输入序列的信息,所以每一步都引入
C
C
C,文中Encoder-Decoder均使用RNN,在计算每一时刻的输出值
y
y
y时,都应该将
C
C
C作为输入,即
h
t
=
f
(
h
t
−
1
,
y
t
−
1
,
C
)
,
y
=
f
(
h
t
,
y
t
−
1
,
C
)
h_t=f(h_{t-1},y_{t-1},C), y=f(h_t,y_{t-1},C)
ht=f(ht−1,yt−1,C),y=f(ht,yt−1,C),其中
h
t
h_t
ht为当前时刻
t
t
t的隐藏层神经元的值,
y
t
−
1
y_{t-1}
yt−1为上一时刻的预测输出值,作为
t
t
t时刻的输入,每一时刻的语义编码
C
C
C是相同的。
- 编码方式2:参考论文使用神经网络进行序列到序列学习只在Decoder的初始出入引入语义编码
C
C
C,将语义编码
C
C
C作为隐藏层状态值
h
0
h_0
h0的初始值,输出值
y
t
=
f
(
h
t
,
y
t
−
1
)
y_t=f(h_t,y_{t-1})
yt=f(ht,yt−1)。
- 普通的Encoder-Decoder结构存在的问题:最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量 C C C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量 C C C中去。但是这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,二是先输入的内容携带的信息会被后输入的信息稀释掉,或者被覆盖了。输入序列越长,这个现象就越严重。
二、Attention机制
2.1 Attention基本原理
- 注意:
1)encoder(编码器)对每个次的输出作为 k e y key key和 v a l u e value value,它们是相同的;
2)decoder(解码器)对上一个词的输出作为 q u e r y query query;
参照上图理解Attention,将Source中的包含一系列<Key,Value>数据对(key和value是相等地,都是encoder的输出值
h
h
h),此时给定Target中的某个元素Query(即decoder中的
h
i
h_i
hi),通过计算Query和各个Key的相似性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。第一阶段进行相似度计算:
A
t
t
e
n
t
i
o
n
(
Q
u
e
r
y
,
S
o
u
r
c
e
)
=
∑
i
=
1
n
S
i
m
i
l
a
r
i
t
y
(
Q
u
e
r
y
,
K
e
y
i
)
∗
V
a
l
u
e
i
(1)
\begin{aligned} Attention(Query, Source)=\sum_{i=1}^n Similarity(Query, Key_i)*Value_i \end{aligned} \tag{1}
Attention(Query,Source)=i=1∑nSimilarity(Query,Keyi)∗Valuei(1)
其中
n
n
n是Key, Value对的个数,
S
i
m
i
l
a
r
i
t
y
(
Q
,
K
i
)
Similarity(Q, K_i)
Similarity(Q,Ki)的计算方式如下:
点
积
:
S
i
m
i
l
a
r
i
t
y
(
Q
u
e
r
y
,
K
e
y
i
)
=
<
Q
u
e
r
y
,
K
e
y
i
>
余
弦
相
似
度
:
S
i
m
i
l
a
r
i
t
y
(
Q
u
e
r
y
,
K
e
y
i
)
=
<
Q
u
e
r
y
,
K
e
y
i
>
∥
Q
u
e
r
y
∥
∗
∥
K
e
y
i
∥
M
L
P
单
层
隐
藏
层
神
经
网
络
:
S
i
m
i
l
a
r
i
t
y
(
Q
u
e
r
y
,
K
e
y
i
)
=
M
L
P
(
Q
u
e
r
y
,
K
e
y
i
)
(2)
\begin{aligned} 点积:Similarity(Query, Key_i)=<Query, Key_i>\\ 余弦相似度:Similarity(Query, Key_i)=\frac{<Query, Key_i>}{\|Query\|*\|Key_i\|}\\ MLP单层隐藏层神经网络:Similarity(Query, Key_i)=MLP(Query, Key_i) \end{aligned} \tag{2}
点积:Similarity(Query,Keyi)=<Query,Keyi>余弦相似度:Similarity(Query,Keyi)=∥Query∥∗∥Keyi∥<Query,Keyi>MLP单层隐藏层神经网络:Similarity(Query,Keyi)=MLP(Query,Keyi)(2)
第一阶段计算出Query和
K
e
y
i
Key_i
Keyi的相似度后,第二阶段将相似度得分进行softmax计算(一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax机制突出重要元素的权重),一版采用如下公式计算:
α
=
S
o
f
t
m
a
x
(
S
i
m
i
)
=
e
S
i
m
i
∑
j
=
1
n
e
S
i
m
i
(3)
\begin{aligned} \alpha=Softmax(Sim_i)=\frac{e^{Sim_i}}{\sum_{j=1}^n e^{Sim_i}} \end{aligned} \tag{3}
α=Softmax(Simi)=∑j=1neSimieSimi(3)
上式中的
α
i
\alpha_i
αi即为
V
a
l
u
e
i
Value_i
Valuei的权重系数,第三阶段进行加权求和即可得到Attention的数值,如下所示:
A
t
t
e
n
t
i
o
n
(
Q
u
e
r
y
,
V
a
l
u
e
i
)
=
∑
i
=
1
n
α
i
∗
V
a
l
u
e
i
(4)
\begin{aligned} Attention(Query, Value_i)=\sum_{i=1}^n \alpha_i*Value_i \end{aligned} \tag{4}
Attention(Query,Valuei)=i=1∑nαi∗Valuei(4)
2.2 Attention总结
阶段1:Query与每一个Key通过F函数得到相似性评分s;
阶段2:将s评分进行softmax转换成[0,1]之间的概率分布;
阶段3:将
[
α
1
,
α
2
,
α
3
…
α
n
]
[\alpha_1,\alpha_2,\alpha_3…\alpha_n]
[α1,α2,α3…αn]作为权值矩阵对每一个Value进行加权求和得到最后的Attention值。
- 参考网址:
- https://blog.csdn.net/Tink1995/article/details/105012972?spm=1001.2014.3001.5501
- https://blog.csdn.net/u014595019/article/details/52826423?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
- https://zhuanlan.zhihu.com/p/75750440
更多推荐
所有评论(0)