03|双轨主干与 MTP:跨帧状态、帧内预测与训练目标
Qwen3-TTS-12Hz 把两种依赖分开处理:大主干沿音频时间推进,先预测当前帧首层码本;较小的 code predictor 读取主干状态与首层编号,生成其余码本。帧内生成结束后,整帧嵌入再汇总成为后续时间步的输入。
报告 §3.1从双轨架构描述文本与音频通道;官方实现的 12Hz 推理路径可直接追踪 past_hidden → code_predictor.generate → codec_hiddens.sum → 下一步输入。报告抽象与具体张量融合方式要分层阅读。
MTP 在这里承担帧内多码本生成,不应仅凭名字理解成“所有层一次独立并行预测”。

图 1|跨帧 Talker 与帧内 code predictor 的状态交接
1. 一帧内的完整执行顺序
| 顺序 | 模块 | 读取 | 输出 |
|---|---|---|---|
| 1 | 时间主干 | 文字条件、之前帧的汇总表示、时间历史 | 隐藏状态与首层分布 |
| 2 | 首层采样 | 首层 logits | 当前帧第 0 层编号 |
| 3 | 局部预测器 | 主干隐藏状态+首层嵌入 | 后续各层编号 |
| 4 | 码本嵌入汇总 | 当前帧全部编号 | 下一时间步音频输入表示 |
| 5 | codec 解码 | 完整帧或若干完整帧 | 波形包 |
主干隐藏状态并不是音频 token;它是连续向量。把它与首层编号一起作为局部预测的起点,使后续层能同时知道较长语音上下文和当前粗编码。
2. 两条自回归轴对应两个状态范围
符号、形状与约定
| 符号 | 解释与例值 |
|---|---|
| 文本及其他生成条件的统称。 | |
| 全部语音码本编号,形状 [T,K]。 | |
| 音频帧索引和总帧数。 | |
| 码本层索引和总层数,12Hz 路线 K=16。 | |
| 当前帧之前的全部音频历史。 | |
| 当前帧对应的时间主干隐藏状态。 | |
| 当前帧已经生成的较前码本层编号。 | |
| 条件概率连乘;式子展示依赖分解,不是对源码每个特殊 token 的逐项展开。 |
用 2 帧、3 层教学例展开:先产生 a10,再局部产生 a11,a12;汇总第一帧,主干继续产生 a20,再产生 a21,a22。时间主干只推进两帧;局部仍有层内顺序。它降低大主干调用次数,没有消除所有串行依赖。
3. 文本与音频嵌入的融合实现
报告从通道组织解释双轨表示;本次读取的公开 12Hz 推理代码中,将各码本嵌入沿码本轴求和,再加上当前对应的文字隐藏向量,文字用完后加 tts_pad_embed。因此不宜把抽象“通道融合”机械画成某个固定 cat 调用。
| 张量 | 示意形状 | 操作 |
|---|---|---|
| 当前帧各层嵌入 | [B,K,D] | 沿 K 求和 |
| 音频汇总 | [B,1,D] | 保留时间轴长度 1 |
| 当前文字/文字 padding | [B,1,D] | 同形状逐元素相加 |
| 主干下一步输入 | [B,1,D] | 与历史 KV cache 一起计算 |
例如两层音频嵌入 (1,0)、(0,2),文字向量 (0.5,0.5),汇总为 (1.5,2.5)。如果沿隐藏维求和变成两个标量,就破坏了整个主干接口。
4. 源码阅读地图
按以下职责查找函数,而不是直接从数千行模型文件第一行读到最后:
| 入口/变量 | 阅读目标 |
|---|---|
forward_finetune | 真值 codec 序列如何构造帧内监督输入 |
past_hidden | 上一步返回的主干隐藏状态如何进入局部预测 |
code_predictor.generate | 残差层数、采样设置、局部生成范围 |
codec_hiddens.sum | 整帧嵌入如何形成下一步输入 |
past_key_values | 时间主干状态如何持续,而非每帧重算全文 |
训练可利用真实前序码本构造监督,推理则读取已生成编号。这种 teacher forcing 差别同时存在于时间轴和帧内轴,不能只检查首层交叉熵而忽略残差层预测。
调试时分别记录帧索引、码本层索引和局部生成计数,避免把三者当成一个 position。
5. 典型失败与边界
| 失败 | 可能机制 | 检查 |
|---|---|---|
| 第一帧正常,后面失真 | 全帧汇总或历史反馈错误 | 对照每步嵌入形状 |
| 固定音色细节异常 | 码本层顺序错位 | 编号送入配套 codec 重建 |
| 换句后延续上一声音 | 时间状态未清空 | 两请求独立运行对照 |
| 局部生成越长越慢 | 将局部状态错误跨帧累积 | 检查局部状态生命周期 |
分层生成的效率收益需要计入局部预测器;只统计主干时间会低估总成本。
继续 缓存与流式验证。
正在连接 GitHub 评论…