
转载自:Datawhale(ID:Datawhale)
作者:yif
本文8434 字 41 图,建议阅读22 分钟。
本文介绍深度学习中的 Attention 模型。
Attention 的产生
起因:《Sequence to Sequence Learning with Neural Networks》
Attention 模型的引入原因:
- seq2seq 将输入序列都压缩成一个固定大小的隐变量,就像我们的压缩文件一样,这个过程是有损压缩的,会迫使丢失许多输入序列中的信息;
- 存在着难以对齐的问题。比如中译音 “我爱你”“I love you”, 输入序列中的“我” 应该与 “I” 对齐 (贡献最大),然而在 seq2seq 模型中,“我” 对 “I”,”love”,”you” 的贡献都是一致的。

Attention 的发展
Show, attend and tell: Neural image caption generation with visual attention
本文可以算是第一篇 Attention 论文。

该任务是实现图文转换。与前面讲述的 seq2seq 的问题一样,在之前的图文转换任务中也是存在着难以对齐的问题。所谓难以对齐就是毫无重点。
本文提出了两种 attention:
- sort Attention
- hard Attention
本文的模型结构:

将图片通过一个 CNN 转换成的 LD. 这里称 L 个向量为 L 个注释向量 (annotation vector),D 为特征维度,可以认为提取了图片中 L 个区域的特征。对这 L 个区域向量加权相加来表示这张图片。由于不同时刻的关注点是不同的,annotation vector 还要与 decoder 中的隐状态进行交互,以便知道下一时刻的关注区域。

这里编码器是 VGG,解码器是 LSTM。LTSM 输入是不同时刻的图片的关注点信息,然后生成当前时刻的单词。
Attention 的计算
如上所属,attention 的值不仅与 annotation vector 有关,还与上一时刻解码器的隐状态有关。因此有:

其中 t 表示时刻 t,i 表示第 i 个区域,a 是我们得到的 attention weight 分布。
f 实际上是对齐函数,用于计算对齐的分数,常见的对齐函数有:dot product,general,multilayer perceptron。
1,Soft attention:直接使用 attention 的权重对 L 个向量加权相加,这么做的好处是整个问题是可微的,可以利用 BP end to end。

2,Hard attention:Hard attention 很粗暴,挑出最大权重的向量,剔除其余向量 (置 0)。显然这种形式的模型是不可微的,为了实现 BP,这里采用蒙特卡洛采样的方法来估计模块的梯度。

帮助我们在 t 时刻选出了第 i 个向量是我们最后选中的的向量,引入一个变量, 当区域 i 被选中时取值为 1,否则为 0. 则有:
问题如何生成, 在本文中,将视为隐变量,为参数是的多元伯努利分布 (伯努利是两点分布)
pip install torchfrom math import sqrt()
