L大语言模型从理论到实践
阅读 PDF ↗
CHAPTER 37

长上下文建模

更长的输入可以包含完整文档、多轮交互、跨文件代码和分散证据,但把更多词元放入模型,并不等于模型能够可靠使用这些信息。长度增长同时改变位置分布、候选注意力集合、计算规模和缓存容量;即使程序能够完成前向,也可能无法恢复位于中间的关键事实,或者在大量干扰信息下选择错误证据。

本章研究模型怎样从已训练的长度扩展到更长序列,以及怎样判断这种扩展是否有效。第7章《位置表示》已给出位置表示的基础,本章只保留分析扩展所需的相位关系;密集注意力内核的分块计算将在后续推理优化部分展开。这里的主线是表示分布、信息可达性、训练数据与实际长距离能力之间的联系。

37.1上下文长度的四种含义

训练长度、接口上限及可用能力

上下文窗口(Context Window)指一次模型条件化所能容纳的词元范围,但至少存在四种不同口径。训练长度描述模型更新时看到的序列分布;标称窗口描述制品声明的支持范围;运行长度描述当前设备和并发下能够执行的实际规模;有效长度描述在特定任务与质量要求下能够利用的信息范围。

例如,配置允许输入十万词元,只能说明接口或位置机制没有在更短处拒绝。若模型主要在短序列上训练,远距离交互仍可能分布外;若缓存不足,运行时甚至无法容纳标称窗口;若长文本包含大量相似干扰,程序成功也不保证任务质量。

窗口通常需要同时容纳提示、模板控制词元和生成内容。设最大总长度为 \(T_{\max}\),实际提示长度为 \(T_p\),计划生成上限为 \(T_g\),则需满足

\[ T_p+T_g\le T_{\max}. \tag{37.1}\]

只报告输入长度而不说明输出预算,可能掩盖生成过程中越界的风险。不同分词器对同一原文产生不同长度,跨模型比较还应保留原始字节数或字符数,而不能默认一个词元包含固定信息量。1

符号及共同假设

符号 含义
\(T_0,T_1\) 原始参考窗口与扩展目标窗口的词元数,均大于一。
\(i,j,\Delta\) 位置索引及相对位置差 \(\Delta=j-i\),从零起编号。
\(d_r,\omega_k\) RoPE 旋转维数及第 \(k\) 个二维子空间的角频率。
\(s\) 位置压缩或长度扩展因子,\(s\ge1\)
\(N,d,h_{kv},d_h\) 网络层数、隐藏维数、键值头数和单头维数。
\(w,g\) 包含当前位置的局部窗口大小;额外全局位置数量。
\(B,b_{kv}\) 同时驻留的序列数;单个键值元素占用的字节数。
\(Q(T,\rho,\eta)\) 给定长度、证据位置和干扰条件下的任务质量。

长度分析的前提

本章默认自回归 Transformer、固定分词器与明确因果掩码;旋转维数为偶数。位置扩展公式首先在固定查询与键向量下比较相位,整网状态变化另行讨论。复杂度分析区分预填充与单步解码,容量公式不计临时空间、分配碎片和量化元数据,不能直接作为设备准入上限。

扩展涉及四个不同层次

位置映射决定远处词元怎样进入已学习的表示系统;注意力结构决定哪些位置之间可以直接交换信息;训练数据决定模型是否需要学习跨越这些距离的任务;执行系统决定计算与状态是否能在资源预算内完成。四者相互影响,却不能互相替代。

长上下文扩展的四项设计及共同评价边界。实现其中一项,不足以证明完整长距离能力。
图 37.1 长上下文扩展的四项设计及共同评价边界。实现其中一项,不足以证明完整长距离能力。

37.1中的执行优化可以保持数学函数不变,而位置或连接方式的改变通常会改变模型函数。比较方法时应首先判断变更属于哪一层,再选择相应的训练和证据要求。

37.2位置外推的分布偏移

位置外推

旋转位置编码(Rotary Position Embedding,RoPE)使第 \(k\) 个二维子空间中的查询与键通过相对角度 \(\Delta\omega_k\) 影响点积。固定内容向量时,该子空间的贡献可写为

\[ a_k\cos(\Delta\omega_k)+b_k\sin(\Delta\omega_k), \tag{37.2}\]

其中 \(a_k,b_k\) 由对应查询和键的分量决定。基础推导见第7章《位置表示》。位置扩展改变的是这些角度的分布,而不仅是保存一个更大的位置整数。

若训练窗口为 \(T_0\),训练中通常只出现绝对值不超过 \(T_0-1\) 的相对距离。直接输入 \(T_1>T_0\) 的序列,将产生未见过的相对距离和多频率联合相位组合。三角函数在所有实数位置均有定义,并不表示学习到的注意力选择函数对这些组合已经可靠。

这里也不能把单个正弦分量的周期性误读为整体表示每隔一个固定短周期必然重复。多组频率联合使用时,完全重合与近似混淆是不同问题;有限精度、频率尺度及训练分布都会影响可区分性。

长序列还会改变竞争集合

即使某条证据与查询之间的分数不变,增加候选键也会改变归一化分母。设一个相关键分数为 \(a\),其余 \(T-1\) 个干扰键分数为零,则相关键获得的权重为

\[ p_{\mathrm{rel}}=\frac{e^a}{e^a+T-1}. \tag{37.3}\]

\(a=\log100\) 时,\(T=101\) 对应 \(p_{\mathrm{rel}}=0.5\)\(T=901\) 对应 \(p_{\mathrm{rel}}=0.1\)。这是一项控制变量的数学构造,并非真实模型的注意力测量。

若要求权重至少为 \(\alpha\in(0,1)\),整理式(37.3)可得

\[ a\ge\log(T-1)+\log\frac{\alpha}{1-\alpha}. \tag{37.4}\]

候选集合扩大可能要求更强的分数区分能力。实际干扰键的分数不相同,多个相关键也可能共同承载信息,但这个例子足以说明:解决位置外推并没有自动解决长序列中的选择与聚合问题。

37.3位置插值及相位压缩

线性插值的定义

位置插值(Position Interpolation,PI)将新窗口的位置缩放到较短的参考范围,是扩展 RoPE 模型的一种方法(Chen 等 2023)。为明确离散端点,本章定义

\[ s=\frac{T_1-1}{T_0-1},\qquad f(i)=\frac{i}{s},\qquad 0\le i\le T_1-1. \tag{37.5}\]

于是 \(f(0)=0\)\(f(T_1-1)=T_0-1\)。位置输入可以是实数,旋转并不要求它仍为整数。某些实现采用 \(s=\frac{T_1}{T_0}\) 的长度比约定;二者在长窗口下接近,但端点不同,应保持配置和推导一致。

插值后的相对角度为

\[ [f(j)-f(i)]\omega_k=\frac{\Delta\omega_k}{s}, \tag{37.6}\]

等价于将所有角频率统一除以 \(s\)。这保留位置顺序,却缩小相邻位置的角度差。输入长度没有缩短:模型仍然处理 \(T_1\) 个词元,词元数、注意力候选数和缓存长度均不会因位置坐标被压缩而自动减少。

位置插值误差

设原位置范围为 \(0\)\(4096\),即 \(T_0=4097\);目标位置范围为 \(0\)\(32768\),即 \(T_1=32769\)。式(37.5)给出 \(s=8\),映射为

\[ 0\mapsto0,\quad4096\mapsto512,\quad 16384\mapsto2048,\quad32768\mapsto4096. \tag{37.7}\]

取某二维频带 \(\omega=\frac{1}{1024}\),两个位置的距离为 \(\Delta=8192\)。直接外推时相对角度为八弧度;插值后角度为一弧度。若固定查询与键使式(37.2)中的 \(a=1,b=0\),这项点积贡献由 \(\cos8\approx-0.1455\) 变为 \(\cos1\approx0.5403\)

原范围内的距离同样改变。例如 \(\Delta=1024\) 对应角度从一变为 \(\frac{1}{8}\)。因此位置插值并非只修补超出训练窗口的部分,而会同时改动短距离表示。扩展后需要关注原有短文本任务是否退化,不能只评估新增长度。

位置插值的坐标对应。图中箭头表示坐标映射,不表示删除或合并词元。
图 37.2 位置插值的坐标对应。图中箭头表示坐标映射,不表示删除或合并词元。

37.2刻意保留全部对应关系。与分词压缩不同,位置插值不改变输入字符串和词元序列,只改变模型对位置的使用方式。

相位扰动的局部上界

对二维旋转 \(R(\phi)\),两个角度之间的算子范数差为

\[ \|R(\phi')-R(\phi)\|_2 =2\left|\sin\frac{\phi'-\phi}{2}\right| \le|\phi'-\phi|. \tag{37.8}\]

固定 \(q,k\) 后,柯西—施瓦茨不等式给出

\[ |q^{\mathsf T}[R(\phi')-R(\phi)]k| \le\|q\|_2\|k\|_2\,|\phi'-\phi|. \tag{37.9}\]

对统一插值,\(|\phi'-\phi|=|\Delta\omega_k|(1-\frac{1}{s})\)。较大距离或较高频率可能对应较大的局部扰动。这个上界说明哪些量影响变化,但它不比较“哪种扩展一定更好”,也不约束整个深层网络的最终误差,因为后续查询和键本身也会因早先层的变化而改变。

37.4频率调整及短长距离折中

(选修)

统一缩放及频带差异

标准几何频率可写为

\[ \omega_k=b^{-\frac{2k}{d_r}},\qquad k=0,\ldots,\frac{d_r}{2}-1, \tag{37.10}\]

\(b>1\) 为频率基数。高频分量在相邻位置间变化较快,低频分量在长距离上变化较慢。统一插值把全部频率同时降低,扩大有效周期,也使局部位置差异变小。

一种不同选择是增大频率基数。设 \(d_r>2\),取

\[ b'=b\,s^{\frac{d_r}{d_r-2}}. \tag{37.11}\]

则频率比为

\[ \frac{\omega_k'}{\omega_k}=s^{-\frac{2k}{d_r-2}}. \tag{37.12}\]

最高频分量 \(k=0\) 不变,最低频分量 \(k=\frac{d_r}{2}-1\) 缩小为 \(\frac{1}{s}\),中间频带平滑变化。这是对给定基数规则的代数推导;具体模型是否使用这一形式,仍需以其位置配置为准,不能将所有所谓“频率缩放”都写成同一个公式。

例如 \(d_r=8,s=8\),四个频率的比例依次为 \(1,\frac{1}{2},\frac{1}{4},\frac{1}{8}\)。它与统一插值的四个比例均为 \(\frac{1}{8}\) 不同:前者更多保留快速变化的频带,后者统一压缩所有距离。两种方法都改变了多频率联合编码,均需检查与预训练状态的适配。

按频带混合的思想

给定参考位置跨度 \(T_0-1\),频带 \(k\) 在该范围内经历的旋转周数为

\[ n_k=\frac{(T_0-1)\omega_k}{2\pi}. \tag{37.13}\]

\(n_k\) 较大,训练中该频带已经经历多次旋转;若 \(n_k\) 很小,其长周期部分尚未充分覆盖。这为区别处理频段提供一种尺度指标。可用一般形式表达混合调整:

\[ \omega_k'=\lambda_k\omega_k+(1-\lambda_k)\frac{\omega_k}{s}, \qquad0\le\lambda_k\le1. \tag{37.14}\]

其中 \(\lambda_k=1\) 保留原频率,\(\lambda_k=0\) 使用完整插值,中间值平滑过渡。阈值与过渡函数是额外设计,不由本式自动确定。

YaRN 将分频调整与注意力尺度调整结合,用于扩展预训练模型的窗口(Peng 等 2023)。本章采用式(37.14)说明其所属的方法思想,不把某个实现的默认阈值写成普遍常数,也不以某组训练预算证明任意模型无需适配就可扩展。

注意力温度及长度

设分数为 \(z_j\),带温度的归一化为

\[ a_j(\tau)=\frac{e^{\frac{z_j}{\tau}}}{\sum_r e^{\frac{z_r}{\tau}}},\qquad\tau>0. \tag{37.15}\]

较小温度通常使分布更集中,较大温度使其更平缓。位置调整改变分数分布,长度又改变竞争集合,因而一些方法同时调整注意力尺度。但是缩小温度也可能放大错误匹配,并不等于自动解决式(37.3)中的证据稀释。

若同时将查询和键乘以常数 \(c\),点积会乘以 \(c^2\);若只改变一侧,则只乘以 \(c\)。某些制品把尺度放在旋转参数或注意力模块中,数学上必须按实际乘法位置核对。重复应用尺度可能导致分布过尖,而遗漏尺度可能使与训练时的行为不一致。

动态缩放及缓存一致性

键值缓存(Key–Value Cache,KV Cache)保存先前位置的中间状态。若位置缩放随当前序列长度动态变化,已经缓存的键可能采用旧频率,而新查询采用新频率。此时两者的点积不再对应预期的共同位置规则。

即使能够反向旋转某层缓存键再使用新频率,也未必恢复整个模型重新计算的结果,因为该层键来自早先层表示,后者可能已经在旧频率下形成。稳妥的协议应明确缩放何时确定、一个请求内是否固定、跨阈值时如何处理以及哪些缓存可以复用。修改位置规则属于模型函数变更,应进入制品与缓存身份,而不是仅作为服务端无关紧要的长度参数。

位置扩展的必要边界

把位置坐标映射回旧范围,不会减少词元数,也不会自动教授跨文档推理。频率、注意力尺度、训练数据和缓存协议必须共同一致;短任务保持与长任务改进需要分别给出证据。

37.5滑动窗口、稀疏连接及可达性

因果滑动窗口的计算规模

滑动窗口注意力(Sliding-Window Attention,SWA)限制位置 \(i\) 只读取最近 \(w\) 个位置,窗口包含当前位置:

\[ A_{ij}=\mathbf1[\max(0,i-w+1)\le j\le i]. \tag{37.16}\]

\(T\ge w\) 时,可见位置对总数为

\[ \sum_{i=0}^{T-1}\min(i+1,w) =\frac{w(w+1)}2+(T-w)w =Tw-\frac{w(w-1)}2. \tag{37.17}\]

因此读取计算随 \(O(Twd)\) 增长,而不是完整密集注意力的 \(O(T^2d)\)。但查询、键值及 FFN 的投影仍需处理全部词元;而且若实现先构造完整 \(T\times T\) 矩阵再屏蔽,便没有兑现稀疏执行的全部资源收益。

单层直接可见范围:八个位置、局部窗口三。着色单元表示允许读取;第三幅额外允许读取全局键位置0,全部连接仍满足 $j\le i$。该开头位置不能汇聚未来信息。
图 37.3 单层直接可见范围:八个位置、局部窗口三。着色单元表示允许读取;第三幅额外允许读取全局键位置0,全部连接仍满足 \(j\le i\)。该开头位置不能汇聚未来信息。

跨层感受范围

窗口限制的是单层直接读取范围。忽略其他跨位置机制,若第零层位置 \(i\) 只含当前位置信息,经过 \(N\) 层窗口为 \(w\) 的因果层后,其最早可达位置为

\[ \max[0,i-N(w-1)], \tag{37.18}\]

所以最多覆盖 \(1+N(w-1)\) 个连续位置。证明由归纳得到:每增加一层,当前层可读取前一层最早 \(i-w+1\) 的状态,该状态又向前覆盖已有感受范围。

\(w=4,N=3\),最终位置最多可达十个位置,而不是四个,也不是任意长前缀。远处信息必须通过中间表示逐层传递;存在计算图路径是信息影响输出的必要条件,不保证关键事实在有限维表示中仍被保存并正确使用。

局部窗口的跨层信息可达性。三层、窗口四的位置9能够间接接收位置0的信息,但需要多次表示转换。
图 37.4 局部窗口的跨层信息可达性。三层、窗口四的位置9能够间接接收位置0的信息,但需要多次表示转换。

37.4中箭头沿信息传播方向绘制。若增加层数,图论上的可达范围扩大;这并不意味着可以通过无限增加深度而不付出优化、延迟和信息压缩代价。

全局位置及混合层

局部窗口可以与少量全局连接结合。Longformer 等结构研究了局部与任务相关全局注意力的组合(Beltagy, Peters, 和 Cohan 2020)。在双向编码中,全局位置可先汇聚各处信息,下一层再将聚合结果传给其他位置,从而缩短信息路径。若全局位置数为固定 \(g\),连接规模可按 \(O[T(w+g)]\) 估计。

把这种结构用于因果解码时必须重新检查方向。序列开头的一个固定全局词元不能读取未来内容,因而不能自动成为后续全文的动态摘要。若要使某个摘要位置收集之前的片段,必须把它放在片段之后,或者定义额外记忆更新机制;两者都属于模型结构与训练协议。

另一种混合方式在部分层使用全局密集注意力,其余层使用局部窗口。设 \(N_g\) 个全局层、\(N_l\) 个局部层,则注意力部分规模约为

\[ O(N_gT^2d+N_lTwd). \tag{37.19}\]

只要 \(N_g\) 不为零,超长长度下仍存在二次项。不能因为大多数层采用窗口,就宣称整网对长度严格线性。

稀疏连接结构

稀疏注意力(Sparse Attention)还可以采用步长连接、分块连接、内容选择或不同层的不同模式。相同非零位置数不代表相同信息路径:只连接近邻可能难以跨越远处,少量跨块边可以缩短路径,但也可能漏掉所需内容。

若使用内容相关选择,筛选本身具有成本,而且漏选会改变模型函数。若使用固定随机边,可达性结论也依赖随机图的条件,不能由一个稀疏率数字推断所有样本都能完成多证据推理。选择连接方式时,应同时说明可见性、路由或选边规则、实际稀疏内核以及需要重训或适配的范围。

37.6长序列训练的长度及任务分布

序列长度及依赖距离

将许多无关短文档拼成一个长序列,可以增加位置索引覆盖,却未必提供跨长距离的学习信号。如果每个目标的答案都在附近,模型仍可依靠局部相关性降低损失。有效训练样本需要包含目标任务真正依赖的远处信息,例如跨章节指代、跨文件定义与调用、多证据合并和带时序约束的长记录。

文档拼接还需要明确边界:独立文档之间是否允许注意力跨越,位置是否重置,重置后是否有文档标识,损失是否覆盖分隔词元。没有掩码限制的重置位置会让不同文档出现重复位置,同时仍可互相读取,形成与独立样本不同的目标。不能把打包方式当作与模型训练无关的存储细节。

按序列采样及按词元配比

设训练按序列以概率 \(q_\ell\) 选择长度桶 \(\ell\),其平均有效长度为 \(T_\ell\)。该桶在实际训练词元中的期望占比为

\[ \pi_\ell=\frac{q_\ell T_\ell}{\sum_r q_rT_r}. \tag{37.20}\]

若短桶长度为4096,长桶长度为32768,两桶各抽一半样本,则长桶词元占比为 \(\frac{32768}{4096+32768}=\frac{8}{9}\)。因此“长短样本各半”并不是“长短训练词元各半”。比较扩展训练预算时,应明确采样单位、实际有效词元数和重复曝光情况。

长度课程可以逐步提高长样本比例或最大长度,以控制资源峰值和分布变化;也可从开始就混合不同长度。它们是训练策略,不具有单一必然最优顺序。短序列保持集用于观察原能力变化,长序列开发集用于选择扩展设置,最终独立测试集不应参与这些选择。

全局词元预算及监督密度

固定每步词元预算 \(D_{\mathrm{step}}\) 时,序列加长通常要求减少微批大小。样本数减少会改变一个更新步包含的独立文档和任务数量。梯度累积可以恢复目标全局词元数,但不能自动复制原来的样本多样性和数值顺序。

长文问答中大量输入是条件而不是监督目标。设输入词元数为 \(T\)、监督目标数为 \(R\),监督密度为 \(\frac{R}{T}\)。比较训练效率时,长输入和少量回答可能形成很低的监督密度;仅报告处理了多少输入词元不足以说明训练信号充足。可以混合语言建模与长距离任务,但混合权重、标签位置和泄漏边界都应明确。

算法37.1 长上下文适配训练

输入:基础模型、目标窗口、候选位置规则、分组隔离的长短训练集、开发集与计算预算。输出:经过适配的模型制品及其长度配置。状态:当前长度课程、优化器、累计有效词元和开发评价记录。

  1. 固定分词器、模板、位置频率、注意力结构及短任务基线;保存基础模型身份。

  2. 按规定的长度桶和任务配比构造批次,区分序列采样率与实际词元占比;保留文档边界和证据来源。

  3. 构造位置、可见性与监督集合,执行参数更新;累计真实有效输入和监督目标数量。

  4. 按预定时点在长短开发集上记录质量与资源消耗,依据课程规则调整长度或采样比例;不使用测试集选择配置。

  5. 达到预算、预定停止准则或发现不可接受的短任务退化时停止,按事先规定的开发准则选择制品。

不变量:同一制品中的频率与缓存解释一致;训练预算按实际处理量记录;长样本包含所声称目标需要的远距离依赖。

37.7长度增长的计算、缓存及系统约束

预填充及单步解码

预填充(Prefill)一次处理已有上下文,增量解码(Decode)基于历史状态计算新位置。固定模型宽度和层数时,密集预填充包含 \(O(Td^2+T^2d)\) 规模的投影和位置交互;采用键值缓存后,单步解码约为 \(O(d^2+Td)\),仍需读取历史键值。

从长度4096增长到32768,长度扩大八倍,密集注意力的二次部分扩大64倍,线性投影部分扩大八倍。缓存解码中与历史长度有关的读取部分扩大八倍。整网时间不会严格等于这些比例,因为硬件利用率、批处理、内核和通信也会变化,但数学规模变化不能被忽略。

精确分块注意力可以减少中间矩阵的显存读写,仍计算同一密集函数;稀疏窗口改变可见位置集合,通常也改变模型函数。二者可以组合使用,却不是同一种长序列技术。训练中的重计算、序列并行及激活分片分别用额外计算或通信换取单设备容量,不保证减少集群总工作量。

KV 缓存容量

对等长 \(B\) 条序列,每层保留全部历史键值时,裸缓存容量为

\[ M_{KV}=2NBTh_{kv}d_hb_{kv}. \tag{37.21}\]

因子二对应键和值;\(b_{kv}\) 的单位为字节,不是位。设 \(N=32,h_{kv}=8,d_h=128,b_{kv}=2\),则单条序列每增加一个词元,缓存增长

\[ 2\times32\times8\times128\times2 =131072\ \text{字节}=128\,\mathrm{KiB}. \tag{37.22}\]

长度32768对应 \(4\,\mathrm{GiB}\),长度131072对应 \(16\,\mathrm{GiB}\);若后者同时驻留四条序列,裸 KV 就达到 \(64\,\mathrm{GiB}\)。这些数值不含权重、临时工作区、页表和碎片,不能据此认定一张同容量设备能够执行该负载。

若所有层严格使用窗口 \(w=4096\),并且后续计算从不再读取更早状态,则每条序列理论上只需保留窗口内 KV,约为 \(0.5\,\mathrm{GiB}\)。这一缩减成立的前提是窗口模型语义,而不是对全注意力模型任意删除旧缓存。

混合结构应逐层求和:

\[ M_{KV}=2Bh_{kv}d_hb_{kv} [N_gT+N_l\min(T,w)]. \tag{37.23}\]

同样32层中,八层全局、24层窗口,在 \(T=131072,w=4096,B=1\) 时,裸 KV 为 \(4+0.375=4.375\,\mathrm{GiB}\)。全局层仍随总长度增长,所以缓存并未完全与上下文长度脱钩。

缓存卸载成本

将 KV 卸载到主机或其他存储,可以降低设备驻留容量,却增加数据移动。迁移数据量为 \(M\)、有效传输带宽为 \(u\) 时,单次传输时间下界为 \(\frac{M}{u}\),实际还需增加同步、排队和序列化。若解码每一步都要反复读取大批卸载状态,带宽可能成为主要瓶颈。

分组查询结构减少键值头数,缓存量随之降低,但查询输出和注意力评分工作不必按相同比例缩减。张量并行若复制部分键值头,每设备缓存也不能一律按并行度平均相除。缓存分页改善分配与复用,仍不会删除有效历史元素本身。

标称长窗口落地时,需要同时规定输入输出长度分布、并发、缓存数据类型和层间注意力配置。对于不同长度请求,应保留首词元延迟(Time to First Token,TTFT)和每输出词元时间(Time per Output Token,TPOT)的统计口径;长输入的预填充等待和长历史的逐步读取是不同成本。

37.8上下文压缩、检索及长窗口的分工

三种减少输入负担的方法

上下文压缩(Context Compression)可以指删除不相关原文、把原文摘要为较短文本,或把历史编码为较小的隐状态。前两者改变输入内容,第三种改变表示及访问机制。删除和摘要减少词元数,位置插值则不减少词元数;不能用同一个“压缩率”混称这些方法。

压缩具有信息瓶颈。若任务可能询问任意细节,而压缩结果的可表达状态少于全部原文,则至少有不同原文映射到同一压缩结果;只凭该结果无法区分它们。对特定任务,压缩可以保留足够的相关信息,但这种充分性依赖问题范围,不存在普遍保证任意长文所有细节无损压成固定短摘要的方案。

隐状态压缩也不能仅比较浮点元素数。压缩器训练目标、记忆更新顺序、跨片段位置与解码访问方式共同决定语义。对仅支持标准 KV 的预训练模型直接换成任意压缩状态,通常不是合法的即插即用操作。

检索范围及窗口容量

检索增强生成(Retrieval-Augmented Generation,RAG)先从外部知识集合选择相关材料,再把它们提供给生成模型。长窗口则扩大模型一次可联合处理的材料范围。两者可以组合:检索控制来源、时效、权限和候选集合,长窗口支持更多证据及复杂关系的联合处理。

检索可能遗漏证据,长窗口可能难以从噪声中利用证据。扩大返回文档数量通常提高覆盖机会,同时增加干扰与成本;减少文档数量降低模型输入,却可能截断多跳问题需要的某一环。系统设计应把证据召回与证据利用分开评价,而不能把回答错误全部归给模型窗口。

方法 主要改变 主要失效风险
扩大窗口 一次共同条件化的容量 位置分布、长距离利用与计算成本。
检索选择 外部材料的候选集合 漏召回、错误排序、权限或时效错误。
文本摘要 输入内容与长度 事实遗漏、压缩幻觉、细节不可恢复。
隐状态记忆 历史表示及访问接口 压缩瓶颈、训练适配与缓存协议。

跨窗口任务的结构化处理

当材料远超可用窗口,可以按问题拆解、分片读取、记录来源明确的中间结果,再汇总回答。这是一项多阶段任务策略,而不是模型本身已经具备无限上下文。中间结果应保留证据定位、未解决问题与冲突关系,避免多轮摘要不断丢弃约束。

多阶段处理还会累积错误,并增加调用、检索和协调成本。若最终问题依赖所有片段之间的全局关系,局部摘要可能不足;若只需少量明确事实,选择性读取可能更有效。架构选择应由任务依赖结构决定,而非固定把全部材料塞入最长窗口。

37.9长距离能力的分离评估

长度、位置及干扰变量

长文本评价应至少分离总长度 \(T\)、证据相对位置 \(\rho\)、干扰强度 \(\eta\)、证据数量及任务类型。可将证据起点相对位置定义为

\[ \rho=\frac{j_{\mathrm{start}}}{T-1},\qquad0\le\rho\le1, \tag{37.24}\]

但移动包含多个词元的片段时还需保证片段完整且不越界。为了比较位置作用,应尽可能固定事实内容、问题、总长度和干扰分布;否则把更难的问题恰好放在中间,会混淆因果解释。

中间信息利用退化(Lost in the Middle)研究发现,某些被测模型对相关信息位于开头或结尾的情况表现较好,而对中间位置的表现下降(Liu 等 2024)。这是特定模型、任务和实验条件下的发现,不是所有模型必然遵守的数学定律,更不能用一条预设 U 形曲线代替当前模型测量。

多依据推理

单个隐蔽字符串或密码检索能够检测基本信息回收,但不能充分评价长文理解。更完整的任务还包括多个目标、多个相似键、指代链、数值聚合、跨文档冲突与依赖多条证据的推理。RULER 等评估工作进一步扩展了长上下文任务的检查范围(Hsieh 等 2024)

证据存在性也应作为条件:有答案样例检验利用能力,无答案样例检验模型是否在缺少依据时编造。还应设置互相矛盾的来源和具有时间版本的记录,区分找到文本、识别正确版本和完成推理三个能力。随机合成任务便于严格控制变量,真实长文任务检验语言和结构的复杂性,两者各有局限。

定义任务条件下的有效长度

设在固定测试分布上测得质量为 \(Q(T,\rho,\eta)\),预先给定最低阈值 \(q_{\min}\),并确定待考察的位置与干扰集合 \(\mathcal C\)。在离散测试长度集合 \(\mathcal T\) 上,可定义一种保守的有效长度:

\[ T_{\mathrm{eff}}=\max\left\{t\in\mathcal T: \min_{\substack{T\in\mathcal T,\ T\le t\\(\rho,\eta)\in\mathcal C}} Q(T,\rho,\eta)\ge q_{\min}\right\}. \tag{37.25}\]

该定义要求所有已测试较短长度和规定条件均达标,而不是只挑一个偶然表现较好的最长点。若集合为空,应报告未达到阈值;有限测试也不能证明未测长度区间全部成立。

(37.25)是一种明确任务条件的评价口径,不是行业统一标准。改变任务、阈值、位置集合或统计置信要求,得到的有效长度会改变。实际报告还应给样本量、波动范围和失败类型,避免把一个有较大不确定性的估计写成精确模型常数。

语言建模损失的比较边界

比较长上下文是否有用,可以在相同目标片段上改变可见前缀长度,计算

\[ \Delta\mathcal L=\mathcal L_{\mathrm{short}}- \mathcal L_{\mathrm{long}}. \tag{37.26}\]

目标词元、分词器和评分位置应保持一致,否则长序列增加了更容易预测的文本,平均损失下降也可能只是样本组成变化。正值表明该组目标在更长条件下获得较低损失,不直接证明所有远处信息均被利用。

同理,模型依靠参数记忆答对一个事实,不能证明它从长文本中读取了该事实。可使用明确置换的实体、唯一合成键或受控反事实材料,使答案必须依赖给定上下文;同时警惕构造任务过于机械而缺少真实难度。

算法37.2 长度与证据位置的受控评估

输入:固定模型制品、独立任务模板、长度网格、证据位置网格、干扰等级及评分函数。输出:分条件质量与成本矩阵。状态:样例标识、来源记录、实际词元长度和逐条件结果。

  1. 为每项任务固定问题与必要证据,保留正确答案和来源;明确是否存在答案、需要几条证据。

  2. 按每个长度与位置组合插入完整证据,再用规定的干扰材料填充;分词后核对实际位置和总长度,避免静默截断。

  3. 在相同生成设置下执行模型,记录回答、来源引用、失败、实际资源消耗及停止原因。

  4. 依据预先定义的评分规则分别评价证据回收、答案正确性和无依据生成;在相同任务标识间进行配对比较。

  5. 遍历预定网格后停止,报告全部条件与统计不确定性;若需要调参,另用开发集,不返回修改测试答案。

不变量:比较位置时不同时更换任务难度;超时和越界不从结果中无声删除;标称窗口与达标范围分开报告。

37.10设计取舍及失效定位

长上下文问题应从失败发生的位置诊断。输入被截断是接口或预算问题;位置扩展后短任务退化提示表示适配问题;只有中间证据失败提示需要进一步分离位置与干扰;单事实任务通过而多证据任务失败,说明信息回收不足以解释全部能力。相同质量下首词元时间过长或缓存增长失控,则属于执行与容量问题。

有效长上下文是联合约束

可接收的长度、可计算的长度与可可靠利用的长度不同。一个完整扩展方案必须同时保持位置及缓存一致性,给出注意力的信息路径,在相应数据上适配,并在分离长度、位置和任务难度的评价中达到所需质量。

不存在一个只调大最大长度即可普遍解决上述问题的参数。位置扩展、窗口稀疏化、检索、压缩和执行优化分别改变不同条件;选择组合时应追踪其具体收益及失去的信息,保留原制品与可回退配置,并把未经评价的新长度作为尚未验证的能力范围。


  1. 产品材料中的“32k”可能表示32000或32768个词元,应以模型配置与接口约定为准。本章的计算例均写出整数词元数;容量单位 \(\mathrm{KiB}\)\(\mathrm{GiB}\) 分别采用 \(2^{10}\)\(2^{30}\) 字节。↩︎

WORKBOOK / 习题

配套习题与解析

先独立作答,再展开参考解析。选修题保留原书标记。

习题 37.1

\(T_0=4096\) 扩展为 \(T_1=32768\),分别计算采用长度比与端点比的位置映射,比较最后一个位置的映射结果。说明为什么配置必须统一这两种约定。

展开参考解析

长度比 \(s_L=\frac{32768}{4096}=8\),末位置32767映为4095.875;端点比 \(s_E=\frac{32767}{4095}\),映射 \(f(i)=\frac{4095i}{32767}\),末位置恰为4095。两者差0.875个参考位置,均可作为明确约定,但不能在缓存、新查询或不同层间混用,否则相对相位不一致。

习题 37.2选修

对给定频率 \(\omega=\frac{1}{256}\) 和距离 \(\Delta=2048\),计算扩展因子为四时的插值相位,并写出固定查询与键条件下的点积分量变化上界。

展开参考解析

原相位 \(\Delta\omega=\frac{2048}{256}=8\),因子四插值后为2。固定q、k时精确旋转范数界为 \(2\|q\|\|k\||\sin(\frac{2-8}{2})|=2|\sin3|\|q\|\|k\|\),还可用较松的 \(6\|q\|\|k\|\)。该界仅约束当前二维点积分量;不能直接约束深层网络,因为q、k也可能随扩展改变。

习题 37.3选修

从式37.11推导频率比例,验证最高与最低频带的边界。解释为何 \(d_r=2\) 不适用该基数规则。

展开参考解析

\(b'=b\,s^{\frac{d_r}{d_r-2}}\)\(\omega_k=b^{-\frac{2k}{d_r}}\),则 \(\frac{\omega'_k}{\omega_k}=s^{-\frac{2k}{d_r-2}}\)。最高频\(k=0\)比例1,最低频 \(k=\frac{d_r}{2}-1\) 比例 \(\frac{1}{s}\)\(d_r=2\) 时分母为零,且仅一个频带,无法同时满足“最高频不变”和“最低频缩为1/s”的非平凡要求。

习题 37.4选修

对式37.3,给定目标权重 \(0.9\),推导序列长度由101增至901时相关分数所需增加的量。说明真实多头网络与该构造相比多出了哪些变量。

展开参考解析

设目标分数a、其余分数c,权重 \(\frac{1}{[1+(T-1)e^{c-a}]}=.9\),解得 \(a-c=\log[9(T-1)]\)。T由101至901需要增加 \(\log(\frac{900}{100})=\log9\approx2.197225\)。真实模型的干扰分数不相等,多头值内容、层间表示和位置编码也变化;本构造揭示分母稀释,不是通用长度性能公式。

习题 37.5

因果窗口包含最近八个位置,网络有六层。求理论最大连续可达范围,并画出从最早位置到最终位置的一条路径。解释可达与可用的区别。

展开参考解析

范围为 \(1+6(8-1)=43\) 个连续位置,远离序列起点时最早为 \(i-42\)。一条信息路径依次为输入 \(i-42\)、第1层 \(i-35\)、第2层 \(i-28\)、第3层 \(i-21\)、第4层 \(i-14\)、第5层 \(i-7\)、第6层i。每步最多向后传七格。存在路径不保证信息在有限维状态中不被干扰或压缩损失。

习题 37.6选修

在仅解码器模型的开头加入一个“全局词元”,是否能让它在同一次因果前向中汇总整个后续文档?利用图上的信息方向证明结论。

展开参考解析

不能。因果图的边从不晚于查询的位置指向该查询,位置0只能读取位置0;由层数归纳,任一层的位置0都不含未来输入。让后续位置读取该全局键只传播初始摘要,不会使它反向汇总全文。可将摘要位置放在片段末端或显式维护外部记忆,但需重新定义协议。

习题 37.7

两个长度桶分别为2048和16384,要求实际训练词元占比相等,求按序列抽样的概率。再说明样本重复率为何仍需单独记录。

展开参考解析

令短序列概率p,要求 \(2048p=16384(1-p)\),得 \(p=\frac{8}{9}\),长序列概率\(\frac{1}{9}\)。词元份额相等不代表独立样本量或重复率相等;若某桶可用原始序列很少,有放回抽样会重复使用同一内容,必须记录唯一来源与曝光次数。

习题 37.8

使用本章 KV 参数,计算上下文65536、生成上限8192、并发三条时的裸缓存容量,并列出尚未包含的显存项。

展开参考解析

本章每序列每词元裸KV为128KiB。保留上下文与最大生成总长 \(65536+8192=73728\),三条并发需要 \(73728\times3\times128\,\mathrm{KiB}=27\,\mathrm{GiB}\)。未含模型权重、临时激活和工作区、分页碎片、元数据、调度预留,以及可能的额外推测路径。还要核对模型允许的总长度,不只看输入上限。

习题 37.9

设计一个长度、证据位置和干扰程度彼此独立的多证据问题,给出正确答案、无答案变体与评分规则。说明仅测试最长长度的开头位置会遗漏什么。

展开参考解析

可构造两条证据:“项目甲批准预算70万元”“补充批复增加12万元”,问题为最终批准额,答案82万元;移除任一必须证据形成不可确定变体。独立操纵总长度、两证据相对位置和同格式干扰文件数量,其余文本分布固定。评分同时检查数值、单位、两条来源及无答案拒答。只测最长输入开头会漏掉中部遗漏、跨远距离合并和干扰鲁棒性。

习题 37.10

对需要逐条核对长合同数字的任务,比较摘要压缩、检索和直接长窗口三种方法。指出每种方法可能丢失的信息,以及应保留的来源与中间状态。

展开参考解析

摘要便于总览,但可能删除金额、例外和单位;应保留逐条来源及摘要到原文映射。检索节约上下文,却可能漏掉跨条款定义或补充协议,需版本一致的检索与关联展开。直接长窗口保留更多原文,但仍有位置遗漏和预算限制。可用检索定位加原文精确抽取、单位校验与交叉核对,保留原始条款、查询、候选、计算中间值和不确定项;不可仅依赖自由摘要结算。

REFERENCES

参考文献

Beltagy, Iz, Matthew E. Peters, 和 Arman Cohan. 2020. 《Longformer: The Long-Document Transformer》. 2020年. https://arxiv.org/abs/2004.05150.
Chen, Shouyuan, Sherman Wong, Liangjian Chen, 和 Yuandong Tian. 2023. 《Extending Context Window of Large Language Models via Positional Interpolation》. 2023年. https://arxiv.org/abs/2306.15595.
Hsieh, Cheng-Ping 等. 2024. 《RULER: What’s the Real Context Size of Your Long-Context Language Models?》 2024年. https://arxiv.org/abs/2404.06654.
Liu, Nelson F., Kevin Lin, John Hewitt, Ashwin Paranjape, Michele Bevilacqua, Fabio Petroni, 和 Percy Liang. 2024. 《Lost in the Middle: How Language Models Use Long Contexts》. Transactions of the Association for Computational Linguistics 12: 157–73. https://doi.org/10.1162/tacl_a_00638.
Peng, Bowen, Jeffrey Quesnelle, Honglu Fan, 和 Enrico Shippole. 2023. 《YaRN: Efficient Context Window Extension of Large Language Models》. 2023年. https://arxiv.org/abs/2309.00071v2.

搜索全书

搜索全书正文、习题与解析