前篇链接 link
目录
第八章 Attention
- 上一章我们使用 RNN 生成了文本,又通过连接两个 RNN,将一个时序数据转换为了另一个时序数据。我们将这个网络称为 seq2seq,并用它成功求解了简单的加法问题。之后,我们对这个 seq2seq 进行了几处改进,几乎完美地解决了这个简单的加法问题。
- 本章我们将进一步探索 seq2seq 的可能性(以及 RNN 的可能性)。这里,Attention 这一强大而优美的技术将登场。Attention 毫无疑问是近年来深度学习领域最重要的技术之一。
- 本章的目标是在代码层面理解 Attention 的结构,然后将其应用于实际问题,体验它的奇妙效果。
Attention结构
seq2seq的改进—— h 到 hs
- 问题:对于变长的输入序列,编码器只能输出定长的编码h
- 解决:将编码器每一个LSTM单元输出的隐藏状态拼接为 hs,作为译码器输入 ,如下图
seq2seq的改进—— 解码器层结构调整
形如“猫 = cat“是机器翻译中常见的对应关系,这种单词或词组对应关系的信息称为alignment(对齐)。Attention机制的关键就在于自动化学习对齐。
- 对于解码器的每一个LSTM单元,如何让它们自动化的选择输入的hs当中具有对应关系的h并学习,需要改进层结构,添加下图中的”某种运算“,即Attention
Attention层的引入
- 将不可微分的选择操作转换为hs各个隐藏状态的权重贡献度
Attention的结构
- 构成上图中的 某种计算 模块
- 由weight sum层(自动化学习各隐藏状态的贡献度,得到权重分布) 和 Attention Weight层(将得到的权重分布与 hs 各个隐藏向量做加权求和,实现选择操作) 依次组成
Weight Sum层
- 计算图如下
- N 是batch-size,T 是 hs 中包含的隐藏状态数,H是隐藏状态的维度
- 其中 a(N, T) 是解码器中一个LSTM单元输出的隐藏状态
- a(N, T) 与 hs 的各个隐藏状态做向量内积,得到了当前的LSTM单元对 hs 各个隐藏状态的关注度 S(N, T)
- 将 S(N, T) 做 softmax ,得到权重分布
本书中,作者使用向量内积去计算隐藏状态间的相似度,还可以使用余弦相似度甚至使用一个小型的MLP直接学习相似度等等。
Attention Weight层
- 计算图如下(红框部分):
- 对 weight sum得到的权重分布,与 hs 做加权求和,实现选择的操作,输出 C(N, H),作为 Attention 层的下一层 Affine 层的输入
解码器总的网络架构
将 Attention 计算出的权重可视化,观察对应关系
- 示例:一个简单的seq2seq模型(将输入的日期格式转化为输出的日期格式),横轴是输入语句,纵轴是输出语句,越亮的区域表示的对应关系越明显
总结
-
在翻译、语音识别等将一个时序数据转换为另一个时序数据的任务中,时序数据之间常常存在对应关系(alignment);
-
Attention 从数据中学习两个时序数据之间的对应关系;
-
Attention 使用向量内积(方法之一)计算向量之间的相似度,并输出这个相似度的加权和向量;
-
因为 Attention 中使用的运算是可微分的,所以可以基于误差反向传播法进行学习;
-
通过将 Attention 计算出的权重(概率)可视化,可以观察输入与输出之间的对应关系;
-
在基于外部存储装置扩展神经网络的研究示例中(如 NTM),Attention 被用来读写内存;