文章

deepseek-v4

本文目录 7

ds v4 is coming!

目前看他们的技术报告的话主要新增的特性就是

  1. hybrid attention:用了CSA和一个低秩投影之后的dense attn HCA
  2. mHC (Manifold-Constrained Hyper-Connections):
  3. Muon Optimizer

包括从V3中继承的 MoE,MTP等等

1. hybrid attn

CSA

在没看之前,我以为ds会沿用之前的DSA,再混合一个线性注意力或者比较dense的小注意力;然而这次却使用了一种新的注意力

新的变体的Attention想要解决的问题基本上都是拥有更长的上下文带来的显存里存的cache过大的问题。DSA(或者说从MLA开始)已经大大缓解cache的压力,将其从N×nhead×hN \times n_{head} \times h变成了N×hcN \times h_c(感兴趣的朋友可以看我的另外其他的blog),新的CSA做的,反而是从压缩NN这里出发

Compressed Sparse Attention,就是做一个compress+sparse;也就是说直觉来说直接把几个kv压缩成一个,同时在计算attn的时候再去用sparse选idx

原始 tokens
t1 t2 t3 t4 | t5 t6 t7 t8 | ...

       ↓ 4:1 compression

    C1      |      C2      | ...

       ↓

Lightning Indexer
找出当前 query 最相关的 Top-K compressed entries

       ↓

Sparse Attention

v4 的参数里的典型的压缩率mm是4,也就是在1M的上下文中,1M/4 = 250K,在这个里面再进行top-K的选取

HCA

Heavily Compressed Attention,从名字上就能看出,如果把压缩比mm提升的足够大,例如128,那么百万的上下文被压缩之后,也不过只有8k左右的键值对,这是完全可以接受的范围,对他可以直接做一个dense的attention计算

SWA

Sliding Window Attention,滑动窗口注意力,一般是只保留最近的T个token的注意力

这里之所以把他单独拿出来,是因为v4的SWA不是把窗口以前的信息全部忘掉,而是为窗口内的部分提供额外的一条信息

它实际上是两条线路:

                        query q_t
                           │
             ┌─────────────┴─────────────┐
             │                           │
             ▼                           ▼
     Sliding Window                Compressed History
      recent raw KV                 old compressed KV
        128 tokens                 CSA / HCA
             │                           │
             └─────────────┬─────────────┘
                           ▼
                       Attention

也就是首先有一路是用的compressed KV,而窗口内部则是完整的raw KV,最后在把这两个按照sequence的顺序塞到attention block里去计算

所以最后真正的输入就是:

  • CSA:top-k sparse CSA kv + 128 raw kv
  • HCA:heavily compressed dense kv + 128 kv

因此,这几部分的kv cache是要分开来维护的

窗口内的 raw kv和注意力kv的cache的差别有很多,包括粒度大小、命中语义、恢复方式等等,但是最显著的差异应该还是生命周期

注意力的kv cache是拥有和这条message一样的生命周期的(这里不考虑eviction之类的),而SWA对应的raw kv cache则是拥有更短的生命周期,在decode推进的时候会逐渐过时

所以其实对于一个serving来说,只有compressed kv才比价有reuse的价值;而当request命中之后,也需要再做一段的“状态“恢复

2. mHC

mhc

引入HC

传统的残差连接的形式大概是Xi+1=Xi+F(Xi)X_{i+1} = X_i + F(X_i),由于每次的残差都有一个identity mapping也就是恒等映射,所以它随着模型层数的加深,是拥有一个很好的稳定性的;但是与稳定性相伴的,就是他的性能潜力是相对有限的,数据在一条路上跑,可能会被困在一个局部的极值点

那如果把这一条路扩展成多条路呢?因此出现了Hyper-Connection超连接

Naive HC, Hyper-Connections(超连接) 可以先把它理解成:把普通 Transformer 的单条 residual stream 扩展成多条 persistent residual streams(持续存在的残差流),然后允许每一层自由决定“从哪几条流读、往哪几条流写、各条流之间怎么混”

普通 residual 的形式是xl+1=xl+Fl(xl)x_{l+1}=x_l+F_l(x_l),只有一条 residual stream

Naive HC 把它扩展成 Xl∈Rnhc×dX_l\in\mathbb R^{n_{\mathrm{hc}}\times d}

例如 nhc=4n_{\mathrm{hc}}=4的情况

Xl=[xl(1)xl(2)xl(3)xl(4)]X_l= \begin{bmatrix} x_l^{(1)}\\ x_l^{(2)}\\ x_l^{(3)}\\ x_l^{(4)} \end{bmatrix}

它的基本形式可以写成:

Xl+1=BlXl+ClFl(AlXl){ X_{l+1} = B_lX_l + C_lF_l(A_lX_l) }

这里可以分成三个部分,

Al∈R1×nhcA_l\in\mathbb R^{1\times n_{\mathrm{hc}}}负责 4→1 read mixing(读取混合):zl=AlXlz_l=A_lX_l

把多条 residual stream 混成一个普通 dd-维 hidden state,送进 Transformer block:yl=Fl(zl)y_l=F_l(z_l)


然后 Cl∈Rnhc×1C_l\in\mathbb R^{n_{\mathrm{hc}}\times1}负责 1→4 write mixing(写回混合)ClylC_ly_l

把 block 的输出重新分配给多条 residual streams


与此同时Bl∈Rnhc×nhcB_l\in\mathbb R^{n_{\mathrm{hc}}\times n_{\mathrm{hc}}}负责 4→4 residual mixing(残差流之间的直接混合)BlXlB_lX_l

因此完整 dataflow 大概和原来比起来是长成这样:

![ChatGPT Image Sep 4, 2026, 09_15_28 PM](ChatGPT Image Sep 4, 2026, 09_15_28 PM.png)

Naive HC 的关键,或者说一个可能的不安全的点就在于,这些 mapping 基本是 unconstrained(无约束)的可学习映射

尤其是BlB_l可以是任意一个 learned 4×44\times4 matrix,比如:

Bl=[1.80.7000.51.60.2000.31.50.60.200.41.7]B_l= \begin{bmatrix} 1.8&0.7&0&0\\ 0.5&1.6&0.2&0\\ 0&0.3&1.5&0.6\\ 0.2&0&0.4&1.7 \end{bmatrix}

那么 residual path 跨很多层以后就会形成一层一层的堆叠XL=BL−1BL−2⋯B0X0+⋯X_L = B_{L-1}B_{L-2}\cdots B_0X_0 +\cdots

这就是和普通 residual 不一样的地方,因为普通 residual 的 direct path I⋅xlI\cdot x_l,也就是 identity mapping(恒等映射),无论经历多少层的残差连接都不会有任何的scale的变化,非常稳定

而 naive HC 的 direct path 变成BlXlB_lX_l之后则是每一层都在重新 mixing。

所以如果某些 BlB_l 的 spectral norm(谱范数)大于 1,连续相乘后可能:

∥BL−1⋯B0∥≫1\left\| B_{L-1}\cdots B_0 \right\| \gg1

造成 signal explosion

反过来,如果不断压缩某些方向,也可能:

∥BL−1⋯B0v∥→0\left\| B_{L-1}\cdots B_0v \right\| \rightarrow0

向量一直被压缩,信息会逐渐消失

这就是 naive HC 最大的问题:它获得了更强的 routing capacity(路由能力),但牺牲了普通 residual 那种天然稳定的 identity highway

mHC和HC的区别

而 **mHC, Manifold-Constrained Hyper-Connections(流形约束超连接)**并没有推翻这个 HC 形式,它仍然是:

Xl+1=BlXl+ClFl(AlXl)X_{l+1} = B_lX_l + C_lF_l(A_lX_l)

区别只是它多了一个m,把 BlB_l 限制到一个稳定的 manifold(流形)上,例如要求它是 doubly stochastic matrix(双随机矩阵):

Bij≥0,∑jBij=1,∑iBij=1B_{ij}\ge0,\sum_j B_{ij}=1,\sum_i B_{ij}=1

“流形“就是某个维度的空间里的一个曲面。他在局部可能看起来像普通的欧几里得空间,但是整体可能拥有更为复杂的几何结构