《把世界喂给模型》结尾,离散与连续之争停在一个均衡解上:理解用连续,生成用离散,必要时混合或解耦;外加一句伏笔——等连续这条路的短板补齐,格局也许还会再变一次。
这篇要拆的 FireRedAudio,就是「再变一次」阵营交上来的新样本。它来自小红书 FireRed 团队(技术报告 arXiv:2608.24168,2026 年 8 月;代码已开源):一个共享 9B 参数 LLM 的通用音频语言模型,ASR、音频理解、零样本 TTS、指令 TTS、语音编辑、一小时长录音的结构化整理,一个模型全包。它的立场相当彻底:音频不论进出,一律连续——输入侧不用音频 token,输出侧也不预测音频 token,生成靠流匹配 DiT 直接吐连续 latent。
那理解与生成的任务冲突怎么办?论文的回答就是本文的主线:连续不连续不是关键,关键是给理解和生成各配一条独立的连续输入通路。用论文自己的话说(照例带着「据我们所知」的免责),这是首个公开披露的、在单个可训练自回归 LLM 内为理解与生成分别提供连续输入表征的统一音频语言模型。
一颗脑袋,两副耳朵。下面从那个老矛盾讲起。
一、老矛盾:一份表征伺候不了两位主子
理解和生成都要「听」音频,但要的东西根本不同:
- 理解端要压。一小时的播客也得装进上下文窗口做推理,所以表征要紧凑、要把任务相关的线索组织好——帧率越低越省,抽象越高越好用;
- 生成端要全。合成的前提是能解码回波形,音色、韵律、音高、停顿这些细节一个都不能丢——保真越高越好。
这不是工程借口,而是有实证的结构性矛盾。论文引 F3-tokenizer 的观察:为波形重建优化的连续自编码器 latent 偏重声学细节,往往缺少高层理解所需的结构;反过来,为识别分析设计的自监督表征,又普遍没有直接解码回高保真波形的接口。想让一份表征两头讨好,就得两头折衷。
于是近年的统一音频模型都在「分工」上做文章,只是分工的位置各不相同。粗看一圈地图:LongCat-Next 输入输出全离散;UALM 和 Audex 连续进、离散出;Kimi-Audio 把连续 Whisper 特征和离散语义 token 的嵌入逐元素相加;Qwen3-Omni 和 Qwen3.5-Omni 走 Thinker–Talker 拆分——Thinker 吃连续表征管理解,Talker 吐离散语音 token 管生成。更有意思的是两份「分工有益」的直接证据:UniAudio 2.0 把音频拆成偏语义的推理 token 和保声学的重建 token,消融显示只用重建 token 会拖垮理解;DualSpeechLM 语义进、声学出,比进出同一种 token 的基线更平衡。给不同角色分派不同表征,是行业共识了。但这一族仍把量化 token 当生成目标:量化有信息损失,多码本、高帧率的编排又平添建模开销(这本账在语音 tokenizer 那篇算过)。
另一条线干脆绕开量化:LatentLM 提出 next-token diffusion,DiTAR、VibeVoice 证明自回归连续 latent 做语音合成走得通;Ming-Flash-Omni、Audio-Omni、UAT 各有取径。和 FireRedAudio 血缘最近的 Ming-UniAudio 让理解与生成共享同一条根植于 VAE latent 的表征通路——但它自己的消融给出了警示:早期联训时共享的语义模块不冻结,理解生成双双掉点。连续接口本身并不自动化解任务冲突。
所以真正的问题是:一个共享模型,怎么替理解和生成各自组织「合适的」连续输入?FireRedAudio 的答案朴素得近乎直白——各配一条通路,互不掺和。
二、全景:两副耳朵、一颗脑袋、一张嘴
主模型六个部件:Audio Encoder、Audio Adapter、RedAE Encoder、Patch Encoder、共享 LLM(Qwen3.5-9B 底座)、流匹配 DiT。推理时另加一个只管渲染的 RedAE Decoder。
音频段走哪扇门,不看内容,看它在当前任务里的角色:
- 要被转写、被分析的音频 → Audio Encoder + Adapter → 12.5 Hz 连续感知表征(速记耳朵);
- 作为生成条件的语音——零样本 TTS 的参考音、待编辑的源音 → RedAE Encoder → 25 Hz 连续 latent → Patch Encoder 每 4 帧合 1 → 6.25 Hz 的 RedAE-Patch(录音耳朵)。
两路表征不相加、不融合,各自插进序列里自己的位置,与文本指令一起交给 LLM。理解任务,LLM 直接逐 token 吐文本。生成任务则以 audio step 为节拍——1 步 = 4 帧 RedAE latent = 160 ms 音频:LLM 每走到一个 audio step,就用当前隐状态驱动 DiT 生成 4 帧连续 latent;新帧经 Patch Encoder 变回 1 个 patch 回填进上下文,供下一步继续。等语言模型头吐出结束符,RedAE Decoder 把攒下的整条 latent 序列一次性渲染成 24 kHz 波形。
顺手算两笔账:理解侧 12.5 Hz,一小时录音 = 3600 × 12.5 = 45k 个 LLM 位置,200k 上下文装得下;生成侧 LLM 每秒只打 6.25 个节拍,比 Moshi、MOSS 系离散方案常见的 12.5 Hz 还低一半——因为每一拍 DiT 一口气吐 160 ms 的连续内容,帧率的压力从 LLM 转移给了 DiT。
三、速记的耳朵:理解通路
理解通路的配方是站在 Whisper 肩膀上的:Audio Encoder 连同卷积前端和 Transformer 一起从 Whisper-large-v3 的编码器初始化,白捡多语言语音表征和现成的「声学–语言」对齐先验。
数据流:16 kHz 单声道波形 → 100 Hz log-Mel → 切成不超过 30 秒的不重叠窗口 → 窗口内卷积前端降到 50 Hz、Transformer 做局部编码 → 各窗口输出按原时序拼接 → Audio Adapter 再降到 12.5 Hz 并投影进 LLM 嵌入空间。
两处设计值得停一秒:
- 窗口化是长音频的成本阀门。注意力开销被锁死在 30 秒窗口内,窗口之间的长程交互甩给 LLM 去建模——反正它有 200k 上下文;
- 时间压缩和跨模态对齐都收进 Adapter。这层「接口」单独可训,于是可以先冻住两边、只教 Adapter 学会翻译,再放开 Encoder 深造——这是训练策略一节的伏笔。
四、录音的耳朵:RedAE 与 Patch Encoder
生成这边的地基是 RedAE(Red Audio Autoencoder):一个确定性连续音频自编码器——没有变分后验,没有 KL 正则,波形直接映射成连续 latent。
编码器是因果结构:24 kHz 波形按每 480 采样一块切成 50 Hz 帧序列,过两级 Qwen3 Transformer 模块——第一级做上下文编码,第二级把相邻两帧聚合、经输出投影得到 25 Hz、64 维的 RedAE latent。解码器反着来:线性投影加通道转时间重排,因果 Qwen3 Transformer,最后 iSTFT 头(Vocos 一路的做法)出 24 kHz 波形。预训练数据配比也说明了野心不止语音:50% 干净语音、25% 带噪语音、10% 音效、15% 音乐。
只按重建训练有个著名隐患(还是 F3-tokenizer 那条观察):latent 空间会被低层声学变化主导——自回归模型难学,误差还容易滚雪球。RedAE 的应对是在预训练目标里加一味语义蒸馏:请一位在理解任务(语音、通用音频、音乐)上练成的冻结教师 Audio Encoder 提供高层特征,用 MSE 把 RedAE latent 往上对齐。整个目标是 X-Codec 框架的混合 GAN 配方:
L_G = λ_rec·L_rec + λ_adv·L_adv + λ_fm·L_fm + λ_distill·L_distill
重建 对抗 判别器特征匹配 语义蒸馏(MSE 对齐冻结教师)
熟悉语音 tokenizer 那篇的读者会立刻认出来:这就是 X-Codec「把语义塞进码本」的连续版。妙处在部署形态——与 Ming-UniAudio 在重建 latent 之后外挂一个语义模块不同,RedAE 把老师内化进自编码器预训练,训完老师即弃,推理时零额外分支。
预训练完成后,主模型训练全程 RedAE Encoder 冻结(latent 空间不漂移,DiT 的靶子不动),Decoder 干脆不加载——只在推理渲染时出场。
最后一块拼图是 Patch Encoder。25 Hz 的原生 latent 逐帧直喂 LLM,序列太长、自回归成本太高;于是在 LLM 接口处放一个局部 Transformer,每 4 帧连续 latent 聚合成 1 个与 LLM 输入嵌入同维的 RedAE-Patch,LLM 侧音频帧率降到 6.25 Hz。分寸感在这里:降帧只发生在 LLM 接口处——波形重建和 DiT 生成仍在 25 Hz 原生 latent 空间进行,细节一点没少。
五、嘴:LM 打节拍,DiT 出声
所有任务都被装进同一个 ChatML 对话格式:系统提示词区分任务,文本指令、条件音频、目标文本或语音各占预定义的消息角色;序列化之后,文本走 LLM 词表嵌入,每个音频段按角色走自己那条通路。
共享 LLM 支持两种输出模式:
- 理解:老老实实逐 token 生成文本回答;
- 生成:语言模型头先吐一个 audio-start,接着一串 audio-step,最后 audio-end。注意,这三类 token 只管结构与节拍——声学内容一个比特都不经过它们,全部由 DiT 在连续空间里生成。
同一套接口装下不同条件:零样本 TTS 把参考语音(走录音耳朵)当音频前缀;指令 TTS 从纯文本出发;语音编辑给源语音加编辑指令,然后整段重新合成目标波形——不是在源 latent 上做局部修补。
DiT 的一步:显微镜下
训练时,每个 audio step 的 DiT 接三路条件:
- 声学条件:前两个 step 的 8 帧真 latent,拼上当前 step 的 4 帧加噪 latent,共 12 帧声学输入;
- LLM 条件:3 个隐状态——紧挨当前步 ground-truth patch 之前的那个,加上前两步的对应隐状态——按时间序各重复 4 次,与 12 帧逐位对齐。因为当前隐状态取自 LLM 消费当前 patch 之前,目标漏不进自己的条件;
- 流匹配时刻 t:单独走时间嵌入。
前两路按特征维拼接送进 DiT;12 个位置的输出里只有最后 4 个进损失,前 8 个纯当上下文。历史不足就补零。训练时还会随机丢掉 LLM 条件(为推理时的 classifier-free guidance 留后手),声学条件则永不丢。流匹配损失很朴素:
L_flow = (1/|P|) · Σ_{j∈P} MSE( V̂_j , V*_j )
# P:批内全部有效 audio step;V̂_j / V*_j:第 j 步预测 / 目标速度场
# 每步的 MSE 在 4 帧 × 64 维上取平均
推理循环用伪代码最清楚(有简化):
history = init_buffer() # 声学历史:零样本 TTS 用参考音最后 2 步初始化,其余任务全零
latents = []
llm.feed(system_prompt, instruction, text, cond_audio) # 条件音频按角色走两条通路
tok = llm.next_token() # 预期先出 <audio_start>
while tok != AUDIO_END: # 每个 <audio_step> 触发一次 DiT
hs = llm.recent_step_hiddens(3) # 当前 + 前两步的隐状态
frames = dit.integrate(noise, hs, history) # 流匹配积分 → 4 帧 25 Hz latent
history.push(frames) # 缓冲只留最近 2 步(8 帧)
latents += frames
llm.feed(patch_encoder(frames)) # 合成 1 个 patch 回填上下文
tok = llm.next_token()
wave = redae_decoder(latents) # 攒齐后一次性渲染 24 kHz 波形
一个容易错过的细节:语音编辑的源音频只通过 LLM 条件影响 DiT,不进声学历史缓冲——缓冲里只装模型自己刚说出口的音。这条设计后面会在编辑成绩里显灵。
六、一本账:两个损失怎么配平
联合目标一行写完:
L = λ_text·L_text + λ_flow·L_flow , λ_text = λ_flow = 1
各自在自己的有效位置上归一化。等权不是偷懒:混合语料里带连续声学目标的样本本来就被采样得少,等权是为了不再削弱这路信号。
L_text 里还有个讲究的加权。audio-step token 在长语音序列里数量庞大,但它们只管节拍、不管内容——真让它们按普通 token 计权,海量的「打拍子」会淹掉文字学习信号。于是给它们 0.01 的权重,而且分子分母一起加权(不是整体缩放):
L_text = ( Σ_{i∈T} ℓ_i + w_a·Σ_{i∈A} ℓ_i ) / ( |T| + w_a·|A| ) , w_a = 0.01
# T:普通文本与 audio-start/end 位置;A:audio-step 位置;ℓ_i 为逐位置交叉熵
# 分母跨数据并行 worker 聚合,得到全局加权 token 平均
这套联合目标更新 LLM、Audio Encoder、Audio Adapter、Patch Encoder、DiT 五件套;RedAE Encoder 始终冻结。
七、五段式课程表:先搭桥,再放开,最后拉长
部件的「资历」差太多:Audio Encoder、LLM、RedAE 是预训练过的老将,Audio Adapter、Patch Encoder、DiT 是随机初始化的新兵。一上来全放开,新兵的噪声梯度会先冲垮老将的表征。FireRedAudio 的解法是五段递进,总计约 2.7T 多模态 token(文中 token 均指「文本 token 或一个进入 LLM 的连续音频表征」):
- 适配器对齐(180B):全体冻结,只训 Adapter。用中英 80B + 多语种 100B 的 ASR 数据——转写监督密集且定义清晰,最适合教接口层「怎么把声音翻译给 LLM 听」。
- 音频编码器适应(390B):放开 Encoder 与 Adapter 同训,LLM 仍冻。新加 150B 音频理解 token,把「只会转写的耳朵」养成「通用感知的耳朵」——副语言、说话人、环境音、音乐都得听。
- 统一中训(990B):第一次全体上阵。Patch Encoder 和 DiT 不做单独预训练,直接在完整的连续 latent 生成回路里随大部队联训。混料:160B 中英 ASR、200B 多语 ASR、250B 理解、200B 纯文本、120B 零样本 TTS、60B 音文交错(前段音频当上下文、只预测后续文本,专门强化音频–语言对齐)。共享底座动作要轻:LLM 峰值学习率 3e-5,只有音频模块(2e-4)的几十分之一。
- 多任务后训(511B):指令跟随专场。首次引入 22B 指令 TTS 和 12B 语音编辑,并给这两类数据与多步推理的理解题加显式 CoT 监督——先想清楚「该用什么声音、该改哪里、证据在哪」,再张嘴或作答。
- 长上下文扩展(591B):序列长度 8k → 200k,理解音频上限从 5 分钟拉到 1 小时;保留全套后训混料防遗忘,再加 80B 长音频理解数据,学习率整体再降一档。
配套一个防「大户霸榜」的两级采样:先抽任务族、再抽族内数据集,都做幂律平滑——
p(任务族 i) ∝ W_i^0.5
p(数据集 j | 族 i) ∝ w_ij^0.7
指数越小拉得越平:任务级 0.5 平衡得更狠,数据集级 0.7 温和些,免得族内小数据集被彻底稀释掉特色。
长音频数据从哪来也交代了:把标注可靠的短片段拼接成长录音,片段内时间戳换算成整段时间戳,片段级说话人标签对齐成全局身份。时间戳换算直接监督「时间–内容对齐」,这正是下一节秒级定位能力的来源。
八、成绩单:六线作战
音频理解是最硬的一张牌,MMAU(万题规模的语音/环境音/音乐选择题)和 MMSU(5000 题、47 项细粒度英语语音任务)三个口径全部第一:
| 模型 | MMAU test-mini | MMAU test | MMSU |
|---|---|---|---|
| Gemini 3.1 Pro | 80.7* | 78.8* | 82.7* |
| Qwen3.5-Omni-Plus | 81.4* | 79.9* | 80.7* |
| FireRedAudio | 82.0 | 80.9 | 83.3 |
(* 为论文方自测;表中略去 Step-Audio-R1.1、Kimi-Audio 等更低分选手。)
ASR 同样能打:LibriSpeech test-clean 0.67、FLEURS 英语 2.53、FLEURS-102 个语种宏平均 14.94,都是已报告系统里的最低错误率;AISHELL-1 0.71、KeSpeech 4.82、Opencpop 唱歌 1.63 进前三,WenetSpeech Test_Meeting 第二。理解通路没有为生成让路——这正是解耦想要的效果。
零样本 TTS(Seed-TTS-Eval):
| 模型 | ZH CER ↓ | EN WER ↓ | 平均内容错误 ↓ | 平均 SIM ↑ |
|---|---|---|---|---|
| Seed-TTS(专门 TTS) | 1.12 | 2.25 | 1.69 | 0.78 |
| Qwen3-Omni-30B-A3B-Instruct | 1.07 | 1.39 | 1.23 | – |
| Ming-UniAudio-16B-A3B | 0.95 | 1.85 | 1.40 | 0.64 |
| FireRedAudio | 0.83 | 1.56 | 1.20 | 0.71 |
平均内容错误 1.20 全场最低;说话人相似度 0.71 是双语都报数的统一模型里最高,但仍低于最强专门 TTS——论文坦承这一差距,并点出原因:FireRedAudio 没有专门的说话人嵌入,克隆音色全靠参考音的 RedAE 表征硬扛。
指令 TTS(InstructTTSEval,6000 例,三级抽象:APS 结构化声学参数 → DSD 自由风格描述 → RP 只给角色场景;因原版判官 Gemini 2.5 Pro Preview 已下线,全部系统用 Gemini 2.5 Pro 重评):
| 模型 | ZH APS / DSD / RP | EN APS / DSD / RP |
|---|---|---|
| Qwen3-TTS-VD | 83.7 / 81.7 / 65.8 | 76.4 / 81.4 / 64.2 |
| FireRedAudio | 86.0 / 84.1 / 70.1 | 81.1 / 83.6 / 70.3 |
中英六项全胜,最大领先在英语 RP(+6.1 个点)——恰好是最抽象、要从场景自己推断该用什么嗓音的那道题。论文把这归功于后训阶段的显式 CoT:先推理说话风格,再驱动声学生成。
语音编辑(Ming-Freeform-Audio-Edit,不给编辑位置、不给对齐):对基准提出者 Ming-UniAudio-Edit,全部指标持平或反超,唯一例外是中文开放删除的 SIM 差 0.01。几个悬殊处:开放删除中文 WER 10.49 对 22.92;变速 WER 2.00|4.43 对 5.88|17.53;变调 WER 2.00|3.04 对 7.45|13.37。「整段重合成」的设计在 no-edit WER(未编辑区域的忠实度)上也占优——重说全文而不跑偏,靠的是源音频经 LLM 条件一路管到底。
长音频结构化是压轴戏。模型把最长一小时的录音整理成带时间区间的结构化条目,评测不设参考切分:音频判官(Qwen3.5-Omni-Plus)逐条检查「预测区间是否恰好装下该条目的说话内容」——strict@0 要求区间不含多余语音、首尾静音不超 0.3 秒;content@δ 把区间两端各放宽 δ 秒再查内容完整性:
| 判分口径 | FireRedAudio | Qwen3.5-Omni-Plus |
|---|---|---|
| strict@0 ↑ | 73.6 | 56.6 |
| content@0.5 ↑ | 96.1 | 92.6 |
| content@1.0 ↑ | 96.7 | 96.5 |
strict@0 领先 17 个点说明区间放得更准更紧;1 秒容差下从 5 分钟到 50 分钟的录音全部稳在 93% 以上——秒级时间戳精度站住了。这份能力直接来自第七节那套长音频数据构造:时间戳换算就是时间–内容对齐的监督信号。
九、结语:三个收束
- 解耦挪到了输入侧,输出彻底连续化。 此前「表征该分工」的共识多落在输出 token 类型上(UniAudio 2.0 的双 token、DualSpeechLM 的语义进声学出),FireRedAudio 把分工挪进输入通路,输出则全程连续——声学内容不过量化器,离散只剩文字和三枚节拍 token。《把世界喂给模型》那张地图上,「理解连续、生成离散」的均衡解旁边,现在立着一个六线任务全面打平或领先的「全连续 + 输入解耦」样本。
- 把老师内化,把接口做薄。 RedAE 的语义蒸馏是 X-Codec「语义塞进码本」的连续版:监督全部发生在自编码器预训练里,运行时零外挂模块;主训练全程冻结 Encoder,让 DiT 的靶子纹丝不动。一串「本可以加模块解决」的问题,被一个预训练损失顶掉了——Ming-UniAudio 的消融恰好从反面证明了这条路线的分寸。
- 账本诚实,配方全开。 说话人相似度不敌专门 TTS,论文直说是不用说话人嵌入的代价;自测数字全部标星;9B 规模、五段课程、约 2.7T token 的训练量、每阶段学习率摊开在表里,代码开源。中等规模也能六线作战,这份账值得后来者照着核。
参考
- FireRedAudio: A General-Purpose Audio Language Model with Decoupled Continuous Representations for Understanding and Generation(arXiv:2608.24168,本文主角)
- 官方代码仓库(FireRedTeam/FireRedAudio)
- 把世界喂给模型:深入浅出「离散 vs 连续」(本站前篇:本文所有立场之争的地图)
- 给声音造一张词表:深入浅出语音 tokenizer(本站前篇:X-Codec 语义蒸馏一招的离散原版)
- 边想边说:深入浅出 Thinker-Talker 架构(本站前篇:Qwen-Omni 系的另一种分工)
- 当造币厂也开始 scaling:深入浅出 MOSS-Audio-Tokenizer(本站前篇:12.5 Hz 离散路线的对照组)
- Flow Matching for Generative Modeling(arXiv:2210.02747,DiT 训练目标的出处)
- Scalable Diffusion Models with Transformers(DiT 架构出处)
- Robust Speech Recognition via Large-Scale Weak Supervision(Whisper,理解通路的初始化来源)
- Codec Does Matter: Exploring the Semantic Shortcoming of Codec for Audio Language Model(X-Codec,RedAE 训练框架的出处)
- Vocos: Closing the gap between time-domain and Fourier-based neural vocoders(RedAE Decoder iSTFT 头的出处)
- Seed-TTS: A Family of High-Quality Versatile Speech Generation Models(Seed-TTS-Eval 基准出处)
- InstructTTSEval: Benchmarking Complex Natural-Language Instruction Following in Text-to-Speech Systems(指令 TTS 基准出处)
- Ming-UniAudio: Speech LLM for Joint Understanding, Generation and Editing with Unified Representation(血缘最近的对照系统,也是编辑基准 Ming-Freeform-Audio-Edit 的出处)