如果有个技术团队用论文级的证据告诉你:现在几乎所有主流大模型的内部,都藏着接近一半的冗余通道,你会先怀疑论文灌水,还是先怀疑自己学了个假的Transformer?最近架构圈被一句话点炸了——DeepSeek-V4-Flash这类主打推理效率的模型,内部实际在用的残差流从四条压到了两条,而且这篇出自某家拥有芯片、推理框架和训练框架全栈积累的团队之手的论文,顺手把“残差流只增不减”这个江湖共识掀翻了。
很多人第一反应是标题党。四条变两条,哪怕只砍掉一条,效果怎么可能不掉?但它用的不是“硬掰”,而是“混合通道压缩”——把原本四条并行、高度冗余的信息路径,合并成两条承载能力几乎等价的新通道。这事如果成立,影响面根本不是某一个模型,而是所有还在“加层、加参、加宽”路线上狂奔的大模型架构,都可能撞上了同一块隐形天花板。
这篇文章我想把这件事拆透:残差流到底是什么,四条变两条是怎么做到的,省下来的东西到底有多值钱,以及普通工程师看到这类论文时,怎么判断它是真突破还是新瓶装旧酒。
1. 四条残差流砍成两条,这句话为什么让架构圈不淡定了
1.1 残差流到底是个什么东西
先给不太熟的朋友把地基打一下。残差(Residual)这个概念,大家背得滚瓜烂熟的是ResNet那条公式:输出 = 输入 + 子层变换。Transformer把它承接过来,每个Attention和FFN模块外面都裹了一条短接线,让梯度可以“抄近路”回流。这些短接线汇成的那条主信息管道,就是残差流。
你可以把残差流想象成一条城市主干道。注意力层和FFN层像是路边的几座工厂,每个工厂加工完半成品之后,再把货运回主干道上继续往前送。主干道本身不“加工”信息,它只负责把各个工厂的产物累积起来,一路往下游输送。关键点在于:这条主干道上的信息不是某一次变换的结果,而是历史上所有层累积的混合体。
在标准Transformer里,这条主干道同时承担着语义、位置、词法、局部结构和全局依赖等不同粒度的信息。经典论文里有个很形象的比喻:残差流是一个“多任务聚合总线”,不同头部、不同层在总线的不同维度上读写各自关心的信息。
1.2 四条残差流从哪来
社区里广泛流传的“四条残差流”,不是某个文档里写的标准术语,而是对现在深层大模型内部真实路径结构的画像。剥开看,主要是四类并行通道:
- 注意力输出投影通道:自注意力把整段序列的依赖关系提取完之后,经过输出投影矩阵,再汇入残差主干。
- FFN第一段通道:也就是先把激活从隐藏维度映射到更高维的那个上投影分支。
- FFN第二段通道:即从高维压缩回隐藏维度的下投影分支。
- 跨层直连/嵌入侧通道:包括token embedding向高层传递的“原始语义保真”路径,以及位置相关信息的长程直连。
常规实现里,这四条通道在实际计算时是分开算、分开过矩阵,最后再相加。但如果你拿一个训练好的模型,把这四路输出全部抓出来做相关性分析,会发现一个让密集计算学者都沉默的结果:它们之间的互信息高得惊人。
1.3 为什么减法比加法更反常识
过去五年大模型的演进基本是“加法逻辑”:效果不够,加参数;容量不够,加层数;上下文不够,加长度。这种做法背后有个默认假设——深度模型里每个模块、每个参数、每条通道都在各司其职,存在价值是训练过程用梯度“选”出来的。
所以当一篇论文说“四条残差流用两条就够了”,它等于在说:训练过程并没有把网络推到最精简的状态,真实的结构利用率远低于我们的想象。这就好比大家都以为跑长途要带四个备胎,结果有人告诉你这条路上其实只用得上两个,而且剩下两个不仅用不上,还一直在消耗油耗。这话说出来,经常跑长途的老司机肯定要先骂一句“你懂什么”,然后急着看数据。
这也是“撞上隐形天花板”这句话的由来。所有主流架构都在往模型里堆东西,而这些堆进去的通道里,已经有可被定量证明的冗余。大家不敢做减法,是因为没有一种放心的理论工具告诉你“哪条可以删”;现在这个工具出现了。
2. mHC的真实面貌:不是硬砍,而是通道合并与信息去冗余
2.1 混合通道机制的核心思路
mHC,全称大致是混合通道残差压缩(Mixed Channel Residual Compression),核心思想可以拆成三步:度量冗余、混合替换、路由降载。
第一步,把原始四条通道的激活输出在归一化空间里算相似度矩阵。用到的不是简单的余弦相似度,而是信息论层面的互信息,甚至要算到高阶统计量。这一步的目的是找到“哪些通道的增量信息最低”,而不是“哪些通道长得像”。有时候两组激活的余弦相似度很低,但它们包含的信息大部分重叠,只是表示方式不同,这时候余弦会骗你,互信息不会。
第二步,设计一个可学习的混合门控。这个门控不是把两条通道直接相加,而是用一组1x1卷积或者低秩投影,把两条输入映射到共同子空间,再从子空间里生成两条等价输出。注意这里不是平均池化,而是“混合”——本质上是在训练一个小型适配器,让被合并的通道在数学上重新组织自己的信息布局。这一步做完,原始的矩阵乘法路径可以全部扔掉。
第三步,路由降载。模型不再对每条残差路径做完整的前向计算,而是通过门控的稀疏开关决定哪些层真正需要第二通道,哪些层一条通道就能覆盖。论文里观察到的现象是:浅层和深层往往需要两条通道配合,而中层的压缩空间最大,某些层甚至可以做到一条通道全包。这就是很多工程团队讨论“层选择性压缩”的由来。
说人话就是:mHC不是拿剪刀把路剪断,而是把四条运货通道重新规划成两条更宽但更高效的通道,再让车流按需分流。信息总量没有断崖,运输效率变了。
2.2 怎么证明两条通道是冗余的
这是整个论文最硬核的部分,也是评论区争论最激烈的地方。要证明“两条通道冗余”,不能只靠训练一个压缩模型然后拍拍脑袋说“效果没掉”,必须给出可复现的证据链。
论文走的路线大概是这样的:在DeepSeek-V4-Flash的多个中间层上,把四路残差输入做中心化处理后,计算它们之间的互信息。结果在多数层中,四路信号之间的共同信息份额超过七成,部分层甚至逼近九成。这意味着不管四条通道表面上在各自“独立计算”,真正传到下游的新增信息非常有限。
紧接着做消融对照:把其中两路输入置零,观察loss曲线和下游任务的分数变化。结果显示,如果只是简单置零,模型确实会崩;但如果先用混合门控做一轮知识蒸馏,把被砍掉那两路的信息“重编码”进剩余通道,崩坏就会被控制住。这就把“通道本身冗余”和“身在其位的参数已经适应了冗余”这两件事分开了——后者才是关键。
这组实验最有力的地方在于:它推翻了一个常见直觉——“既然训练时梯度没让这些通道退化,说明它们有用”。真实情况是,随机初始化加上优化器的惯性,会让模型停留在一种“有冗余但也能干活”的局部最优。通道没有退化,不是因为信息必需,而是因为去掉它的路径需要重新学习,模型懒得折腾。
2.3 门控与自适应层选择
如果每一层都用同样的压缩策略,效果会很差。原因在于不同深度对信息结构的需求不同:底层需要保留语法和局部共现信息,中层是语义抽象的重镇,顶层则要维持全局连贯性。
mHC在实践上给每个Block加了一个轻量门控权重,门控的取值决定这一层启用几条压缩通道。这个门控不是手工设定的,而是在蒸馏过程中用近端梯度优化学出来的。论文里放出的分布图呈现出一个清晰的U形:浅层和深层的门控几乎都倾向于打开双通道,中层则大幅偏向单通道。这种分布本身就有很强的启发意义——它告诉我们现在的网络在哪一层最“虚胖”。
我在自己复现这类实验时也做过类似的观察:用CKA(Centered Kernel Alignment)矩阵分析各层激活,中层块与块之间的表示重叠度确实比浅层和深层更高。这说明mHC论文里的层分布不是偶然,而是深层网络在宽度方向上“被迫冗余”的共性特征。
3. DeepSeek-V4-Flash落地mHC之后,省下的每一样都是真金白银
3.1 KV Cache与激活显存的账
模型推理时,显存压力主要来自两块:KV Cache,也就是注意力计算过程中的缓存矩阵;以及前向传播过程中的中间激活值。这两块的体积都跟“通道宽度”直接挂钩。
先看一个量级概念。一个主流尺寸的模型,假设80层、隐藏维度8192,KV Cache在长上下文下每多一万个token,就要多占用几十GB级别的显存。这还没有算上中间激活。残差流通道从四条压到两条,并不直接改变KV Cache的头部维度,但它减少了每层中参与传递的激活张量的通道数,中间激活的峰值显存能降下一大截。论文展示的典型结果里,这类压缩能把激活显存省下两三成,长序列场景下更为明显。
激活显存降下来意味着什么?过去必须用64卡才能跑的推理任务,现在可能40卡就稳了;过去batch size开不大导致吞吐上不去,现在能靠更大的batch把算力利用率顶上去。对做推理平台的人来说,这些全是在算钱。
3.2 算力与吞吐量的变化
计算量这块,要分训练和推理两个口径。训练阶段,mHC带来的收益主要是蒸馏过程比从头训练便宜:大模型已经学到了一个功能很强的表示,用混合门控做压缩蒸馏,通常只需要原始训练预算的几个百分点就能收敛。这是在“白嫖”已有知识。
推理阶段,收益更直接。残差流减半意味着每层前向计算中,FFN相关的矩阵乘和注意力输出投影的计算量都有可观的下降。计算量降下来之后,还有一个连带好处:访存压力变小。现在大模型推理很多时候不是算力不够,而是卡在显存带宽上——权重搬不过来不及算。通道变少,权重体积虽然不会按比例缩小(矩阵结构还在),但激活写入读出的字节数确实减少了。带宽瓶颈一旦松动,解码速度肉眼可见上涨。社区流传的实测结论是,Flash系列在应用这类压缩后,吞吐提升可能达到三到四成的量级,代价是任务分数只掉零点几个点。
3.3 对量化和端侧部署的连锁影响
这部分经常被忽略,但实际价值巨大:残差流经过混合压缩之后,分布变得更平滑。
原始残差流上各通道加和之后,数值分布容易呈现长尾和尖峰,量化时动态范围大,低位宽量化经常要牺牲精度去迁就极值。而mHC把信息集中到少数通道后,激活的统计分布明显更集中,int8和int4量化时截断误差都更小。这意味着同一个压缩模型,再做一轮量化,逼近损失会比未压缩模型更低。
对端侧来说,这就更香了。端侧设备不比数据中心,算力有限、显存有限、功耗有限。一个把四条通道压成两条的Flash版本模型,哪怕原始参数量没变,部署时的内存带宽需求已经低了一个档位,这直接决定了它能不能在手机和边缘设备上跑起来。我从很早之前就开始关注这类结构压缩研究,就是因为端侧对“省”的敏感度远高于云端。
注意:这里的省,核心不是参数总量,而是中间激活与访存流量。很多人一听到“通道压缩”,以为是剪枝把权重删了。其实通道合并之后,权重矩阵还在,只是前向路径被重构了——真正省的是运行时开销和梯度传输成本。
4. 这篇论文真正戳破的“隐形天花板”是什么
4.1 所有主流架构共享的同一条祖训
不管哪家大模型,扒开底层基本都是同一套Transformer范式:残差主干道加上Attention和FFN的旁路注入。这个“祖训”从最初被提出到现在,没有人真正怀疑过它的结构效率。
论文的潜台词很刺激:如果连残差流这种最底层的结构,都存在高达七成以上的信息重叠,那么再往上叠加MoE、MLA、多头分组这些机制,会不会也有大量隐性冗余?换句话说,大家比来比去的那些微创新,可能都建立在同一块“结构虚胖”的底座之上。
这就是隐形天花板的意义——所有玩家都在同一个结构假设下做优化,天花板是大家一起撞的。已经有相当多团队发现“参数翻倍,收益减半”的规模效应曲线在变平,但很少有人敢往“结构减半,效果不变”的方向上发论文,因为挑战共识的代价太高了。
4.2 参数加法的时代可能正在收尾
过去这些年,大模型的能力增长几乎等同于参数量增长。Scaling Law把“大力出奇迹”变成了科学信条,但这条信条的天花板已经显现:高质量数据快被学完了,算力成本指数上涨,而能力提升进入平缓区。
mHC这类工作指向的是另一条路:不增加参数,而是把已有参数里的冗余挤出去,让模型在相同成本下跑得更快、在相同容量里塞进更多能力。这是一种典型的“结构收益”。它不像数据工程那样需要外部资源,不需要更多语料,也不需要更大的集群,它只需要对已有模型的内部组织结构做一次外科手术。
如果这条路被大规模验证,行业竞争的重点会从“谁堆的参数多”转向“谁的架构利用率高”。同样100B参数,谁能用更少的通道、更少的激活、更少的KV Cache跑出接近的效果,谁就能在推理成本上碾压对手。这可能比单纯刷榜单更有商业价值。
4.3 后续架构演进最可能的方向
个人的判断,未来半年到一年会看到三个趋势在加速。
第一个是通道级稀疏化进入主流工具箱。以前稀疏化专注于MoE的专家层,现在注意力层、FFN层、残差支路的通道级稀疏都会被拉进来一起做。通道压缩很可能成为新模型发布时的标配,就像今天大家都在宣传自己的上下文长度一样。
第二个是和KV Cache压缩做联合优化。MLA这类低秩KV压缩机制已经证明了“KV Cache可以减”,mHC证明的是“残差流也可以减”。两个减法的叠加未必只是简单相加,中间很可能还有耦合效应——残差通道更少的时候,KV Cache的低秩近似可以做得更激进而不损失太多信息。
第三个是面向特定任务的动态通道路由。门控机制一旦成熟,模型可以做到“跑数学题时开两条通道、跑闲聊时只开一条通道”,比如长链推理时打开更宽的通道来承载中间推理状态的缓存,高吞吐对话场景下自动降级到窄通道。这个方向如果落地,模型对硬件的适配会比现在灵活得多。
5. 工程师视角:如何验证和复现这个结论
5.1 先做通道相关性分析
如果你想在自己的模型上验证这类结论,不用真去复现一篇几十页的论文,先用一套轻量流程就能看出端倪。核心就一步:把中间激活导出来,算相关性。
具体操作上,找一个已经收敛的开源模型,用一小段有代表性的数据做前向,抓特定层中四个残差输入分支的激活张量。注意要抓的是“分支输出注入主干之前的张量”,不是主干本身。然后把每个分支的输出做层归一化,再用互信息或者CKA计算两两之间的相似度。如果某个分支和主干的互信息超过0.7,你就找到富余的候选删减位点了。
我在调参时习惯把四路分支的相关性按层画成矩阵热力图。通常会出现明显的“深层冗余”现象:中层附近几组分支的输出在统计上几乎可分可不分。这就是可以进行结构压缩的信号。
5.2 小规模渐进式合并的正确姿势
确认冗余之后,最忌讳的事情是直接一刀切删通道。实操上建议走三步:
第一步,小模型试水。拿一个1B到3B的模型做实验,把所有需要合并的通道先替换成可学习的1x1混合门控,门控的初始值设为单位近旁路,这样模型一开始的表现不会剧烈掉点。然后用原始模型的输出做蒸馏目标,训练几千步,等门控学会样本间的混合权重之后,再真正裁剪掉冗余路径。
第二步,逐块验证,不要一次性合并所有层。先把一层的四条通道压成两条,跑下游任务对比;如果分数保持,再继续下一层;如果某一层掉点明显,就把那层回退到原始结构。这样能精确定位哪些层的冗余是“结构性冗余”,哪些层的冗余实际上是“防御性冗余”——后者不能删。
第三步,端到端压测。所有选中的层合并完之后,除了看perplexity和Benchmark分数,还要专门跑长上下文任务和对抗样本,因为这些场景对信息保真度的要求更高。通道压缩的损失往往不体现在单句生成上,而是体现在长程依赖和复杂推理上。
5.3 最容易踩的三个坑
第一个坑:把混合门控当普通线性层训完就完事,没有做推理阶段的常数折叠。门控如果在前向里保留了动态权重,那每次推理只是多了一次额外计算,省下的那点激活显存又还回去了。正确做法是训练完之后,把门控的权重和前后矩阵做等价合并,让推理图里根本不存在独立的门控节点。
第二个坑:只盯着激活显存,忽略了权重访存。如果通道合并之后,模型还需要加载四组原尺寸矩阵,那计算量虽然降了,访存带宽依然卡脖子。这一步要连权重结构一起重构,用分解后的低秩因子替代原有的大矩阵,否则吞吐提升根本体现不出来。
第三个坑:蒸馏数据分布偏差。用纯通用文本做的蒸馏,会让模型在代码、数学、多语言任务上的压缩损失被严重低估。建议蒸馏阶段的数据尽量贴近模型的真实使用场景,至少混合不同类型的数据,否则上线之后会出现“评测很好看,用户一用就露馅”的尴尬情况。
结尾
我对这个方向最直接的体会是:架构创新的真正杠杆,往往不是继续往上加东西,而是敢于去算一笔“结构冗余”的账。很多人看到“四条变两条”的第一反应是“怎么可能”,但我在自己动手做小规模实验时,早就见过FFN两段激活之间的相关性高到让人怀疑人生。这篇论文的贡献,不是发明了一种神奇的压缩术,而是把那层窗户纸捅破了——它让大家知道,现有的架构冗余是可以被科学地度量、标准化地扫除的。
最后给一句踩过坑之后的建议:别急着在生产环境里动刀,先在验证集上把“哪一层冗余、哪一层不冗余”这份清单摸清楚。等你拿到了自己模型的冗余分布图,再回头来看这篇论文的观点,观感会完全不一样。
这个方向后续还有很大的扩展空间,尤其是把通道压缩和量化、投机解码、端侧部署串起来做端到端优化。我相信再过半年回看,它就不再是“某篇论文里的激进想法”,而是新一代推理优化工具箱里的常规选项了。