第一章 大模型业务与模型位置
从下一个 token 的预测开始
语言模型把联合概率分解为:
$$ p(a_0,\ldots,a_{L-1})=\prod_{t=0}^{L-1}p(a_t\mid a_0,\ldots,a_{t-1}). $$
训练时常把输入设为 $[a_0,\ldots,a_{L-2}]$,监督目标设为 $[a_1,\ldots,a_{L-1}]$。因此位置 $t$ 的隐藏表示可以读取输入 $a_t$,但不能读取输入 $a_{t+1}$。这解释了为什么 causal convolution 通常包含当前位置:当前输入 token 是预测下一个 token 的已知条件。
如果任务要求在位置 $t$ 直接预测 $a_t$,又将 $a_t$ 放进输入,就需要右移输入或设计严格因果掩码。是否泄漏取决于输入与标签的对齐,不能仅从算子名字判断。
在完整训练序列中,全部输入 token 已经可用,各位置的卷积窗口可以并行计算。因果性约束的是依赖关系,不强制 kernel 按 token 串行执行。推理生成时,新 token 尚未产生,才需要逐步更新状态。
短卷积在模型中解决什么问题
对同一通道,$K=4$ 的卷积读取最近四个位置。它能学习局部平滑、差分、邻近组合等模式;权重沿时间共享,参数数量不随序列增长。实际模型中的通道是经过投影的语义特征,因此这种操作是对特征轨迹进行局部加工。
单层短卷积不能直接读取任意远处的 token。无 dilation、stride=1 时,叠加 $n$ 层宽度 $K$ 的卷积,感受野为 $1+n(K-1)$。若层间还包含 SSM 或注意力,整个网络的感受野要按完整计算图分析,不能仅用这个公式。
局部卷积的权重是训练后固定的参数;注意力的 token 间权重由当前输入动态计算。两者都能混合位置,但信息选择机制不同。
Mamba 中的具体计算链
Mamba 将短 causal depthwise convolution 放在选择性状态空间计算之前。为避免与卷积预激活 $z$ 混淆,用 $v$ 表示模型门控分支。简化计算链是:
$$ [u,v]=\operatorname{Linear}{in}(h),\qquad q=\operatorname{SiLU}(\operatorname{DWConv}{causal}(u)), $$
$$ r=\operatorname{SelectiveSSM}(q),\qquad h_{out}=\operatorname{Linear}_{out}(r\odot\operatorname{SiLU}(v)). $$
短卷积负责局部时间混合;SSM 状态负责跨更长时间传播信息;输入输出投影负责跨通道混合。以上是核心 mixer,完整网络还需考虑归一化和残差。对应实现可从 Mamba.forward 与 Mamba.step 阅读。Mamba v2.2.2 源码
为什么 SSM 不等于这个短卷积
考虑简化离散状态方程:
$$ s_t=\bar A_t s_{t-1}+\bar B_t q_t,\qquad r_t=C_t s_t+Dq_t. $$
若 $\bar A,\bar B,C$ 都与时间和输入无关,零初始状态下可以展开为:
$$ r_t=\sum_{j=0}^{t}C\bar A^j\bar Bq_{t-j}+Dq_t. $$
这时递推等价于一个可能很长的固定卷积。Mamba 的选择性机制让部分参数依赖输入,展开后的系数也依赖具体序列,不能直接当成固定短核 Conv1d。论文中的“选择性 SSM 不能直接沿用固定卷积算法”,与模型内部仍有一个短卷积并不矛盾。Mamba 论文
Mamba 2 中卷积通道的含义
Mamba 2 的实现会将 $x,B_{ssm},C_{ssm}$ 对应的投影特征拼接为 xBC,经过 depthwise convolution 和 SiLU,再拆分给状态空间计算。其卷积通道数为 d_ssm + 2 * ngroups * d_state;模型中的 ngroups 是 SSM 分组,不能直接等同于 Conv1d 的 groups。卷积本身仍设置 groups=conv_dim。Mamba 2 v2.2.2 源码
因此评估算子负载时,应从实际调用取 $C$,不能总假定 $C=d_{model}$。Mamba 2 的 SSD 理论解释的是状态空间主干的组织方式,短卷积仍是其中独立的局部处理步骤。Mamba 2 论文
三种业务阶段对应三种执行重点
| 场景 | 数据已经具备什么 | 卷积的主要工作 |
|---|---|---|
| 训练 | 一整段输入及监督信号 | 完整前向,随后计算输入和参数梯度 |
| Prefill | 请求的完整提示词或一个提示词分块 | 并行处理多 token,并保存后续所需状态 |
| Decode | 新产生的一个或少量 token | 读取历史窗口,计算新输出,原地更新缓存 |
完整序列前向约有 $BCLK$ 次乘加,单 token update 约有 $BCK$ 次乘加。短卷积的最小历史状态为 $BC(K-1)$ 个输入元素,与已处理 token 总数无关;实际实现可能存 $K$ 个或更多元素。
这个状态只属于卷积。Mamba 还需保存 SSM 状态;混合注意力模型还可能有 KV Cache。不能将“短卷积缓存不随上下文增长”扩大为“任何使用短卷积的模型都没有 KV Cache”。
对算子开发意味着什么
训练通常有较大的 $L$,适合大块搬运、局部复用和批量归约。Decode 的 $L$ 常很小,启动成本、有效并行任务数以及状态访问的连续性更加重要。相同公式不意味着这两个阶段应使用同一个分块策略。
参数梯度也只在训练中出现。推理的 update 更新的是运行时状态,不是通过梯度更新卷积权重。区分“state update”和“optimizer update”,能避免把两套接口混在一起。
下一章:前向数学与传统卷积对比。