为什么 Transformer 在推理时有序列限制?

人工智能 机器学习 自然语言处理 变压器 建筑学 序列建模
2021-11-12 03:54:59

据我了解,Transformer 的时间复杂度相对于序列长度呈二次方增加。因此,在训练期间为了使训练可行,设置了最大序列限制,并且为了允许批处理,所有较小的序列都被填充。

但是,在训练 Transformer 之后,我们想在推理时在单个序列上运行它,计算成本远远低于训练。因此,我希望在推理期间以更大的输入序列长度运行转换器似乎是合理的。从技术角度来看,这应该是可行的。

我一直在网上阅读,Transformer 不能在大于训练期间看到的序列大小上运行。为什么是这样?是不是因为网络权重对这个长度的序列不熟悉?还是更根本?

2个回答

由于位置嵌入,Transformer 模型在推理时的序列长度有限。但是有一些解决方法。

Transformer 中的自注意力不区分键/值的顺序,它就像序列是一袋单词一样工作。

因此,为了向模型公开序列顺序,通常会为每个输入标记嵌入添加一个额外的“位置嵌入”向量。然后,这些额外的位置信息允许模型构造原语,例如“查看前一个标记的注意力头”。

如何准确地做到这一点有几种变体。

一种方法是使用额外的可训练参数矩阵 [L,M],其中 L 是最大输入长度,M 是模型维度。以这种方式训练模型后,根本不可能嵌入位置 > L 的标记。因此我们得到了一个没有解决方法的硬限制。

另一种方法是使用由一组特制的正弦曲线初始化的不可训练矩阵 [L,M](原始的“attention is all you need”论文就是这样做的)。以这种方式训练的模型没有长度限制,因为这个正弦曲线矩阵可以扩展到任意大小。

是的,另一种方法是使用“相对位置编码”。有了这个,对于每对标记,您都可以使用相对位置,该位置将在 [-L ... +L] 范围内,然后将其嵌入。然后以正确的方式将此向量注入注意力层(https://arxiv.org/pdf/1901.02860.pdf中的第 3.3 节)。

现在你仍然有 [-L, L] 的限制。但是您始终可以将相对位置“裁剪”到此范围,并假设距离 >= L 处的所有标记对具有相同的相对位置(“彼此相距很远”)。这允许使用更长的输入运行推理。

在某种程度上,这是真的;可以添加或减去分段前馈层以适应序列长度。矩阵运算可以类似地缩放以适应序列长度。

然而,计算复杂度来自注意力层中的矩阵运算。那些没有受过训练;注意机制中没有经过训练的参数(参见图 2 和 Vaswani 等人的方程(1))。因此,这些也必须在推理期间进行计算。

另一个挑战是输出层。该层是常规前馈层,因此具有固定的输入大小;也就是说,您不能在推理过程中添加新参数。

当然,对此有一个警告;现在有允许重复的转换器,例如 Transformer-XL 和 Memformer。在某种程度上,这些确实允许比“最大序列长度”更长的输入序列。