深度学习(六)~注意力机制
注意力机制
1. 为什么要引入注意力机制?
- ①计算能力的限制
要记住更多信息,模型就更复杂,计算能力有限
- ②优化算法的限制
虽然局部连接、权值共享、池化以及门控等优化操作可以使神经网络变简单一些,但比如RNN中的长程依赖问题,信息“记忆”能力不高
- ③如何解决信息过载问题
①通过注意力 ,自上而下的信息选择
②引入外部记忆 ,优化神经网络记忆结构提高信息存储容量
2. 注意力分类
注意力分为聚焦式注意力 (有意识的信息选择)和显著性注意力 (无意识的信息刺激)
鸡尾酒会效应: 当一个人在吵闹的鸡尾酒会上和朋友聊天,尽管周围噪音很多,还是可以听到朋友讲话(聚焦式注意力),如果背景中有重要的词比如他的名字,他会马上注意到(显著性注意力).
3. 注意力机制计算步骤
①【在所有输入信息上计算注意力分布】
②【根据注意力分布计算输入信息的加权平均】
查询向量q: 从输入向量中选择和某个特定任务相关的表示
打分函数s: 计算每个输入向量和查询向量之间的相关性
注意力分布αn:
4. Encoder-Decoder框架
(1). RNN-Encoder阶段
(2). RNN-Decoder阶段
(3). Attention-Decoder阶段
加入注意力机制后的Decoder与上述不同的是,c变为ct,即注意力分布c不是一直不变的,每个时刻对应一种注意力分布ct
5. 注意力机制实现形式
(1). 软性注意力
(2). 硬性注意力
①选取最高概率的一个输入向量
②在注意力分布式上随机采样
缺点是采用最大采样或随机采样来选择信息,使得最终损失函数与注意力分布之间不可导,无法使用反向传播进行训练,通常需要使用强化学习来训练,因此一般用软性注意力代替.
(3). 键值对注意力
用(K,V)表示N组输入信息,即将求注意力分布的两条路径拆分开来(K,V),K计算概率分布,V计算输入信息的选择,注意力函数为:
多头注意力
利用多个查询Q=[q1,…,qM]并行的选择多组信息,每个注意力关注输入信息的不同部分
⊕表示向量拼接
6. Self-Attention
将求K、V的过程简化,直接将输入信息X线性映射到Q、K、V,自动学习映射相关参数
hn为对应于查询向量qn的输出向量,anj表示第n个输出关注到第j个输入的权重
7. Self-Attention如何应用
- 自注意力模型可以作为神经网络中的一层,可以替换卷积或循环层,还可以和它们一起交替使用
- 自注意力模型计算的权重αij只依赖于qi和kj的相关性,而忽略了输入信息的位置信息,因此一般使用时,需要加入位置编码信息进行修正