![]()
你有没有想过一个问题:当你读一本侦探小说,读到第三章的时候,你脑子里记住的信息是什么?
大概率不是原文的每一个字,而是"管家有嫌疑""凶器可能是那把伞"这类压缩过的线索。你的大脑在偷偷做一件事,把海量的文字,压成一个小小的、随时能查的摘要。
这正是当下大语言模型面临的核心矛盾。Transformer模型(一种基于自注意力机制的深度学习架构,是当前主流大语言模型的技术基础)读一段文本时,是把每一个字都存下来,存成一个叫KV缓存的东西,然后每读一个新字,都要把它和之前存的所有字重新比对一遍。
这样做的好处是记忆精确,坏处是账单爆炸。序列长度翻一倍,计算量涨四倍,这是平方级的增长。如果你让它读一本十万字的小说,存储和计算的开销会大到让显卡冒烟。
于是研究者们开始琢磨:能不能像人脑一样,用一个固定大小的"摘要本"来装下所有历史信息?这就是Mamba、线性注意力(一种用核函数近似替代softmax运算,从而将计算复杂度从平方级降到线性级的注意力变体)这些模型想解决的问题。它们把不断膨胀的上下文,压缩进一个大小恒定的"状态",读一个字,更新一下状态,永远不用回头翻旧账。
问题来了。这个"压缩摘要"该怎么更新才对?这篇来自字节跳动Seed、普林斯顿大学、清华大学等机构的论文,叫《Fast Weight Attention for Continual Learning》,揭示了一个几乎所有人都忽略的细节:大部分现有模型的更新时机,其实是错的。
一个被忽略的时间差
先说说这个"错"到底错在哪。
假设你在写一份实时会议纪要。轮到发言人说完第五句话,你需要把这句话记下来。这时候你手里的笔记本,应该是记到第四句话为止的状态,你是拿着"前四句的摘要"去理解和记录第五句话的。
标准的循环模型做法是什么?多数模型是把第五句话本身(它的关键词特征)和第五句话的内容,同时写进当前这一步的更新里。听起来很合理对不对?但这里有个致命的错位:模型在预测第五句话的时候,读的其实是第四句话结束时的笔记本状态,而不是第五句话自己的关键词。等第五句话真正出现,模型才把它和"第五句话自己的关键词"绑在一起存进去。
这就好比你请了一个速记员,他记笔记的时候用的是这句话讲完之后才总结出来的关键词,而不是这句话开始讲之前你脑子里已经准备好的提纲。如果不做这个区分,会发生什么?模型内部优化的其实是一个"事后诸葛亮"式的目标,它学的是"这句话的内容和它自己的特征多匹配",而不是"根据之前的所有信息,我应该怎么预测接下来会发生什么"。这两个目标看起来相似,实际上完全不同。
论文把这个问题讲得很直白:在严格的自回归(自回归指模型按时间顺序一个一个生成词,每一步的预测都基于之前已经生成的内容)语义下,真正应该被拿来训练"快速记忆"的样本,是前缀特征和新目标的配对,也就是用第t-1步的关键词特征,去匹配第t步刚刚揭晓的答案。这个"错位一步"的写法,才是跟预测任务真正对齐的。
论文管这个叫"下一潜变量预测",说白了就是把循环状态St当成一个在线学习的线性预测器,它要做的事情就是,拿着上一时刻的特征,去猜这一时刻会出现什么,猜错了就纠正一下,猜对了就巩固一下。
把记忆更新,变成一次梯度下降
搞清楚了"该用哪对数据来训练",接下来的问题是:怎么训练?
论文给出的答案是,把每一步的状态更新,看成是对一个瞬时损失函数做一次在线梯度下降(梯度下降是一种通过不断调整参数、让预测误差逐步减小的优化方法)。
具体来说,论文定义了一个岭回归损失(一种在普通回归误差基础上加入正则项,防止参数过大、提升稳定性的回归方法),这个损失衡量的是,状态矩阵作为一个线性预测器,从前缀特征预测目标值时的误差有多大,外加一个惩罚项防止状态无限膨胀。对这个损失求一次梯度,然后用这个梯度去更新状态,就得到了一个形式类似"记忆逐渐衰减、局部纠错、写入新知识"的更新公式。
这里有个细节特别关键,论文没有用固定的学习率,而是用了一个叫NLMS的归一化技巧(NLMS是归一化最小均方算法的缩写,它根据输入信号的能量大小自动调整学习步长,避免步子迈得太大或太小)。
为什么要归一化?想象你在教一个孩子写字,如果这个字笔画特别多、特别复杂,你会不会稍微放慢节奏,让他一笔一划慢慢写;如果这个字很简单,你可能一带而过。学习率固定不变,相当于不管这个字多复杂,你都用同样的速度教,复杂的字学不会,简单的字又浪费时间。NLMS做的事情,就是让学习步长根据当前特征的"能量大小"自动缩放,特征越大越复杂,步子就该迈得越小,这样才能保证每一步更新都是稳定的、不会把之前学到的东西一下子冲垮。
论文证明了一件很扎实的事,只要这个步长选得合适,每一步更新都保证瞬时损失是下降的。这不是说整体训练一定收敛,而是说至少每一步"局部没有帮倒忙"。这个数学保证,是很多凭感觉设计的循环模型没有的。
Falcon家族,六个变体各管一段
基于这套框架,论文提出了一整个家族的更新规则,取名Falcon。
这个命名有讲究,数字1、2、3分别代表标量、逐列、滑动窗口三种动态方式,后缀A代表用内积目标而不是回归目标。
先说Falcon-1,它是最简单的版本,所有的值通道共享同一个学习率η_t,这个η_t由NLMS公式自动算出来。你可以把它想象成一个班级里,老师给全班同学统一布置作业量,不管每个学生哪门课薄弱,进度都一样。这样做的好处是计算简单、硬件友好,坏处是没法针对不同"科目"因材施教。
Falcon-2解决了这个问题,它给每一个值通道(可以理解成每一门"科目")都配了独立的学习率向量η_t,这样不同的信息维度可以按各自的节奏更新。代价是什么?代价是原本可以共享一次的矩阵求解运算,现在要针对每个通道单独算一遍,如果通道数量很大,这个开销会显著上升。论文专门设计了一种批量三角求解的技巧,把原本需要两次矩阵求解的步骤合并成一次,省下了不少计算量。
Falcon-3是滑动窗口版本。前两个变体每次只看最新的一对(前缀特征,目标),Falcon-3则回头看最近B个时间步的一小批数据,做一次小批量梯度下降。这就像你不是每收到一条新消息就立刻决定观点,而是攒够最近的几条消息一起权衡一下再下判断,能有效降低单条消息里噪声的影响。这里有个巧妙的地方,论文用窗口平均而不是窗口总和来计算统计量,这样不管窗口开多大,更新幅度都不会随窗口线性膨胀,这个设计保证了滑动窗口不会因为"看得多"就"变得极端"。
带A后缀的三个变体(Falcon-1A/2A/3A),把回归目标换成了内积目标,直白地说,就是不再计算"预测值和真实值差多少",而是直接鼓励状态和目标对齐,写入方式变成纯粹的加性写入。这更接近传统线性注意力和Mamba-2的做法,但依然遵循同样的时序对齐原则和归一化写入幅度控制。
数学上的稳定阀门:正衰减钳制
这里要提一个不那么起眼但特别重要的工程细节。
论文里反复出现一个叫"正衰减"的概念,意思是,当状态的衰减系数需要写成对数形式来做长序列的并行计算时,必须保证这个衰减系数严格大于零,否则取对数就会出错甚至产生数值爆炸。
论文的做法是设一个衰减地板值ε_γ,如果算出来的衰减幅度太大,就直接把它砍到1减去这个地板值为止。这就像给汽车的油门装一个物理限位器,不管你脚踩得多深,车速超过某个阈值,发动机自动限制输出,防止爆缸。这个限位器平时几乎不起作用,只有在极端情况下才会介入,但没有它,系统在长序列训练时会在数值上直接崩溃。
三种视角看同一个更新,循环、并行、分块并行
论文花了大量篇幅证明,这些看起来是"逐步累加"的循环更新,其实可以完全等价地改写成三种不同的计算形式。
第一种是循环形式,一步一步算,状态大小恒定,适合推理阶段用,因为你生成一个字就只需要更新一次固定大小的状态,不用管前面攒了多少历史。
第二种是掩码并行形式,把整个序列铺开成一个类似注意力矩阵的东西,用一个下三角掩码保证因果性,这样可以一次性并行计算所有位置的输出,只是计算量是序列长度的平方,适合短序列训练。
第三种是分块并行形式,把长序列切成若干个小块,块内部用掩码注意力并行算,块与块之间用一个轻量的状态传递,这是训练长序列时真正会用到的方式,它兼顾了并行效率和显存开销。
论文证明这三种形式在数学上完全等价,这个等价性依赖一种叫WY表示(WY representation是一种把多个秩一矩阵更新压缩合并成一次矩阵运算的数值线性代数技巧,最早用于QR分解)的技巧。
这就好比你要给一百个人依次理发,如果你一个一个来,效率很低;但如果你能证明"先剪完前五十个人的效果,和把这五十个人的所有操作合并成一次统一处理再执行,结果完全一样",你就可以把理发师分成两组同时干活,最后再核对一下衔接处有没有问题。这正是分块并行能加速训练、又不改变数学结果的原因。
实验结果:没有全面碾压,但确实站稳了脚跟
说到实际效果,论文没有夸大其词。
在FineWeb-Edu这个网页文本数据集上,用124M到130M参数规模的模型跑了500亿token的训练量,对比了Transformer、RetNet、Mamba-2、DeltaNet、门控DeltaNet等一众基线模型。
结果是,采用回归目标的Falcon-1.3困惑度(一种衡量语言模型预测准确性的指标,数值越低说明模型对文本的预测越准)达到17.10,是所有模型里最低的,最强的基线门控DeltaNet是17.32,差距不大但确实领先。而内积目标里表现最好的Falcon-1A.3是17.40,比基线略高一点,没有全面碾压。
下游任务准确率上,零样本平均分Falcon-1A.2以49.30分排在所有列出模型的第一位,单样本平均分Falcon-1.3以49.54分同样领先。这里要说清楚,这些优势幅度都在1个百分点上下浮动,不是那种"吊打式"的胜利,更像是"打平略胜"。
真正让人眼前一亮的,是在变长数字加法这个专门测试长度外推能力的任务上。
模型在训练时只见过1到32位数字的加法,测试时要在33到48位的更长数字上外推。这相当于一个学生只学过两位数三位数的加法题,考试却出了一道二十位数的题,能不能靠理解规律而不是死记硬背来解出来,是检验模型是否真正学到"进位机制"这个通用逻辑,而不是记住了具体数字组合。
结果显示,Falcon-3A.3的平均准确率达到87.2%,是所有对比模型中最高的,第二名是Falcon-1A.3的85.9%。作为对照,普通Transformer只有65.8%,Mamba-2是75.2%,RetNet是82.9%。这个差距不小,在48位这种最难的长度上,Falcon-3A.3和Falcon-1A.3都能做到69%的准确率,而Transformer只有49%,相当于每两道题就要错一道。
这说明什么?这说明当任务的核心是存储和进位传播这类需要精确记忆和规则外推的能力时,论文提出的对齐、归一化的更新方式,确实比传统写法更擅长把学到的规律泛化到没见过的长度上。
这套框架真正解决的矛盾是什么
回过头看,这篇论文最有价值的地方,不是提出了六个新模型名字,而是把循环模型里一直被含糊处理的三件事,彻底拆开了。
时序对齐是第一件事,决定了模型到底在优化哪个目标;可塑性是第二件事,决定了新信息应该以多大力度写进记忆;遗忘是第三件事,决定了旧信息应该以多快速度衰减。
过去这三件事往往被揉在一个统一的门控系数里,你根本分不清模型表现好或者不好,到底是哪个环节出的问题。Falcon把它们拆成了βt(可塑性增益)、λt(遗忘系数)、ηt(实际步长)三个独立可控的旋钮,每个旋钮的物理含义都对应着一个明确的优化目标。
这就像调音响,以前你只有一个总音量旋钮,声音大了小了你说不清是低音太闷还是高音太刺,现在你有了低音、中音、高音三个独立旋钮,每个旋钮该往哪个方向调,你能说出具体理由。
写在后面
读完这篇论文,最让我意外的不是Falcon系列的具体公式,而是那个关于时间错位的发现本身。
它揭示的其实是一类更普遍的陷阱,当一个系统看起来"因果上没问题"的时候,不代表它内部优化的目标是对的。同样都是"读了前面的东西再预测下一个",用同一时刻的特征配对和用上一时刻的特征配对,数学上都能跑通,loss都能下降,但两者训练出来的内部表征可能完全不是一回事。这种细微的错位,不写公式很难被肉眼发现,却可能悄悄决定了模型能不能真正学会"进位"这种需要精确规则外推的能力。
另一个值得记一笔的细节是,论文里那个滑动窗口平均的设计。窗口开大开小,更新幅度居然可以做到不随窗口线性放大,这个"平均"而不是"求和"的选择,看似是个很小的工程决定,却直接决定了这套机制在长文本、长窗口场景下会不会崩掉。很多论文可能会在附录里一笔带过,但这篇论文专门用了大段篇幅证明这个不变性,说明作者是真的踩过这个坑。
这篇论文没有解决的问题也很明显,语言建模上的提升幅度普遍在1个百分点以内,离"显著优于现有方法"还有距离,更像是提供了一套更严谨的分析工具和一组值得进一步打磨的候选方案。它更像是给整个领域递了一把尺子,告诉大家"这里有个你们可能没量过的维度",至于这把尺子最终能不能催生出真正意义上大幅超越现有模型的架构,还得看后面有没有人接着往下做。
如果你此刻正在设计任何一种"边处理边更新内部状态"的系统,不管是推荐算法里的用户画像更新,还是聊天机器人的对话记忆管理,都值得问自己一句:我现在用来更新这个状态的数据,和我期望这个状态未来用来做什么,这两者的时间点,真的对齐了吗?
Q&A
Q1:Falcon Attention和普通的Transformer注意力机制有什么区别?
A:Transformer需要把每个字的信息都存进不断增长的KV缓存里,计算量随序列长度平方增长。Falcon把历史信息压缩进一个固定大小的循环状态,每读一个新字只需常数时间更新,训练成本是线性增长而不是平方增长。
Q2:Falcon-1、Falcon-2、Falcon-3有什么不同?
A:Falcon-1所有值通道共享同一个学习率,计算简单。Falcon-2给每个值通道配独立学习率,能针对不同信息维度精细调整但计算量略高。Falcon-3用滑动窗口,一次看最近几步数据做小批量更新,能降低单步噪声的影响。
Q3:这套方法真实效果怎么样,值得关注吗?
A:在语言建模上比最强基线略有优势但幅度不大,困惑度17.10对比17.32。真正亮眼的是变长数字加法的长度外推任务,Falcon-3A达到87.2%平均准确率,明显超过Transformer的65.8%和Mamba-2的75.2%。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.