Home / 大语言模型 / Transformer-XL:跨片段复用状态,避免每段都从失忆开始

019|Transformer-XL:跨片段复用状态,避免每段都从失忆开始

目录 · 上一篇 · 下一篇

论文:Zihang Dai 等,Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context,2019。原文 · PDF。重点是片段级循环与相对位置编码,不把它混同于任意现代 KV cache 或无限上下文记忆。

图表来源:Zihang Dai 等,2019,原文;CC BY-NC-SA 4.0。本篇展示做了图形区域裁切、PNG格式转换、按原图面板顺序拼合,图中数据与标签未改动。图形处理版本同样采用该许可,保留非商业与相同方式共享条件。

先接住前作的问题

Transformer建立直接位置交互,但固定训练片段仍切断前缀,评价重叠片段还可能重复计算。本篇直接扩展其架构,把旧隐藏状态作为记忆复用,并解决片段位置重置造成的歧义。与RNNLM截断训练的联系是教学对照,缓存多个层次位置不是同一循环拓扑。

五个前置概念

五个前置概念是缓存、停止梯度、相对位置、上下文碎片化和有效上下文长度。理解这几项便能区分“名义窗口”“实际可利用跨度”和“训练信号传播范围”,避免把它们都写成同一个长度。

一、问题设定:片段边界丢掉的前缀能否复用而不保留全部反向图

固定片段让当前token看不到上一段信息,也让每段开头缺少正常前缀;即使任务没有很长依赖,后一个问题仍会增加损失。评价时重算重叠前缀又增加成本。本篇希望复用旧表示,同时把前向历史长度与反向训练图大小分开。

第三个问题是位置表示。若每个片段都从位置 1 开始,旧片段位置 1 与当前片段位置 1 会冲突。直接缓存带绝对片段位置的表示,可能让模型无法一致判断距离,因此状态复用需要位置机制配合。

二、追踪旧状态键值、停止梯度与相对位置

设第 τ\tau 段第 n−1n-1 层表示为 hτn−1h_\tau^{n-1},当前片段为 hτ+1n−1h_{\tau+1}^{n-1}:

h~τ+1n−1=[SG⁡(hτn−1);hτ+1n−1],\widetilde h_{\tau+1}^{n-1} =[\operatorname{SG}(h_\tau^{n-1});h_{\tau+1}^{n-1}],

其中 SG 表示停止梯度。当前查询来自当前片段,键和值来自拼接后的扩展上下文。这样当前预测可以读取旧表示,但损失不会穿过旧片段继续反向传播。

停止梯度减少训练图和内存需求,也引入近似:旧表示不是在当前损失下重新计算并更新的完整长图。前向信息跨度、直接注意力窗口与反向传播长度因此是三个不同概念,不能只写“上下文长度”一个数字。

相对位置编码把注意力中的位置关系写为查询与键之间的距离等项,使缓存移动到更远历史时仍有一致语义。原论文对内容项和位置项作分解,不能仅把绝对位置编号改成负数就假定复现了方法。

stop-gradient到底切断哪里

令 holdh_{old} 为旧片段缓存的隐藏状态、hh 为当前片段隐藏状态,WK,WVW_K,W_V 为键和值投影矩阵,方括号分号表示沿序列轴拼接,SG⁡\operatorname{SG} 表示停止梯度。记忆 m=SG⁡(hold)m=\operatorname{SG}(h_{old}) 仍参与 K=[m;h]WKK=[m;h]W_K 与 V=[m;h]WVV=[m;h]W_V,因此当前损失对 WK,WVW_K,W_V 仍有来自记忆内容的梯度;被切断的是回到生成 holdh_{old} 的旧片段计算图。由于第n层读取上一片段第n−1层的状态,跨片段依赖沿层数向下移动,不能把它画成无限次数的同层循环。原文式1及图2将“缓存内容可用”与“旧计算图可训练”分得很清楚。

Transformer-XL在连续片段间复用隐藏状态及扩展上下文的机制
原文图形摘引:Zihang Dai 等,2019,图2,PDF第4页;核对原文。

构造片段一包含“主角叫林”,片段二出现“他回到家”。当前段可以读取上一段表示,因而改善代词相关预测。但若损失发现片段一没有保存角色信息,停止梯度意味着这次更新不能直接穿过上一段重新教它编码早期 token。

模型仍能在其他训练位置逐渐学会形成有用表示,所以停止梯度不等于旧表示永远学不到;只是当前一次训练图的路径有限。这个区别与循环网络截断 BPTT 类似,却在缓存多个位置与层间连接上有自己的结构。

跨段缓存怎样改变可见距离与训练距离

取每段4个位置、缓存4个旧状态。第二段末位可经缓存读取上一段表示,但本次损失不会沿缓存回到上一段的构造图;当前层对缓存的读取投影仍然能学习。缓存“停止梯度”不等于把所有与缓存相乘的参数也冻结,这是核对detach放置位置的关键。

教法联系:Lilian Weng的The Transformer Family。算例为本文自构。

三、分别设置缓存长度、查询片段与文档重置

输入:按顺序排列的文本片段、各层记忆缓存
对当前片段:
    对每一层 n:
        extended ← concat(stop_gradient(memory[n]), current_hidden)
        Q ← 当前片段投影
        K,V ← extended 投影
        按相对位置关系计算因果注意力
        得到当前层新表示
    计算当前片段下一词损失并更新参数
    将允许长度的历史表示写入各层缓存
文档边界按协议重置缓存,避免不合法跨文档信息
输出:可复用记忆的语言模型

目标仍是语言建模似然;机制是跨片段状态复用与相对位置;指标包括 PPL、bpc、评价速度和上下文利用。缓存不能自动成为外部事实数据库,也不会独立验证存储内容。

教学算例。 当前片段长4,缓存8个旧位置,单头分数矩阵为 4×124\times12,不是 12×1212\times12:旧位置只供读取,当前才产生查询。若每层宽度64,仅这份旧隐藏状态含 8×64=5128\times64=512 个数;延长缓存改善可见范围,也线性增加存储,且不能恢复在旧状态编码时已丢失的信息。

四、区分边界修复、长程利用和评价重算收益

总体PPL不足以识别收益来源,按表6、7、8分别检查架构、边界和有效上下文。

项目 原文范围
数据 WikiText-103、enwik8、text8、One Billion Word、PTB
指标 词级困惑度与字符/字节单位 bpc,不能直接跨单位比较
长度 训练反传长度、缓存长度和评价注意力长度分别设置
消融 有无循环、不同位置方案、full/half loss 与内存控制
速度 对特定重复计算基线的评价速度比较,不等于所有现代缓存实现
统计 表格为具体配置,缺少统一多种子置信区间时不声称稳定性已证

证据一,第 3.2—3.3 节与图2。明确旧状态冻结、层间复用和位置一致性。这是区分 Transformer-XL 与简单延长输入的关键。 原图分训练和评估两个面板。先追踪跨段隐藏状态的复用,再区分前向可读的记忆与停止梯度的位置;缓存连线不代表反向图无限延伸。

证据二,表1、表2。WikiText-103 大模型困惑度为 18.3;enwik8 用 bpc 报告。不同数据、模型大小和正则配置不能合并成单一“降低百分比”。主结果支持系统质量,机制归因还需看消融。

证据三,表6、表7、表8。表6 分析循环与位置方案,表7 在不依赖长程关系的 One Billion Word 上仍观察去循环后的退化,支持片段边界修复;表8 的 RECL 比较进一步研究长上下文利用。三项回答不同问题,不能相互替代。

读表6不要把init理解成随机初始化。 PPL init使用与训练相同的注意力长度;PPL best是在评估时选择合适长度后的困惑度,Attn Len给出达到该结果所需的最短长度。先在相同参数规模内对照循环、位置编码与Loss列,再判断加长评估上下文是否有效;151M行不能当作128M消融中的同一模型。

Transformer-XL的片段复用、位置编码与注意力长度消融
实验结果表摘引:Zihang Dai 等,2019,表6,PDF第8页;核对原文。原版权保留。

论文强调某些评价设置下极大速度收益,但该比值依赖基线是否反复重算前缀。与已经使用高效 KV 缓存的现代系统比较,不能照抄这个倍数。速度结论应保留算法和执行协议。

可以固定当前预测片段,逐渐增加可见历史,观察损失下降是否达到预设阈值。若新增内容没有改善预测,仅说明在这个任务和模型上没有提供可用收益,不等于模型完全无法访问这些位置。

也应使用远处关键事实被替换、删除和放入干扰内容的测试,区分有用检索与一般主题适配。PPL 对常见局部词很敏感,少数长程事实错误可能被平均掩盖。有效上下文指标与准确事实检索最好共同报告。

五、更长可见历史仍受陈旧状态与干扰限制

再把文档边界放在两个完全不相关故事之间。若缓存不重置,模型可能错误带入上一篇角色。更长上下文并不总是更相关,边界管理是训练和评价合法性的一部分。

限制包括缓存内存、状态陈旧、反向路径截断、远程干扰与文档边界。它提供更长信息路径,不保证无限记忆或完美检索。

六、把本篇机制再推进一步

1. 旧缓存停止梯度,当前键值投影矩阵是否也不再从它学习?

参考答案:仍会学习。停止梯度把缓存内容视为常量输入,当前计算依然用它乘以键值投影矩阵;损失可更新这些矩阵,被切断的只是回到生成旧状态的计算图。这一区分决定复现时停止梯度应放在哪里,不能把整个记忆分支都误写成无梯度输出。

七、把片段记忆与排列训练目标组合

缓存扩大可见范围,却留下状态陈旧、位置一致与可检索细节的问题。用Longformer比较稀疏直接连接,用Mamba比较固定状态压缩;这两条是不同的信息访问取舍。

自测与参考答案

1. 为什么旧状态停止梯度后仍然能帮助当前预测?

前向计算仍可读取其数值,停止的是反向更新路径。信息可用与参数是否通过该路径获得梯度是两件事,因此长前向上下文可以配合短反向图。

2. 为什么没有长程依赖的数据也可能受益?

缓存修复每段开头缺少正常前缀的问题,这属于边界碎片化,而非真正利用很远信息。论文专门用相应数据区分了这类收益。

3. 为什么不能把论文的最大加速倍数直接用于现代服务系统?

原比值依赖特定基线重算、窗口和实现。现代系统若已高效缓存,成本结构不同。必须在相同输入、硬件与缓存策略下重新测量。