博主刚刚入门深度学习领域,然后最先接触的是Transformer的相关学习
然后对其框架中self-attention中的Attention机制进行了简单学习
文章也是学习借鉴很多大佬的文章笔记,仅供大家参考,如果有疏忽遗漏欢迎大家在评论中指出
是什么Attention
引入Attention机制是为了解决传统encoder-decoder模型存在的信息丢失问题
encoder将输入的信息(句子)压缩为一个定长的向量,然后decoder将其解码转换为对应的信息(句子),然而,在encoder的压缩过程中,对于较长的信息(句子),会存在信息丢失的问题。
因此提出Attention机制,通过对不同的输入分配不同的权重,然后在decoder解码过程中选出对当前决策影响(权重)最大的特征值
优点
- 参数少
- 与CNN,RNN相比,复杂度和所需的参数较少
- 速度快
- 每一步的计算不依赖与上一步的计算结果,因此可以进行并行计算
原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iU8Xv1o3-1620981095706)(Attention简单了解/2019-11-13-3step.png)]
步骤
- query和key进行相似度计算(对齐模型),得到权值
- 将权值进行softmax归一化,得到可直接使用的权重
- 将权重与value进行加权求和
相似度计算
- 点乘
- s ( q , k ) = q T k s(q,k)=q^Tk s(q,k)=qTk
- 矩阵相乘
- s ( q , k ) = q T k s(q,k)=q^Tk s(q,k)=qTk
- cos相似度
- s ( q , k ) = q T k ∣ ∣ q ∣ ∣ ∗ ∣ ∣ k ∣ ∣ s(q,k)=\frac{q^Tk}{||q||*||k||} s(q,k)=∣∣q∣∣∗∣∣k∣∣qTk
- 串联,将q与k拼接起来
- s ( q , k ) = W [ q ; k ] s(q,k)=W[q;k] s(q,k)=W[q;k]
- 多层感知concat
- s ( q , k ) = v a T t a n h ( W q + U k ) s(q,k)=v_a^Ttanh(W_q + U_k) s(q,k)=vaTtanh(Wq+Uk)
本质思想
从关注全部到关注重点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJycz2ro-1620981095707)(Attention简单了解/2019-11-13-only-attention.png)]
将source中的的元素理解成一个个<key,value>数据对,对于Target中的某一个query,计算query与key的相似度,得到每个key对应的value权重,然后对value进行加权求和,得到最终Attention数值。
A
t
t
e
n
t
i
o
n
(
Q
u
e
r
y
,
S
o
u
r
c
e
)
=
∑
i
=
1
S
a
l
i
g
n
(
Q
u
e
r
y
,
K
e
y
)
∗
V
a
l
u
e
Attention(Query,Source)=\sum_{i=1}^{S}align(Query,Key)*Value
Attention(Query,Source)=i=1∑Salign(Query,Key)∗Value
分类
计算区域
Soft Attention
对所有key求权重概率,每个key都有对应一个权重。
缺点,计算量较大
Hard Attention
精确定位到一个key,即该key的权重概率为1,其余key的概率为0。
实现
- 选取概率最高的输入信息
- 在对齐模型的概率分布上进行随机采样
缺点,损失函数与Attention分布之间的函数不可导,无法在反向传播算法中训练
Local Attention
综合上述两种Attention,先用Hard Attention定位到某个点,然后以该点为中心得到一个窗口区域,在该区域使用Soft Attention
所用信息
对一段文本使用Attention所需要的信息,包括
- 内部信息,该文本本身
- 外部信息,除该文本的额外信息
General Attention
所有信息参与计算
通常用于构建两段文本关系的任务,如阅读理解中,问题与文章的联系
query包含外部信息,根据外部query对文本进行对齐
Local Attention
只使用内部信息,即key,query,value只与输入文本有关