原文
深度学习中注意力如何工作:理解 序列模型 中的 注意力原理: How Attention works in Deep Learning: understanding the attention mechanism in sequence models.
翻译说明:
attention : 注意力
transformer :翻译器、迁移,或不翻译
token:词,或不翻译
翻译
什么是注意力?
- 记忆是时间上的注意力。~ Alex Graves 2020 [1]
注意力机制 很自然地 从 时变数据(序列)问题 中 浮现。
既然 用了 “序列”一词,让我们 以 机器学习 术语 来 公式化 该问题。
在处理序列的通用任务中 注意力很流行。
序列到序列 学习
在注意力和翻译器之前,序列到序列 (seq2seq) 工作的很棒,如下图:
序列的元素 x1,x2,等 通常 叫 token。token可以是任意字面量。例如,文本表示、像素、甚至视频中的图像。
为什么用这样的模型?
- (因为) 目标是 翻译 输入序列(源) 为 新序列(目标)。
两个序列的长度相同,也可以任意长度。
循环神经网络(rnn)支配这类任务。原因很简单:我们喜欢把序列看作顺序的。
听起来 很明显 也很优?transformer告诉我们不是这样的。
译者:因为, 对一个序列而言,token相邻未必相关,不相邻也未必不相关。序列看起来是顺序的(比如表达为链表),但其实是个图。
扫描二维码关注公众号,回复: 12663785 查看本文章
编码器-解码器 的高层视角
编码器、解码器 其实就是 堆叠的 RNN层(例如LSTM)。
编码器 从 所有输入时间步 产生压缩表示,通常叫z。z被当作输入的一个压缩形式。
解码器 接受 上下文向量z,然后产生输出序列。seq2seq的最常见应用是语言翻译。可以想象 输入序列 表示一个英文句子,输出序列 表示 法语句子(意思相同)。
事实上,基于RNN的架构 仅仅在 小于20个时间步的情况下 工作的很好。可视化如下:
下面 叙述 原因。
RNN的限制
无法压缩长句子
中间表示z不能编码输入的全部时间步。这常被成为 瓶颈问题。向量z需要捕捉源句子的全部信息。
理论上,数学表明 这是可能的。然而在实践中,从当前位置能看到多远的过去是有限的(这叫 参考窗口)。RNN倾向于忘记太远的(相距时间步太长)信息。
大多数情况下,向量z不能压缩早期单词。
梯度倾向于句末、对句首的梯度倾向于消失
最后,系统 在 句子的最后部分 花了太多注意力。对于 序列任务,这不是最佳方案。并且 人类也不是用这种方式 翻译或理解语言的。
而且,层叠的RNN层常产生梯度消失问题,可视化如下:
这个层叠的RNN可能导致梯度消失
(译者: 颜色深浅表示梯度大小,水平方向表示输入的序列)
因此,让我们跳出 标准的 编码器-解码器 RNN。
注意力来营救RNN
attention的诞生是为了解决上面的两个问题的。怎么解决?
核心想法 是 上下文向量z应该访问 输入序列的 所有部分,而不是 只访问 最后一个单词。
换句话说,我们需要 对 每个时间步 直接连接。
这个想法 最初 在 计算机视觉 被 提出。Larochelle and Hinton [5] 提出 : 瞥一眼 图像的不同部分 ,能 学到 一个局部形状的信息,并据此分类该图像。
同样的原理 后来被扩展到序列。在同一时刻 ,观察所有不同的单词,对 不同的任务 学会 注意 该任务相关的多个单词。
这就是 我们所说的注意力,她简直就是记忆。沿着时间轴关注多个不同的单词 ,这就形成了记忆。
以我的拙见,理解这个概念的通用性 很重要。从这里到本文结束,注意力原理的分类。
注意力类型:隐式 vs 显式
在说 机器翻译怎么使用注意力 的 具体例子之前,声明一点:
超深神经网络 已经 学到 隐式注意力 的 一种形式 [6]
深度网络 是 非常 丰富的 函数逼近器。所以,没有进一步修改,他们倾向于 忽略输入的这些部分 而 倾向于 聚焦在那些部分(译者:因为那些部分是和目标函数相关的,而这些部分与目标函数无关)。 例如,人类姿势检测,该网络 对于 人类身体的像素 更敏感。 视频的 自监督方法 例子如下:
“很多激活单元偏爱人类身体部分和姿态” Misraetal. 2016
可视化 隐式注意力 的 一个方法 是 Jocabin 矩阵 ,这超出了本文范文。
然而,我们有多种原因 强迫 隐式注意力 显式化。对人类思想来说,注意力是 特别直观 且 可解释的。因此 , 要求 网络 基于 记忆 对 先前的多个输入 的敏感度 权重化,我们 引入了 显式 注意力。从现在开始,我们称显式注意力为注意力。
注意力类型:硬 vs 软
软注意力(可微函数)
另一个注意力分类是:硬注意力和软注意力。
前面所有例子,我们所说的注意力是一个可微函数。文献上,把可微函数注意力叫做软注意力。正式定义:
软注意力 意味着 该函数 在她的定义域 平滑的改变,所以,她是可微的
硬注意力(离散函数)
在历史上,有另一个概念叫 硬注意力。
一个直观例子: 想象 迷宫中 一个机器人 ,必须要 对 走哪条路 做出 硬决定(离散决定) ,如红箭头所示:
区别和联系
一般而言,硬 意味着 离散变量,而 软意味着 连续变量(译者:例如softmax中的软)。换句话说,硬注意力 不使用 确定性方法 而使用 随机采样模型。
接下来的这个例子中(译者:硬注意力例子),在图像中 从一个随机位置开始 找到 对分类而言 的 “重要像素”。大致来说,训练阶段,该算法必须要选一个方向 以进入该图像。
既然 硬注意力 是 不可微分的,那就不能用标准的梯度方法。这就是为什么 需要 用 强化学习(RL)技术 来训练 硬注意力模型。强化学习技术,例如 策略梯度和强化算法 [6]
译者:离散函数梯度不存在,因为定义域只有有限个点 无法定义 无穷小
不过,强化算法和类似的强化学习方法 的主要问题 是 高方差。总结如下:
硬注意力 被 当作 用于 确定 是否 注意 一个区域 的 开关 ,这 意味着 该 函数 在 其顶医院 有 很多 突变 。
译者:高方差,简单理解 就是 太分散,拟合曲线 在 目标曲线 上下 分散的太多 。
译者:高偏差,简单理解 就是 平移量太大,拟合曲线 实际 是 目标曲线 上或下 平移了 太多。
最后,假设 已经有 所有 可用的 token,可以 松弛 硬注意力的定义。 以这种方式,得到 一个光滑可微函数 ,可以用梯度下降法 端到端的训练。
译者:离散函数松弛化 为 连续函数,但并不是总是可行
编码器-解码器 例子 中的 注意力
译者: 翻译到这里,我发现 这一小节的 有错误,而且错误不少。 但是 它引用的 内容 没错误,所以,接下来 ,翻译 引用1