阿克苏地区网站建设_网站建设公司_VPS_seo优化
2026/1/2 3:01:49 网站建设 项目流程

严格说这论文是2025年12月31号写的,但是2026年1月1号发了

论文没多长,但是坦率说对大多数同学来讲有点抽象

先说它干了啥?

就是让残差网络变得表达更丰富,同时可训练了(这个其实不是它发明的,在HC的时候也就是hyper-connect的时候就已经有了,之前字节的论文 https://arxiv.org/pdf/2409.19606)

残差网络如果大家都不知道是干啥的,还是推荐看我的transformer入门草履虫系列

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(1)

当然残差也不是transformer的作者发明的hekaiming和sunjian他们15就发了论文了

https://arxiv.org/abs/1512.03385

用在transformer里面

标准 Residual(ResNet / Transformer 残差)

如果多层展开的话

啥意思呢?

在标准 Transformer 里,一层大概是这样(pre-norm 版本),因为现在RMS+prenorm都几乎从llama开始就是标配了

这里:

xl:这一层的输入,也是这一层“残差的载体”(一般transformer skip connection 那根线);

就是图里我标红的这根跨层的折线。图里把res和norm都整一起了,一般人可能把这俩玩意当一个function了,其实不是

F:这一层的计算(attn / mlp);

xl+1 = xl + F(hl):“把上一层的输出(可以看成原始特征)加回到这一层的输出上”。

在单层水平(一个transfomer layer,比如llama啥的有动不动好几十层)这么理解是没毛病的。

在字节的那个论文hc,页就是hyper-connetions的论文里面,给这东西给扩展了

它认为啥呢,认为这一股子一股子的残差线,其实是一个流,它叫

Residual Stream(残差流)”是把这根线当成一条“贯穿整个网络的通道”

他们不是只盯一层,而是把“那根做 skip 的线”看成一个贯穿所有层的、连续的“信息通道”。

我们把所有层给罗起来

其实就是我上面那个式子

这时候你可以把{x0,x1,...,xL}看成一条沿着层深度向前流动的“状态”,

这条状态在每一层都会:

先被拿出来做一点计算(norm + F);

然后又被加回去,成为下一层的状态。

这条在层与层之间“流动”的状态,就是刚才整出来的概念residual stream(残差流)。

好我们总结和展开一下。

标准 Transformer 里:

每一层的状态xlxl是一个C 维向量(忽略 batch / seq 维,这C其就是embedding_dim或者说hidden_size),相当于只有一条主干。

HC / mHC 做了一个关键扩展:

把这条主干扩成 n 条并行的主干

数学上是:

原始:

HC/mHC:

也就是说:

以前:只有一条 residual stream;

现在:有n 条 residual streams,每条都是 C 维;

这 n 条一起就叫n-stream residual(n 路残差流)。

所以这些论文里他们整个概念 “widen the residual stream” 其实就是:把那根贯穿所有层的“残差主干线”,从 1 路升级成 n 路总线,每层可以在这 n 条线上做更复杂的混合和路由。

然后就轮到三个矩阵登场:

H_pre:从这 n 条流里读出一个组合,喂给 F;

H_post:把 F 输出写回 n 条流;

H_res:在层与层之间,对 n 条流做 mixing(“交换机”)

这块估计没看过hc论文的各位就彻底懵了H_pre是啥,H_post, res又特么是啥?

首先我们考虑一个问题:理论 / 表达力层面:为什么“一条主干”也就是标准的残差不够爽?

还是这个式子

从“信息流拓扑”角度看:

所有层,都在同一条 1 路残差主干上叠加信息;

这条主干只做两件事:

但结构是很“单调”的:

每层的贡献只能“线性地堆叠”在这条主干上;

不同层之间的互动主要是:

所以:在“微观块 F”的设计上(Attention / MLP / MoE),大家已经卷到飞起(光今年改attention和mlp的论文就如过江之鲫了);但在“宏观拓扑 / 跨层连接”上,标准 residual 还是很朴素的(说白了就嫌乎传统redidual牛夫人了,连位置编码,norm都每年好多人改,这玩意多少年没人动

)。

如果硬要给多路 residual stream 的核心增益做个定义:更多可学习的“跨层路由模式”

把残差从 1 路扩到 n 路后,你等于是获得了一个n维的“跨层状态空间”:

每一层不仅可以修改当前的状态,还可以通过H_res重新组合这 n 条流;

信息在不同层之间可以走很多不同路径,而不是一刀切地走同一条主干。

举个类比(粗糙但好理解):

标准 residual = 一个“笔直的大走廊”,每层是沿着走廊布置一个小工作间,每层都往同一条走廊上贴东西;

n-stream residual = 有 n 条并联的走廊,每层可以决定:

这种结构允许:

一些信息在某几条流里多绕几圈再汇合;

某些 pattern 可以沿着特定流传播;

多层之间的相互作用可以更加细粒度 / 结构化。

从宏观设计上,这和:

DenseNet 的密集连接、

Deep Layer Aggregation 的逐级聚合、

Residual Matrix Transformer / DenseFormer 那些“改残差拓扑”的工作

是在同一类思路里:即用更复杂的拓扑结构来提升表达能力,而不是只靠“更大的 F”或“更深的层”。

老说这3个矩阵,那H_pre、H_post、H_res分别干嘛?

这三个就是用来操作这 n 条残差流的“路由矩阵”:

H_pre:从 n 条残差流里“选 / 混合”出给 F 用的那一条

形状:H_pre ∈ R^{1×n}(一行 n 列的向量)

作用:把 n 条残差xl ∈ R^{n×C}压成一条 C 维向量,作为 F 的输入。

如果xl的第 k 条流是

那么:

输入给 F 的向量=

展开看就是:

有 n 条信息流,各自带不同内容

H_pre 决定“这层的 F 要看哪些流、每条流占多大权重”,

把它们线性混成一条向量喂给 F,所以它是相当于混以前多个residual进到一起和它一顿dot乘然后送给F来做这次的residual+norm

H_post:F 算完之后,决定往 n 条残差流里怎么“写回”,你当然得写回了,因为你算完了要有值的啊,要再写回去,以供下一次算。

形状:H_post ∈ R^{1×n}(也是一行 n 列)

作用:F 的输出是一个 C 维向量,而残差流有 n 条,每条都 C 维。H_post决定F 的输出加到每一条流上的比例。

HC 的写回形式是:

写回部分=

H_post^T ∈ R^{n×1}

F(...) ∈ R^{1×C}

结果是n×C,正好对应 n 条残差流的“写入增量”。

展开一下:

对第 k 条流来说:

F 算出一个“更新向量”对吧?

H_post来决定:

这次更新要写入到哪几条流?(不是每次都要写到所有的residual里去的)

每条流写入多少比例?

H_res:在 n 条残差流之间“搅拌 / 混合”的矩阵

形状:H_res ∈ R^{n×n}

作用:在进入下一层之前,把 n 条残差之间再线性混合一遍。

HC / mHC 的残差更新大致是:

其中:

H_res xl:对当前 n 条残差流做一次线性变换 / mixing。

H_post^T F(...):把 F 的输出按 H_post,写回到各流。

再加在一起就是下一层的 n 条残差

你可以这样想:

如果把 n 条残差流看成 n 个“通道”,

H_res就是在一层和一层之间,对这 n 个通道做一次“通道混合矩阵乘法”。

每一层都可以重新洗牌:第 1 流可能变成“以前 2,3,4 流的混合”;第 2 流则是“以前 1,4 流的混合”,等等。

为啥要这三个矩阵?折腾啥呢?

如果只看结构需求:

我们想要宽残差流(n×C)来增强拓扑表达能力;

但真正的计算块 F(比如 Attention / MLP)还是对一个 C 维向量操作更合理(不想直接写一个“n×C→n×C”的超级 F);

所以需要:

从“工程接口”的角度看,你可以把它们看成:

H_pre:读接口(多路残差 → 单路输入)

H_post:写接口(单路输出 → 多路残差)

H_res:总线内部的路由 / 交换机(n 路 ↔ n 路)

然后这三玩意都是可以训练的。

好了,这个事讲通了HC,也就是hyper-connections 为啥要折腾10多年没变的residual net了

那 回到deepseek这个新发的论文,所谓的mHC 到底改了啥?

mHC 没改这三个对象的“角色”,只是给它们加了约束,尤其是H_res:

H_res:投到“双随机矩阵流形”上(非负,行和列都等于 1):

H_pre,H_post:用 Sigmoid 保证非负(H_post再乘 2 得到 0~2 范围):

估计看到这可能又得糊涂了,稍微展开一点吧

首先为啥要做这个事

如果不做的话呢?

比如咱就说刚才讲完的HC,hyper-connections

咱就说deepseek论文里的这个公式啊

类似地有tilde_H_post、tilde_H_res。

这里:

tanh

输出在 (-1,1);

再乘个可学标量α,加上 biasb,就完全没界了:

mHC 里给的约束

他们换了一种参数化(,最后得到:

σ

是 Sigmoid,输出在 (0,1);

所以:

H_post:元素范围在 (0,2)。

翻译一下好理解:

全部非负(no negative coefficients)

有上界

你可以把这理解成:原来的 HC:“读写权重”是没上限、可正可负的小权重网络 → 容易疯狂放大 / weird 混合;

到了mHC:

把这俩变成“0~1 / 0~2 的门控系数”,

门控可以开大开小;

但不会把信号翻成几十倍再传下去。

其实嗨有一更更关键的,也是放大的问题比内两个还危险,页就是H_res

问题先讲白:原始 H_res 为啥危险?

H_res它是啥?刚才讲了是一个n×n的矩阵,用来在 n 条残差流之间 mixing对吧?

不考虑 F,只看“残差总线从这一层到下一层的传递”,就是这么一个线性变换。

多层叠起来,就是一串矩阵乘:

我问你个问题?

你为啥做深度学习的时候,为什么要把概率换乘对数概率?为了怕连乘上下溢出(其实没上溢什么事,在这里为了押韵,skr

)对不,这你这老大一个连乘,你看不出来?

如果每个H_res的元素可以是正的也可以是负的,行和列也随便多大,那:

某一层可能把某条流乘个 10;

再下一层又乘个 10;

十几层后就可能乘了 10^k 这种数量级,直接爆。

论文里量化这个“放大倍数”,定义了一个指标:

Amax Gain Magnitude= 最大的行和 / 最大的列和(取绝对值),大概理解为“最糟情况下会被放大多少倍”。

在原始 HC 里,这个指标能冲到 3000;

这就是:数值不稳定,loss/grad 会爆的根源。

总结一句:原始H_res是一个“没有刹车、又能乱放大”的混流矩阵,多层一叠就容易炸。

mHC 的核心点:强行把 H_res 限制成一种“温和、守恒”的矩阵

他们给H_res加了一个非常强的几何约束:

H_res,必须是一个”双随机矩阵“(doubly stochastic):

所有元素 >= 0;

每一行的和 = 1;

每一列的和 = 1。

所有满足这仨条件的矩阵集合,就叫做“双随机矩阵流形”,也叫 Birkhoff 多面体。

你可以先不管名字,就理解成一个很很保守的 mixing 矩阵堆就完了。

把任意原始矩阵H~res拉到这个集合里,就得到 mHC 的H_res:

为啥这个约束这么有用?

“每条流的输出是其他流的凸组合(不会无穷放大)”

看“行和 = 1,元素非负”这一条:

对第 i 行来说:

是一组非负、和为 1 的权重(Hlres)i,∗是一组非负、和为1的权重

输出的第 i 条流是:

这不就是“拿 n 条流,做一个加权平均(凸组合)”吗?

关键:

加权平均不会把数值随便乘 100 倍;

它最多就是在不同流之间“洗牌 / 混合”,但不会凭空放大幅度。

这一点就已经把“单层随便爆炸”的风险压下去一大截。

“多层复合后仍然保持‘均值守恒 + 范数不扩张’,恢复类似 identity mapping 的稳定性。”

再看“列和 = 1” + “非负” + “矩阵乘法下封闭”这三点:

列和 = 1:

谱范数 ≤ 1(范数不扩张):

在矩阵乘法下封闭:

对比原来的 identity mapping:

传统 residual:

mHC 的做法:

所以说:

他们不是简单地恢复 “H_res = I”,那样没有流间交互;

而是说:“H_res 可以随便学,但只能在一个“不会乱放大、不会乱缩小”的集合里学,也就是用几何约束把 identity 的那种“稳”,推广到一整片流形上。

Sinkhorn-Knopp 是干嘛的?

上面说的是“想要的属性”,那具体怎么把一个任意矩阵拉到这个集合里?

做法:

先对原始矩阵

做exp→ 所有元素变成正的:

然后反复做:

循环这个过程若干次(论文里用 20 次),就会收敛到一个双随机矩阵

这就是Sinkhorn-Knopp 算法。

你可以理解成:

“给我一个乱七八糟的矩阵,我每次先按行调一调、再按列调一调,来回 20 次之后,行和列和都差不多是 1 了。”

所以:

来源:

仍然可以由输入动态生成(有表达力);

但最终用来真正做 mixing 的H_res是一个经过“洗白”的、守恒的 mixing 矩阵。

讲完了,我其实已经摆开了揉碎了讲了,如果实在看不懂,就理解为对残差网络的一个优化就可以了,现在让它也变成可学习的参数了,而且不下溢出,可以在某些需要更高表现力的网络的时候不用非的做宽或者做深,

至于有没有用?我其实没在别的LLM网络上看到用HC的,但是看起来是很热闹的。你想啊,原来transformer,要训练的层就是位置编码,attention,mlp,norm的r和b,后来又得训moe 得gate和被拆开的小mlp,现在又得折腾residual,生命不息折腾不止!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询