相对位置编码(RPE)摒弃了给每个字绝对位置编号的思路,转而用序列中任意两个token之间的距离来刻画顺序信息。这种方式让模型在推理时不被训练时见过的最大长度绑死,尤其适合需要处理长文档或流式输入的场景。Transformer-XL和T5虽然都采用了RPE,但在推理实现上的具体路径差别明显,一个靠递归缓存,一个靠统一偏置。
Transformer-XL的推理实现机制
Transformer-XL最核心的推理特性是段级递归(segment-level recurrence)。在推理时,模型不会每来一个新段就从头算注意力,而是把上一段算好的隐藏状态缓存下来,作为当前段的记忆。这样做的好处是,当前段中的每个token都能注意到前面若干个段的历史信息,而相对位置编码正好用来描述当前token与历史token之间的距离。
具体实现上,假设缓存长度为M,当前段长度为L,那么注意力计算时的key和value就由当前段和缓存段拼接而成,总长M+L。相对位置编码在这里通过正弦函数或可学习的偏向项,把相对距离i-j映射成一个向量,再与查询和键交互。推理时,每处理完一个段,就把最老的M个隐藏状态挤出缓存,写入最新的L个,形成滑动窗口式的记忆。
推理时的相对注意力公式落地
在标准自注意力中,分数计算是QK转置。Transformer-XL把K拆成两部分:内容项和相对位置项。推理代码里通常会预计算相对位置编码矩阵,大小是(M+L)乘(M+L),只取上三角或合适偏移的部分。由于缓存段在前面,当前段在后面,相对距离对当前token来说都是负的或零,实现时直接用索引偏移即可,不需要每次重新生成全表。
这种实现让Transformer-XL在推理长文本时显存占用稳定,不会因为文本变长而线性暴涨。实际部署常把缓存放在GPU显存或CPU内存,根据延迟要求权衡。需要注意,如果相对位置编码是可学习参数,预设最大相对距离要覆盖M+L,否则推理时越界距离会被截断或 clamp,影响远距离依赖的捕捉。
T5的相对位置编码推理实现
T5把RPE做得更简洁:它不为每个层单独设计复杂递归,而是在每一层注意力的分数计算里,加上一个只和相对位置有关的偏置项。训练时学习一组标量偏差,推理时直接查表。T5将相对距离分桶,超出最大距离的位置都被塞进最近的一个桶,这样无论推理序列多长,偏置表大小固定。
在推理阶段,T5通常按批次喂入序列,没有Transformer-XL那种跨段缓存。它的相对位置偏置在self-attention和cross-attention里都生效。因为偏置是加在QK分数矩阵上的,所以实现时先算标准分数,再根据i-j的桶号加上对应标量。由于桶是固定的,推理代码里只需一个轻量查找,不增加明显计算量。
分桶策略对推理的影响
T5默认把相对距离分成大约32个桶,近处距离细致、远处距离粗糙。推理时如果输入比训练时更长,远处token全都落进同一个最远桶,模型把它们视为等距。这虽损失了精确远距离位置,但保证了数值稳定和泛化。做摘要或翻译推理时,这种实现让T5能直接处理超过512的输入,而不必像绝对位置模型那样重训或做复杂插值。
对比Transformer-XL,T5的推理实现更像一个即插即用的偏置模块,不需要维护外部状态。因此在服务化部署时,T5更容易做成无状态接口,每次请求独立;而Transformer-XL若要发挥长依赖优势,必须保留会话级缓存,工程上稍重。
二者推理实现对比小结
| 维度 | Transformer-XL | T5 |
|---|---|---|
| 缓存需求 | 需要段隐藏状态缓存 | 无需跨步缓存 |
| 相对距离处理 | 连续编码或学习向量 | 分桶标量偏置 |
| 超长序列推理 | 靠递归记忆扩展 | 靠分桶截断扩展 |
| 部署状态 | 有状态服务 | 无状态接口友好 |
从上面的对照能看出,相对位置编码在两家模型里都解决了绝对位置的外推难题,但Transformer-XL偏向记忆延续,T5偏向结构统一。选型时若业务是流式长文理解,XL类更合适;若是批处理生成任务,T5的简洁推理实现优势明显。
理解RPE的推理实现,关键看位置信息在哪一步融进计算图,以及推理时是否引入额外状态。把这两点理清,改模型或做加速都有了抓手。
相对位置编码RPETransformer_XL_T5推理修改时间:2026-08-11 11:18:31