你有没有想过一个问题:一个AI模型的"安全性",到底应该长在哪里?
(资料图片仅供参考)
大多数人的直觉答案是,长在训练数据里。你喂给它足够多"这样问我我不能回答"的例子,它就学会了拒绝危险请求。这也是目前主流的做法,叫监督微调。听起来很合理,对吧?
但这里有个问题很少有人问出口:如果安全性只是训练数据喂出来的一层皮,那它跟模型的"能力"本身,到底是不是同一个东西?换句话说,当模型处理一段很长很长的上下文,一路记忆、推理、调用各种能力的时候,那层安全的皮,还在不在?
上海AI实验室的一个团队,就是从这个缝隙里钻进去的。他们做的这个东西叫**Safin-1**,核心想法挺大胆:安全不应该是外挂的护栏,而应该是模型自己"记忆系统"里长出来的一部分能力。
这篇论文的标题里有个词特别扎眼,叫"Safety from Within",直译是"从内部而来的安全"。听起来有点玄乎,但拆开看,其实是在回答一个具体到不能再具体的工程问题:**能不能让模型用它存储历史信息的同一套机制,顺便也存储"该怎么安全地回应"这件事?**
这事儿要讲清楚,得先从一个更基础的矛盾说起。
记忆这件事,难在哪
先说结论:目前几乎所有处理长文本的语言模型,都有一个共同的软肋,叫"单一状态瓶颈"。
这是什么意思呢?
我们知道,处理长文本主要有两条路。一条是Transformer的自注意力机制,它对每个之前出现过的词都保留精确记录,好处是查得准,坏处是记录量随文本长度平方增长,处理128K长度的文本时,显存和计算量都会爆炸。
**注意力机制*:一种让模型在处理某个词时,能够回看前面所有词并计算相关性权重的机制,是Transformer架构的核心。**
另一条路是循环模型,比如Mamba、Gated DeltaNet这些,它们不保留完整历史,而是把所有历史信息压缩进一个固定大小的"状态"里,像一个不断被覆写的笔记本。这样做效率高,内存占用恒定,但代价是:一旦某个早期的重要信息被后面的信息覆盖或稀释,你就再也找不回来了。
这个代价说白了,就是记忆会衰退,而且是不可逆的衰退。
打个比方。假设你正在读一本五百页的悬疑小说,读到第三百页时,作者提了一句"第十五页出现的那把伞,颜色是红色的"。如果你是那种把每一页都完整拍照存档的读者(这就是Transformer式的记忆),你可以立刻翻回第十五页核实。但如果你是那种边读边把内容压缩成一句话摘要、然后不断更新这句摘要的读者(这就是循环模型式的记忆),那到了第三百页,你脑子里关于"伞"的信息,可能早就被后面两百多页的新情节冲刷掉了,压根想不起来伞是什么颜色。
如果不解决这个问题会怎样?模型在处理长上下文任务时,就会一直"忘事儿",尤其是那些出现得早、后来又被反复提起的关键信息。这不是理论问题,而是实实在在的能力短板,论文里的实验数据也印证了这一点。
**循环模型*:不保留完整历史记录,而是把之前所有输入压缩成一个固定大小状态、逐步更新的模型架构,比如Mamba、RWKV、Gated DeltaNet等。**
那怎么办?一种直接的思路是,别把旧状态扔了,把它存起来,变成可以随时被检索的"档案"。这正是Safin-1的核心架构MARCH要解决的问题。
MARCH:给循环模型装一个可检索的记忆档案柜
MARCH的全称是"跨上下文历史的记忆锚点路由"。名字有点绕,但机制不复杂。
核心想法是这样的:循环模型在处理文本的过程中,状态会不断演化,就像前面说的那本被压缩的摘要。MARCH的做法是,每隔固定的间隔(论文里默认设置是每512个词),就把当前的状态"拍一张快照",存进一个档案库里。这些快照不是简单复制,而是带着"从头到这一刻为止"的全部累积信息,论文里管这个叫"状态锚点"。
**状态锚点*:循环模型在处理文本过程中,每隔一定间隔被保存下来的累积状态快照,可以被后续的词汇重新检索访问。**
关键的巧妙之处在于,每个锚点旁边还配了一把"检索钥匙"。这把钥匙是根据锚点自身存储的内容生成的,不是简单的位置编号。也就是说,模型检索历史信息时,靠的不是"我要找第几页",而是"我要找内容跟现在最相关的那一段"。
这就有点像图书馆的编目系统。如果图书馆只按照入库时间给书编号,你想找一本讲量子力学的书,得从头翻到尾。但如果图书馆按照书的主题内容编目,你直接查"量子力学"这个关键词,就能定位到相关的书架。MARCH做的就是后者:每个存档的记忆状态,都带着一个能反映它内容的"主题标签",供后续查询时按内容匹配,而不是按时间顺序死板检索。
如果不这样设计,只按时间顺序保存和检索会怎样?那就退化成了简单的滑动窗口机制,模型只能看到"最近"的几段记忆,而不是"最相关"的记忆。论文里的实验清楚地证明了这一点:在RULER基准的24项针对性检索任务里,配备MARCH的模型在19项上超过了最强的循环模型基线,在剩下5项上打平,尤其是在超出训练长度(32K,而训练只到16K)的场景下优势更明显。这说明按内容检索的机制,天然具备一定的长度外推能力,因为检索规则不依赖于序列长度本身。
具体的数字上,论文的0.8B规模验证实验显示,配备MARCH的Gated DeltaNet模型,在NIAH(针针见血地考验模型能否从长文中精确找到一个特定信息点)测试上,把基线的31.6分拉到了46.4分,提升了47%。同时在LongBench(考察长文档理解能力的综合测试集)上,平均分从11.9提升到14.9,提升幅度达到25%。
值得一提的是,当模型检索一个信息点时,它并不是非此即彼地选一个,而是可以用概率权重同时参考多个历史锚点,还留了一个"什么都不选"的选项。这个"空选项"的存在很重要,论文的消融实验显示,如果去掉这个选项,各项指标都会明显下降。原因也不难理解:不是每次生成新内容时,都需要翻旧账,有时候当下的信息就够用了,硬要每次都检索历史反而会引入噪音。
这套机制不是空想,论文团队在GDN、KDA(Kimi Delta Attention)、GDN2这三种不同的循环网络更新规则上都做了实验,MARCH都带来了一致的提升,说明这个思路不是碰运气凑出来的,而是一种普适的架构补丁。
从记忆到安全:一个状态库能装的不只是历史
讲到这里,MARCH本身已经是一个扎实的架构改进。但论文真正让人眼前一亮的地方,是接下来这一步:既然这个状态库可以存放"从上下文里提取出来的历史记忆",那能不能往里面塞一些不是从当前对话里来的、而是提前训练好的"通用能力状态"?
论文管这个叫"持久能力状态",Safety State(安全状态)就是它的第一个具体实例。
做法是这样的:先把整个语言模型的骨干网络冻结住,不让它的参数再发生任何变化,然后单独训练一小撮参数,这撮参数以跟状态锚点完全相同的格式,插入到路由检索的候选池里。训练数据来自1000条有害请求配上安全回应、以及915条正常请求配上正常回应的样本。训练完成后,这个Safety State就可以像一个U盘一样,插到模型里、或者拔出来。
**LoRA*:一种参数高效微调方法,通过在模型权重上叠加低秩矩阵来实现定制化,而不用重新训练整个模型的所有参数。**
为什么要这么设计,而不是直接用大家更熟悉的LoRA微调?
这里有个反事实很值得琢磨。论文专门做了一个对照实验:同样的数据、同样的训练步数,一组训练Safety State,另一组训练一个rank-8的LoRA。结果发现,在4B模型上,Safety State把平均越狱攻击成功率(ASR,越低说明模型越难被诱导说出有害内容)从6.65%降到3.84%,而LoRA只降到5.33%。到了35B-A3B规模的模型,差距更明显:Safety State把ASR从5.89%压到2.81%,LoRA是3.04%。
但更值得关注的是另一个指标,叫过度拒绝率(XSTest上的ORR)。这个指标衡量的是模型会不会把明明无害的正常问题也当成危险内容拒绝回答,是安全对齐里最容易踩的坑。数据显示,在4B规模上,Safety State只让过度拒绝率上升了0.4个百分点(从8.6%到9.0%),而LoRA让这个数字暴涨了5个百分点(从8.6%到13.6%)。到35B-A3B规模,这个差距进一步拉大:Safety State只涨了2个百分点,LoRA却涨了10个百分点。
这个对比说明了什么?说明把安全知识塞进模型权重(LoRA的做法),和把安全知识作为一个"可被路由动态调用"的记忆候选(Safety State的做法),效果是不一样的。LoRA修改的是权重本身,这种修改是"全局性"的,一旦训练偏了,很容易把模型变得对什么都草木皆兵。而Safety State是路由决定的,每个词、每种上下文,模型会自己判断这次要不要调用这个安全记忆,调用多少权重,这种"按需调用"天然就比"全局改写"更精细。
打个比方,这就像一个医院的会诊制度。LoRA式的做法相当于给每个医生都重新培训一遍诊断标准,培训完之后,这个医生看什么病都会变得更谨慎,可能导致该开药的时候也犹豫不决。而Safety State式的做法,相当于医院请了一位专门的安全顾问,平时不参与日常问诊,只在系统判断"这个病例可能有风险"的时候才被叫来会诊,不需要会诊的场合,原来的医生该怎么看病还怎么看病。如果不设立这样一个"按需咨询"的独立角色,而是让每个医生都变成半个安全专家,后果就是所有人的正常工作节奏都被打乱了,这正是LoRA过度拒绝率飙升背后的逻辑。
论文团队还专门设计了一个很细致的训练技巧,值得展开说说。他们在构造训练数据时,给同一个安全对话样本配了三种不同长度的"前置对话"(0个、512个、2048个良性对话token),分别对应模型内部"没有历史记忆锚点"、"有一个锚点"、"有多个锚点组成的完整记忆库"这三种状态配置。这么做的目的是让Safety State在各种历史记忆的组合情况下都能稳定发挥作用,而不是只在某种特定上下文长度下才管用。这个细节说明团队非常清楚,安全能力不能只在实验室的理想条件下测试,必须在各种真实的、参差不齐的对话历史里都站得住脚。
规模验证:从0.8B到35B,这套思路撑不撑得住
任何架构创新,最怕的就是"小模型上很好,一放大就失灵"。Safin-1团队显然也知道这一点,所以在完成0.8B的架构验证后,又把整套方案搬到了4B和35B-A3B(混合专家结构,总参数35B,实际激活约3B)两个更大的规模上,分别基于Qwen3.5系列的骨干网络做了持续预训练和监督微调。
结果怎么样?先看几个硬指标。
在数学能力上,AIME 2025(一项竞赛级数学测试,用Avg@64衡量,即对每道题采样64次求平均正确率)这一项,Safin-1在4B规模上从55.57%提升到63.59%,提升了8.02个百分点;在35B-A3B规模上从71.88%提升到80.10%,提升8.22个百分点。而同时,GSM8K和MATH这两个"基础款"数学测试的分数基本保持稳定,波动不超过1.5个百分点。
这个结果有意思在哪?说明架构改进带来的收益,不是均匀地撒在所有任务上,而是集中体现在那些真正需要"长链条推理、反复回顾前面步骤"的高难度任务上。竞赛数学题往往需要模型在推导过程中,不断参考前面已经确立的中间结论,这正是MARCH这种"可检索历史状态"机制最能发挥作用的场景。
在知识推理方面,GPQA-Diamond(研究生级别的高难度问答测试)这一项,35B-A3B规模上从64.65%跃升到71.21%,涨了6.56个百分点。MMLU-Pro在4B规模上从58.27%提升到67.55%,涨了9.28个百分点。
在代码生成上,4B规模的MBPP测试从59.2%提升到65.4%,涨了6.2个百分点;HumanEval持平。35B-A3B规模两项都有小幅提升。
十项能力测试里,Safin-1在4B规模上七胜一平两负,在35B-A3B规模上九胜一负。这个胜率放在架构改进的语境下,已经算是相当能打的成绩单了,尤其考虑到这不是靠喂更多数据堆出来的,而是纯粹的架构层面调整。
再回到安全维度,论文单独报告了经过完整CPT-SFT流程(持续预训练加监督微调)之后、还没加上专门Safety State之前的基线安全表现。数据显示,即便只是架构层面的改动,平均越狱ASR在4B规模从7.25%降到6.65%,在35B-A3B规模从6.89%降到5.89%,也就是说MARCH架构本身对安全性也有一点点正向贡献,而Safety State是在这个基础上再叠加一层专项优化。
效率问题:检索历史会不会拖慢速度
一个自然会冒出来的疑问是:每次生成新词都要去检索一个不断变大的历史状态库,会不会越用越慢?
论文对这个问题给出了两手准备。一是设计了一套硬件层面高度优化的读写实现,借鉴了FlashAttention的I/O感知思路,把路由打分、归一化、加权读取这几步融合成一次流式计算,避免生成体积庞大的中间矩阵占用显存带宽。二是提供了一个稀疏检索选项,叫Top-4路由,意思是每次只从所有历史锚点里挑出打分最高的4个参与计算,而不是全部纳入。
**Top-K路由*:只从所有候选项中挑出打分最高的K个参与后续计算,以此减少计算量的一种稀疏化策略。**
效果如何?论文给出了一个挺震撼的数字:在128K token(约合十几万字)的超长序列上,采用Top-4稀疏路由之后,训练吞吐量比全量密集路由提升了两倍以上,核心运算的耗时更是缩短了大约一个数量级。
这个设计思路,其实跟现代城市的地铁调度有点像。如果地铁公司规定每一辆车都必须停靠所有站点(相当于密集路由),乘客确实能在任何一站上下车,但整条线路的运行效率会大打折扣。如果换成"快线加慢线"的组合(相当于稀疏路由,只挑最相关的几个站点重点服务),大部分乘客能更快到达目的地,只是极少数偏门需求可能要多绕一点路。论文的消融实验也印证了这个权衡:Top-4路由相比全量检索,在NIAH这种极度依赖精确检索的任务上确实会有一点点性能损失,但换来的是数量级的速度提升,这笔账在实际部署时通常是划算的。
这套思路建立在谁的肩膀上,又会往哪儿走
Safin-1不是凭空出现的。它的骨干循环网络Gated DeltaNet,本身是2025年前后一系列"改进型循环模型"研究浪潮中的一支,这个方向的起点可以追溯到更早的Mamba(选择性状态空间模型)和线性注意力(Linear Attention)工作,它们共同的目标都是找到一种比Transformer更省资源、又不太牺牲长文本处理能力的架构。
在安全对齐这条线上,论文提到了几个值得关注的先行者。比如STAR-1这项工作证明了,只需要1000条精心挑选的数据,就能显著提升推理模型的安全对齐水平,这也是Safin-1安全训练数据规模选择的直接参考依据。另外像Circuit Breakers(通过重新路由内部表征来阻断有害输出的方法)、以及基于表征工程的一系列干预技术,都代表了"不改权重、改行为"这条技术路线的不同尝试,Safin-1的Safety State可以看作是这条路线上一个走得更彻底的版本,因为它把干预机制彻底嵌入到了模型原生的记忆检索通路里,而不是外挂一层激活层面的干预。
论文团队也很坦诚地承认了几个尚未解决的问题。比如,状态库会随着上下文变长而持续膨胀,稀疏路由降低了检索开销,但没有解决存储本身的增长问题;固定间隔的锚点创建方式,可能会保留不少冗余信息;目前的大规模实验只覆盖了两个Qwen3.5配置,安全测试的语料规模也偏小,还没有测试过多语言场景或者更刁钻的自适应攻击;更重要的是,35B-A3B规模上Safety State对知识类和代码类能力的保留效果并不完全稳定,这说明"安全和能力如何两全"这件事,规模越大,变数也越多。
写在后面
读完这篇论文,我最先被触发的一个念头是:我们习惯把"安全"和"能力"当成两码事去分别优化,一个归对齐团队管,一个归预训练团队管。但Safin-1这个工作提出的架构,悄悄挑战了这种二分法,它把安全变成了跟记忆同一个数据结构里的东西,两者用的是同一套路由机制。这意味着,如果未来这个思路走得更远,安全和能力可能不再是两个需要来回权衡的独立维度,而是共享同一套"何时调用什么"的决策系统。
另一个让我反复想的细节,是论文里那个"用不同长度的前置对话训练同一个安全样本"的做法。这其实暗示了一个更普遍的问题:大部分安全对齐研究,测试的都是"裸提问"场景,一个问题直接甩给模型。但真实世界里,危险的请求往往是埋在一长串正常对话之后突然冒出来的,模型的历史记忆状态在那一刻已经不是空白的了。这篇论文至少意识到了这一点,并且专门为此设计了训练方案,这个视角本身可能比具体的技术实现更值得后续研究者借鉴。
论文标题里那句"我们强调这项工作只是Safety from Within这个更宏大愿景的初步架构探索"读起来挺谦虚,但也挺诚实。安全性可插拔、可检测、按需调用,这件事听起来很美好,但一个可以被拔掉的安全模块,是不是也意味着它可以被恶意地拔掉或替换?论文自己也提到了这个"完整性问题",却没有给出答案。这大概是留给这条技术路线接下来必须回答的问题。
Q&A
Q1:Safin-1是什么?
A:Safin-1是上海AI实验室提出的一个基础模型家族,核心创新是把安全能力做成一个可以插拔的持久记忆状态,和上下文历史记忆共用同一套检索机制,而不是依赖传统的微调或外部护栏来实现安全对齐。
Q2:MARCH架构解决了什么问题?
A:MARCH解决的是循环模型(如Mamba、Gated DeltaNet)的单一状态瓶颈问题,即早期信息容易被后续更新覆盖而无法找回。它通过定期给循环状态拍快照并生成内容相关的检索钥匙,让模型可以按需回看历史信息,而不是只能访问最新的压缩状态。
Q3:Safety State和常见的LoRA微调比,优势在哪?
A:在相同训练数据和步数下,Safety State在4B和35B-A3B两个规模上都实现了更低的越狱攻击成功率,同时过度拒绝正常问题的比例远低于LoRA。这说明按需路由调用安全能力,比全局修改模型权重更精细,更不容易误伤正常对话。