微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 把语音大模型的耳朵剪掉四层,它还能听懂人话吗?

把语音大模型的耳朵剪掉四层,它还能听懂人话吗?

2026-10-14 19:42
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-10-14 19:42 • 科技行者

你有没有想过,语音识别系统里那个负责"听"的部分,到底有多重要?

现在的语音大模型,比如你手机里的语音助手,背后往往是这样一套架构:先有一个音频编码器把声音信号变成机器能理解的特征,再有一个桥接层把这些特征翻译成语言模型认识的"词向量",最后语言模型负责把它们组织成一句通顺的话。这套流程里,音频编码器要处理每一帧声音,一刻都不能偷懒,所以它往往也是最耗计算资源的部分。

这就带来一个很实际的问题。如果你想让语音助手在车机、手机这些算力有限的设备上跑得更快,第一个想动刀的地方就是音频编码器。但直接砍掉几层网络,会发生什么?

XPeng(小鹏)的研究团队做了这件事,他们拿阿里的Qwen3-ASR-0.6B模型开刀,把18层的音频编码器一步步砍到14层,试图找到既能省资源又不太伤性能的甜蜜点。这篇论文就是记录这个"手术过程"的报告,论文名字叫X-AuT。

**如果直接砍掉几层会怎样**

先说说不这么做会有多惨。

论文里提到一个很关键的现象:直接删除音频编码器的几个完整模块,会让模型的输出出现"过早结束"的问题,也就是说,模型本该说一大段话,结果说了没几个字就以为讲完了,直接停下来。这在语音识别里是致命的,因为漏掉的内容直接变成了删除错误,拉低整体准确率。

为什么会这样?研究者的解释是,音频编码器输出的特征,相当于语言模型理解声音的"证据"。你砍掉几层网络,这些证据的分布就变了,原本训练时学到的"证据强度"和"该不该结束"之间的对应关系被打乱了,语言模型误以为证据不够了,该收尾了。

引用块:EOS(End of Sequence)*:指模型在生成文本时判断"这句话说完了"而输出的结束标记,如果模型在音频信息还没说完时就提前触发EOS,就会漏掉后面该识别出的内容。

这里我想打个比方。你把一个精通读唇语的翻译员突然换成了一个视力模糊的翻译员,他看着说话人的嘴型,信息量骤减,很容易在对方还没说完的时候,就凭着模糊的印象猜"应该说完了",草草结束翻译。如果不做任何补救,这个翻译员会漏掉大量后半句的内容——这正是论文里观察到的"删除错误"和"过早结束"现象的来源。如果什么都不做,直接砍层,这种误判会大量发生。

那怎么办?论文给出的答案不是简单的"砍完就完事",而是一整套"手术后的康复训练"。

**用行为测试挑选要砍哪几层,而不是拍脑袋决定**

这里有个特别值得说的设计。

通常做模型剪枝,很多方法会给每一层打一个"重要性分数",分数低的就先砍。但X-AuT的团队发现,这个思路有个致命漏洞:单独看某一层似乎不重要,但一旦真的把它砍了,旁边的层因为要承接一个被"扭曲"过的信号,反而变得举足轻重。

论文里做了一个特别有说服力的实验。他们测试了单独砍某一层的效果,发现第8层和第6层是最好砍的两层,单独砍掉误差最小。听起来很合理,那把这两个"最容易砍"的层放在一起砍,应该效果更好吧?

结果恰恰相反。同时砍掉第6层和第8层,整体误差是7.78%,反而比砍掉第5层和第6层这个组合的6.93%更差,差了将近1个百分点。

引用块:TER(Text Error Rate,文本错误率)*:衡量语音识别输出和标准答案之间差异的指标,数值越低说明识别越准。

这说明层与层之间的关系不是简单的加法。研究者管这个现象叫"非加性交互"。

这里适合打一个类比。假设你在管理一个团队,你想裁掉两个"看起来最不重要"的人来省成本。单独考核时,这两个人的KPI确实是团队里最低的两个。但如果你真把他们俩一起裁了,你会发现团队协作出了大问题,因为其中一个人虽然产出不高,却是唯一一个能和另一个关键部门沟通顺畅的桥梁。如果换成裁掉另外两个"KPI稍高一点但配合更好"的人,团队反而运转得更顺。这就是为什么X-AuT坚持要用"组合测试"而不是"单独打分"来决定裁员名单:单独的分数骗不了整体的协作关系。

所以X-AuT设计了一套"行为探针"机制:每次要砍层之前,先拿几个固定的评测基准,快速跑一遍各种候选层组合的表现,谁的短期恢复效果最好就选谁。这比单纯打分贵,但更靠得住。

**三阶段康复训练:先对齐,再模拟真实场景,最后精调**

砍完层,怎么让模型重新"学会说话"?

这是整篇论文最核心的技术部分。X-AuT设计了三个阶段的恢复流程。

第一阶段叫representation alignment(表征对齐)。

引用块:表征对齐*:让被砍瘦的学生模型的中间层输出,尽量模仿一个没被砍过的、更强的老师模型的对应输出,目的是让学生模型的"思维过程"尽量向老师靠拢。

这里用到了一个"老师模型",是参数量更大的Qwen3-ASR-1.7B,它的音频编码器有24层,隐藏层维度是2048,而学生模型的维度只有1024。维度不一样怎么对齐?论文里用了一个两层的小型神经网络,把老师的2048维特征压缩成256维的瓶颈,再投影到学生的1024维空间。这一步只占整个训练过程的5%,但作用类似给刚做完手术的病人先做基础检查和局部理疗,把最扭曲的部分先捋顺。

第二阶段是主力训练阶段,占了95%的训练时间。这里除了继续让学生模仿老师的输出分布,还引入了一个很巧妙的机制:让模型不仅在"标准答案"的引导下练习(教师强制),还要在自己生成的、可能有错误的文本基础上继续练习(学生策略)。

引用块:教师强制(Teacher-forced)*:训练时给模型看正确答案作为上文提示,让它预测下一个词,这样效率高但和真实推理场景有差距。

学生策略(Student-policy)*:让模型根据自己已经生成的内容(可能包含错误)继续生成,更贴近真实使用场景,但训练起来更不稳定。

为什么要费劲加入学生策略这一步?因为模型部署之后,实际推理时是没有"标准答案"喂给它的,它只能看着自己前面生成的内容继续往下说。如果训练时永远只在标准答案的温室里长大,一旦推理时自己说错了一个字,后面就可能跟着全错,这叫"错误累积"。

这个设定让我想到练车。教练车永远配一个副驾驶刹车,你开错了教练随时能纠正,练得很顺。但真正上路开车没人帮你踩刹车,你需要在自己犯错之后依然能把车开回正确的车道上。如果只在教练车里练,从没体验过自己犯错后怎么补救,一旦真正独立上路,第一次打方向盘打晚了,可能就直接压线甚至出事。X-AuT里的学生策略训练,就是让模型提前适应"自己说错了怎么往回拉"这件事,而不是等部署以后才第一次面对错误。

不过论文也很诚实地说明了这一步的风险:如果学生生成的内容完全跑偏,变成重复的乱码或者提前结束,硬拿这种"垂死文本"去和老师对比,学习不到有效信号,反而是噪音。所以他们设了保护机制,生成的内容至少要有3个新词,最多256个词,如果一个批次里超过一半的样本被判定为"生成失败",这个批次就退回老老实实的教师强制模式。

第三阶段是LoRA精调,用干净的标准答案做一轮低学习率微调,主要目的是针对目标使用场景(比如车机语音这种特定场景)做适配,这一步不再需要老师模型参与。

引用块:LoRA(Low-Rank Adaptation,低秩适应)*:一种轻量级模型微调技术,不用调整整个模型的全部参数,只在关键的注意力层插入小型的可训练模块,大幅降低训练成本同时保留原模型的大部分知识。

三个阶段走完,从18层砍到16层的模型,宏观平均错误率从5.61%降到了5.27%,居然比没砍过的原始模型还准了。继续砍到14层,错误率变成5.75%,比原始模型略差一点,但音频塔的参数量减少了20.7%。

**大老师和小老师,差的不是一点点**

论文里还做了一个很有意思的对照实验,专门验证"老师模型"到底有多重要。

一种做法是用没被砍过的0.6B模型自己当老师,教被砍过的0.6B学生,这叫自蒸馏。另一种是用参数更大的1.7B模型当老师。除了老师不同,其他训练配方、数据、超参数全部保持一致。

结果差距大到有点吓人。用小老师自蒸馏,平均错误率是8.45%,比原始模型足足差了50.6%的相对误差。而用大老师做跨尺度蒸馏,平均错误率只有5.55%,比原始模型还略好一点,相对误差降了1.1%。

引用块:跨尺度蒸馏(Cross-scale distillation)*:用一个规模更大、能力更强的老师模型来指导规模更小的学生模型学习,"跨尺度"指师生模型架构和参数规模不同。

这个差距在具体基准上更直观。用小老师训练的模型在Tedlium这个英文测试集上错误率是11.28%,而用大老师训练的只有3.92%,差了将近三倍。

这就好比找家教补课。如果找一个跟你水平差不多、甚至没比你强多少的同学来给你补课,他自己都还在犯的错误,压根没法帮你纠正,顶多能陪你重复练习已经会的东西。但如果找一个真正学识渊博、见过大量题型的老师,他能一眼看出你哪里理解错了,指出你自己都没意识到的知识盲区。这解释了为什么论文特别强调,光有蒸馏这个框架不够,老师本身的实力才是拉开差距的关键变量。

**渐进式砍层,比一步到位更稳**

还有一个对照实验值得说。研究者比较了两种砍层策略:一种是渐进式,先砍18层到16层,恢复训练,再砍16层到14层,再恢复训练;另一种是直接从18层一步砍到14层,用同样的总训练预算恢复。

结果渐进式方案的错误率是5.75%,而直接一步砍到位的方案错误率是6.73%,渐进式在全部十个测试基准上都表现更好。

这背后的道理其实挺直觉的。你可以把这理解成减肥速度的问题。一个人如果想健康地减重20斤,通常建议循序渐进,先减10斤,让身体适应新的代谢水平,再继续减下一个10斤。如果一上来就用极端节食法一次性砍掉20斤的目标热量摄入,身体来不及适应,很容易出现代谢紊乱,甚至反弹得更严重。模型的"康复能力"也是有限的,一次性剪掉太多层,留给恢复训练的"缓冲空间"就不够了,恢复效果自然打折扣。

**从头到尾没有丢掉冻结的解码器**

有一个细节容易被忽略,但其实很重要。整个训练过程中,语言模型的核心解码器权重是完全冻结不动的,只有挂载在注意力层上的LoRA小模块,还有和词表绑定的输出层(tied output embedding)是可以训练的,而且这个输出层还只在前两个阶段可训练,到第三阶段精调时也被冻住了。

引用块:Frozen backbone(冻结骨干)*:训练过程中保持模型主体参数不变,只更新少量额外挂载的模块,这样能大幅降低训练成本,也能防止语言模型原本积累的大量语言知识被训练过程中的噪音破坏掉。

为什么要这么保守?因为语言模型的解码器部分,是在海量文本上预训练出来的语言理解能力,这部分知识和"怎么听懂声音"其实是两件不完全相关的事。如果把解码器也放开训练,很容易在小规模的语音数据上把它原本学好的语言能力带偏,这叫"灾难性遗忘"。

这就像你想给一位已经精通中文写作的作家,额外培训一门新的方言口语识别技能。你肯定不希望在教他听方言的过程中,把他原本写文章的功底也带坏了。所以聪明的办法是,只在他身上加装一个"方言翻译插件",核心的写作能力保持不动。这解释了为什么论文里反复强调"decoder backbone frozen",这不是偷懒,而是刻意的保护策略。

**效率提升是真的,但别指望端到端速度翻倍**

最后说说实际部署效果。研究者在车载芯片和英伟达H800上分别测了推理速度。

砍到14层之后,音频编码器本身的处理时间在车载芯片上减少了21.4%,在H800上减少了11.4%。但整体的端到端处理时间,只减少了4.7%和2.6%。

为什么差这么多?因为语言模型生成文字的过程是自回归的,也就是一个字一个字往外蹦,这个过程本身占用了大部分的总耗时,音频编码只是流程里相对较短的一环。砍音频编码器就像给一辆车换了一个更省油的引擎,但整趟旅程大部分时间其实花在了红绿灯和堵车上,引擎升级带来的省油效果,会被这些没法优化的部分稀释掉。

这个结果挺重要,因为它提醒我们,压缩模型的某一个部件,不代表整体系统的速度会成比例提升,尤其是在自回归生成占主导的架构里。

论文的作者们也很坦诚地承认,这些结果都是单次实验,没有做多次重复实验来验证结果的稳定性,也没有做统计显著性检验。他们明确写道,这些是"描述性观察",不是"统计学意义上的证据"。这种谨慎的态度,在一篇宣传自己方法的论文里其实挺少见的。

Q&A

Q1:X-AuT是什么?

A:X-AuT是XPeng团队提出的一套语音大模型音频编码器压缩方法,通过渐进式砍层加三阶段恢复训练,把Qwen3-ASR-0.6B的音频编码器从18层砍到14层,同时尽量保住识别准确率。

Q2:砍掉音频编码器的层数会不会让语音识别变差?

A:直接砍层确实会导致过早结束、漏字等问题,但X-AuT通过表征对齐、跨尺度蒸馏和LoRA精调三阶段恢复训练,让16层模型的错误率反而比原始18层模型更低,14层模型的错误率也只略高一点。

Q3:用更大的老师模型指导压缩效果差别有多大?

A:差别很大。用同规模模型自我蒸馏,平均错误率是8.45%,比原模型差了50.6%;用参数更大的1.7B模型当老师,平均错误率只有5.55%,比原模型还略好。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-