由于位置嵌入,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 处的所有标记对具有相同的相对位置(“彼此相距很远”)。这允许使用更长的输入运行推理。