Jason / Works Embodied AIZero to One
Works
没主意?快捷入口
Guide · Part 5: 感知模态扩展

Ch20: 听觉智能——Whisper / AudioLM / Proactive Hearing / NeuralAids / Acoustic Swarms


Ch20: 听觉智能——Whisper / AudioLM / Proactive Hearing / NeuralAids / Acoustic Swarms

前置章节:Ch19: 射频感知——RF-Pose / milliMap / PanoRadar / RF-SLAM / mmCLIP 后续章节:Ch21: 数据集全景——Open X-Embodiment / DROID / BridgeData V2 / LIBERO 返回目录


20.1 开篇:机器人的耳朵

20.1.1 闭上眼睛做饭

想象一个场景:你站在厨房里,闭着眼睛做一顿饭。

听起来不可能?其实你每天都在部分地这样做。你不需要盯着锅里的水才知道它开了——"咕嘟咕嘟"的声音会告诉你。你不需要用温度计测油温——油遇到食材发出"滋滋"的响声就说明锅热了。你不需要守在微波炉旁边——"叮"的一声就是取饭的信号。你甚至不需要转头看门口——钥匙插进锁孔的"咔嗒"声就告诉你有人回来了。

声音是你的"第二双眼睛"。而且在很多场景下,它比真正的眼睛更好用。

现在把这个场景搬到机器人身上。一个家用服务机器人正在厨房里帮你热汤。如果它只有摄像头,它需要:把摄像头对准锅、识别水面气泡的视觉特征、判断气泡密度是否达到沸腾标准。这个流程复杂、容易被遮挡(锅盖挡住了)、而且对光照很敏感。

但如果它有麦克风呢?水沸腾的声音特征非常独特——频率集中在 200-2000Hz 范围,有规律的爆裂声模式。不管锅盖盖没盖,不管厨房灯开没开,声音都能传过来。

这就是具身 AI 需要听觉的根本原因:声音携带了大量视觉无法获取的信息,而且它不受遮挡、不受光照、360 度无死角。

20.1.2 声音携带的四类信息

从信息论的角度,声音为机器人提供了四个维度的环境信息:

第一类:材质信息

当两个物体碰撞时,发出的声音直接编码了材质属性。金属碰金属是清脆的"叮",塑料碰塑料是沉闷的"砰",玻璃碎裂是高频的"哗啦"。这些声音特征比视觉判断材质更加可靠——一个精心涂装的塑料杯在视觉上可能和陶瓷杯难以区分,但敲一下声音完全不同。

对机器人来说,这意味着它可以通过轻轻敲击来判断一个物体的材质,就像医生叩诊一样。更实际的场景是:机器人抓取物体时不小心碰到桌面,碰撞声可以帮助它确认物体重量和材质,调整后续的抓取力度。

第二类:状态变化

很多物理过程都伴随着特征性的声音变化。水从安静到沸腾,发动机从正常到异响,门从锁住到打开。这些声音信号标志着世界状态的转换点(state transition)。

对机器人来说,监听状态变化声音相当于获得了一个"事件检测器"。它不需要持续观察某个物体,只需要在背景中监听特定频率模式的出现。这比轮询式的视觉检查高效得多。

第三类:语音指令

这是最显而易见的:人类通过语言给机器人下达命令。"帮我拿一杯水"、"把那个红色的盒子放到桌子上"——语音是人机交互最自然的接口。在 Ch12 中我们看到 VLA 模型如何将语言指令映射为动作,但那些系统假设语音已经被转成了文字。实际部署时,"语音到文字"这一步(ASR,自动语音识别)本身就是一个挑战。

第四类:方向与距离

人类的双耳系统能够判断声源方向(通过双耳时间差 ITD 和双耳强度差 ILD)和粗略距离(通过响度衰减和混响比例)。对机器人来说,一声急促的刹车声从左后方传来——即使摄像头没有对着那个方向,机器人也应该立即向右闪避。

这四类信息构成了听觉感知的完整版图。接下来我们会看到不同的技术方案如何分别处理这些信息。

20.1.3 为什么视觉和 RF 不够

上一章(Ch19)我们学了射频感知,它能穿墙、能在黑暗中工作。Ch8-Ch9 我们深入学了视觉感知,它提供丰富的语义信息。那为什么还需要听觉?

三种感知模态的互补关系可以这样理解:

视觉的局限在于遮挡视野。摄像头只能看到镜头正对着的方向,而且任何不透明物体都会阻挡视线。机器人背后发生的事情,视觉完全看不到。

射频的局限在于语义精度。RF-Pose 能检测到墙后有人,但分辨不出那个人在说什么、在做什么细微动作。毫米波雷达能测距测速,但不能告诉你"那个金属物体是扳手还是螺丝刀"。

声音的独特优势在于:它是全向的(360 度同时接收)、穿过遮挡的(声波绕射能力强)、携带丰富语义的(语音、环境音、材质信号)。当然声音也有弱点——它不能提供精确的空间几何信息,衰减较快,容易被噪声淹没。

理想的具身 AI 应该同时具备三种感知,让它们各司其职、互相补充。这就是多模态感知的核心思想,也是为什么本指南在视觉(Ch8-9)、RF(Ch19)之后,专门用一整章来讲听觉。

20.1.4 从 ImageBind 到深度听觉理解

在 Ch18 中,我们学了 ImageBind——它将音频和其他五种模态对齐到同一个嵌入空间。这意味着你可以用一段"海浪拍打岩石"的音频,去检索沙滩的图片或"ocean waves crashing"的文本描述。

但 ImageBind 的音频处理只是"对齐层面"的——它学会了音频和其他模态的对应关系,但并不深入理解音频的内部结构。它不能:

  • 把一段模糊的语音准确转写成文字(ASR)
  • 从一段混合了三个人说话的录音中分离出每个人的声音(source separation)
  • 听到半句话就预测后面会说什么(audio generation)
  • 在嘈杂环境中聚焦到特定方向的声源(beamforming)

本章要深入的就是这些"理解层面"的技术。

20.1.5 本章路线图

本章按照从基础到应用的顺序组织:

首先我们建立音频信号的基础知识(20.2),理解声波如何变成数字信号、如何表示为频谱图。然后我们学习如何把连续的音频信号离散化成 token(20.3),这是连接音频世界和 LLM 世界的桥梁——SoundStream 和 EnCodec 两大神经音频编解码器在这里登场。

有了基础之后,我们进入两个核心系统:Whisper(20.4)解决"听懂人在说什么"的问题,用 68 万小时弱标注数据训练出超强鲁棒性的语音识别模型;AudioLM(20.5)解决"AI 自己能说/唱"的问题,第一次实现了无需文本条件的长音频连贯生成。

Part 2 将继续讲声源分离(Proactive Hearing)、边缘设备上的听觉(NeuralAids)、以及多机器人协作听觉(Acoustic Swarms)。


20.2 音频信号基础

20.2.1 声波的物理本质

在进入任何算法之前,我们需要理解声音到底是什么。

声音是一种机械波——它是介质(通常是空气)中分子振动的传播。当你拍一下手,你的手掌挤压了周围的空气分子,这些被挤压的分子又推动更远处的分子,形成一个向外扩散的压力波。这个过程就像你在平静的水面上扔了一颗石子——涟漪向外扩散,但水分子本身并没有跟着石子的方向移动,只是在原地上下振动。

这里有一个和 Ch19 的重要联系:射频信号是电磁波,不需要介质,可以在真空中传播(所以卫星信号能穿过太空)。声音是机械波,必须有介质,所以在真空中听不到声音(太空中没有爆炸声,尽管电影里总是有)。

声波有三个关键物理参数:

频率(Frequency):每秒振动的次数,单位是赫兹(Hz)。频率决定了人耳感知到的音高(pitch)。261.6Hz 是钢琴中央 C 的频率,523.2Hz 是高八度的 C——频率翻倍,音高升高一个八度。人耳能听到的范围大约是 20Hz 到 20000Hz(20kHz),但随着年龄增长,高频听力会下降。

振幅(Amplitude):压力波的强度,决定了响度(loudness)。振幅越大,声音越响。通常用分贝(dB)表示,这是一个对数刻度——每增加 10dB,人耳感觉到的响度大约翻倍。正常对话大约 60dB,摇滚演唱会前排大约 110dB。

频谱(Spectrum):一个声音通常不是单一频率的纯音,而是多个频率的混合。不同频率成分的组合决定了音色(timbre)。这就是为什么钢琴和小提琴弹同一个音符听起来不同——它们的基频相同,但谐波(overtone)的分布不同。

20.2.2 数字音频:从连续到离散

空气中的声波是连续的模拟信号。要让计算机处理它,必须将其转换为数字形式。这个过程包含两步:

采样(Sampling):按固定时间间隔"拍快照"。每秒拍多少张快照就是采样率(sample rate)。根据奈奎斯特定理(Nyquist theorem),要完整保留最高 f Hz 的信号,采样率至少需要 2f Hz。

常见的采样率选择:

  • 8000 Hz(8kHz):电话语音。人声的核心频率在 300-3400Hz,8kHz 采样足以覆盖。音质差但带宽小。
  • 16000 Hz(16kHz):语音识别的标准采样率。大多数 ASR 系统(包括 Whisper)使用这个采样率。能覆盖到 8kHz 的频率范围,对语音理解足够。
  • 44100 Hz(44.1kHz):CD 音质。能覆盖到人耳极限的 22kHz,适合音乐。
  • 48000 Hz(48kHz):视频标准。专业音频、电影使用。

为什么 Whisper 选择 16kHz?因为语音识别不需要听到 8kHz 以上的频率——那些高频成分对理解"说了什么"几乎没有帮助,但会增加计算量。

量化(Quantization):每个采样点的振幅值需要用有限位数的数字表示。这就是位深(bit depth)。16-bit 意味着每个采样点有 65536 个可能的值(-32768 到 32767)。这对应大约 96dB 的动态范围,足以覆盖从安静呼吸到雷声的响度差异。

一段 16kHz、16-bit 的单声道音频,每秒产生 16000 x 2 = 32000 字节 = 32KB 的原始数据。一分钟就是约 1.9MB。这在现代计算资源下不算大,但如果要处理 68 万小时(Whisper 的训练集规模),原始数据量将达到约 78TB。

20.2.3 梅尔频谱图:像人耳一样"看"声音

原始的时域波形(amplitude vs. time)对机器学习来说不是最好的输入表示。一个更好的选择是频谱图(spectrogram)——它展示的是频率随时间的变化,就像乐谱展示不同音符在不同时刻的出现一样。

频谱图通过短时傅里叶变换(Short-Time Fourier Transform, STFT)计算:把音频切成很多重叠的短片段(通常 25ms 一帧,每帧之间重叠 10ms),对每帧做傅里叶变换,得到该时刻的频率分布。把所有帧的频率分布排列起来,就得到一张二维图——横轴是时间,纵轴是频率,颜色/亮度表示能量强度。

但线性频率刻度有一个问题:人耳对频率的感知不是线性的。从 100Hz 到 200Hz 的音高变化(一个八度),人耳觉得"跳了很远";而从 10000Hz 到 10100Hz 的变化,人耳几乎分辨不出区别。人耳对低频更敏感,对高频的分辨率更低。

梅尔刻度(Mel scale)就是为了模拟这种人耳特性设计的。它是一个非线性的频率映射:低频区域被"拉伸"(更高的分辨率),高频区域被"压缩"(更低的分辨率)。具体来说:

m = 2595 * log10(1 + f/700)

其中 f 是线性频率(Hz),m 是梅尔频率。

梅尔频谱图的计算过程:先做 STFT 得到线性频谱,然后用一组三角形滤波器(mel filterbank)将线性频率轴映射到梅尔刻度上。每个三角滤波器覆盖一个梅尔频段,输出该频段内的总能量。

20.2.4 80 通道 log-Mel:Whisper 的输入

Whisper 使用 80 通道的 log-Mel 频谱图作为输入。让我们逐一解释这些参数:

80 通道:意味着有 80 个梅尔滤波器,把 0-8000Hz 的频率范围划分为 80 个梅尔频段。每个时间帧输出一个 80 维的向量。通道越多,频率分辨率越高,但计算量也越大。80 是语音识别中经过大量实验验证的"甜蜜点"。

log:对梅尔频谱取对数(logarithm)。为什么?两个原因:(1) 人耳感知响度是对数的(分贝就是对数单位);(2) 对数压缩了动态范围,让模型不需要同时处理非常大和非常小的数值——这对神经网络的训练稳定性很重要。

时间分辨率:Whisper 用 25ms 的 STFT 窗口、10ms 的帧移(hop length),所以每秒产生 100 帧。Whisper 处理 30 秒的音频段,因此每个输入是一个 80 x 3000 的二维矩阵(80 个频率通道 x 3000 个时间帧)。

你可以把 80 通道 log-Mel 频谱图想象成一张"灰度照片":横轴是时间、纵轴是(梅尔尺度的)频率、像素亮度是能量。语音识别本质上就是"看懂这张图里写的什么字"——和 OCR(光学字符识别)有异曲同工之妙。

20.2.5 时域 vs 频域:两条技术路线

传统语音处理几乎全部工作在频域(频谱图上)。但 2019 年的 Conv-TasNet 证明了一件让领域内很多人惊讶的事:直接在时域波形上操作,效果可以超越频域方法。

Conv-TasNet 的成绩:在 WSJ0-2mix(两人混合语音分离)任务上达到 15.3 dB 的 SI-SNRi(Scale-Invariant Signal-to-Noise Ratio improvement),超过了当时所有基于频谱图的方法。它只有 5.1M 参数,非常轻量。

它的架构是三段式的:

  • Encoder:一个短窗口的 1D 卷积,把波形的每个短片段映射到一个高维表示。你可以把它理解为"学习一种比 STFT 更好的时频变换"。
  • Separator:时间卷积网络(Temporal Convolutional Network, TCN),在高维空间中把不同声源分离开。
  • Decoder:1D 转置卷积,把分离后的高维表示变回波形。

Conv-TasNet 的意义在于证明:STFT 不是唯一的选择,端到端学习可以自动发现比人工设计的频谱表示更好的表示。这个思想后来影响了音频编解码器(SoundStream、EnCodec)的设计——它们也是在时域上端到端操作的。

20.2.6 STFT 基础补充

虽然 Conv-TasNet 证明了时域方法的潜力,但频域方法仍然是主流。大多数音频系统(包括 Whisper)仍然使用 STFT 作为前端。这里简要补充 STFT 的关键参数:

窗口长度(window length):每次傅里叶变换处理多长的音频片段。窗口越长,频率分辨率越高,但时间分辨率越低——这是不可避免的时频不确定性原理。通常语音用 25ms(400 个采样点 @ 16kHz)。

帧移(hop length):相邻两帧之间的时间间隔。通常是窗口长度的 40%(10ms),这意味着相邻帧有 60% 的重叠,保证信息不丢失。

FFT 点数(N_FFT):傅里叶变换的点数,决定频率分辨率。通常取 2 的幂次(如 512、1024),不足的部分补零。N_FFT=512 在 16kHz 采样率下给出 512/2+1=257 个频率 bin。

这些参数的选择涉及时频分辨率的 trade-off,但对于语音识别任务,上述默认值(25ms 窗口、10ms 帧移、512-point FFT)已经被反复验证是有效的。理解这些参数的意义对后续理解 EnCodec 的"多尺度 STFT 判别器"(在多种窗口长度上同时判断)很有帮助。


20.3 音频的离散化:从连续波形到 token

20.3.1 为什么需要离散化

这一节是连接"音频世界"和"LLM 世界"的关键桥梁。

我们在前面的章节中反复看到一个模式:大语言模型(LLM)极其擅长处理离散 token 序列。GPT 预测下一个文本 token,取得了惊人的效果。DALL-E(早期版本)把图像变成离散 token,然后用类似 GPT 的方式生成图像。RT-2(Ch11)把机器人动作变成离散 token,让 LLM 直接输出机器人控制指令。

那么一个自然的问题是:能不能把音频也变成离散 token,然后用 LLM 的方式来处理?

答案是可以。但音频的离散化比文本难得多。文本天然就是离散的——英语有 26 个字母加标点,中文有几千个常用字,词汇表是有限的。但音频是连续的波形,理论上有无限种可能。

让我们用一个类比来理解这个挑战:

想象你需要把一段钢琴演奏"翻译"成文字描述。你可以写乐谱(C4 四分音符、E4 八分音符...)——这就是一种"离散表示"。但乐谱丢失了很多信息:演奏者的力度变化、踏板的微妙使用、琴弦的共鸣特征。一个钢琴大师和一个初学者弹同一段乐谱,声音天差地别,但乐谱是一样的。

所以我们需要一种离散表示,既能捕捉"弹的是什么音符"(高层语义),又能保留"怎么弹的"(低层细节)。这就是 SoundStream 和 AudioLM 要解决的问题。

20.3.2 朴素方案为什么不行

在看 SoundStream 之前,让我们先想想为什么一些直觉上可行的方案实际上不够好。

方案一:直接量化波形采样点。 每个 16-bit 采样点已经是一个离散值(65536 种可能)。如果把每个采样点当作一个 token,16kHz 的音频每秒就有 16000 个 token。即使用 GPT-4 级别的上下文窗口(128K token),也只能处理 8 秒的音频。而且每个采样点之间的相关性太强(相邻采样点通常非常接近),LLM 会花大量算力在学习这些冗余的短程依赖上。

方案二:用 VQ-VAE 风格的单层量化。 把音频切成短片段,每个片段用一个向量量化(VQ)码本中的码字来表示。问题是:如果码本太小(比如 1024 个码字),每个码字需要代表太多不同的声音,重建质量很差。如果码本太大(比如百万级),稀疏性问题让训练非常困难——大部分码字永远不会被使用。

这两个方案的失败揭示了音频离散化的核心矛盾:信息密度高但冗余度也高。我们需要一种方法,能够高效地用少量 token 表示音频,同时保留足够的保真度。

20.3.3 SoundStream:神经音频编解码器的突破

2021 年,Google 提出了 SoundStream,第一个在极低比特率下超越传统编解码器的神经音频编解码器。它的核心成绩:3kbps 的 SoundStream 音质优于 12kbps 的 Opus。也就是说,用四分之一的数据量,达到了更好的听感。

让我们理解为什么这很重要:

传统音频编解码器(如 MP3、Opus、AAC)基于心理声学模型——它们利用人耳听不到的频率成分来压缩,但压缩策略是人工设计的、固定的。SoundStream 的方法则是端到端学习:给定原始音频和比特率预算,让神经网络自己学出最优的压缩和解压策略。

SoundStream 的架构

整个系统是一个编码器-量化器-解码器的流水线:

编码器(Encoder):几层一维卷积(strided 1D convolution),把 24kHz 的原始波形逐步下采样,最终每 320 个原始采样点(约 13.3ms)生成一个向量。这个向量包含了这段时间内声音的"压缩表示"。

量化器(Quantizer):这里使用了残差向量量化(Residual Vector Quantization, RVQ)。这是 SoundStream 最关键的创新,下面专门解释。

解码器(Decoder):和编码器对称的上采样卷积网络,从量化后的表示重建波形。加上对抗训练(adversarial training)——一个判别器(discriminator)帮助解码器生成更真实的波形。

整个模型只有 8.4M 参数,可以在手机 CPU 上实时运行。这对边缘部署至关重要。

20.3.4 残差向量量化(RVQ):逐层精细化

RVQ 是理解现代音频 token 化的关键概念。让我用一个生活类比来解释:

想象你在画一幅肖像画。第一层你画轮廓——大致的脸型、五官位置。这一层捕捉了最重要的结构信息,但细节全部丢失了。第二层你在第一层的基础上添加阴影和明暗——捕捉了第一层遗漏的信息。第三层你加上皮肤纹理和毛发细节——进一步修补第二层的遗漏。每一层都在修补前面所有层加起来仍然遗漏的"残差"(residual)。

RVQ 的工作方式完全一样:

  1. 第一层量化:编码器输出的向量,在第一个码本(通常 1024 个码字)中找到最接近的码字。记录下这个码字的索引(10 bits),然后计算量化误差(残差)= 原始向量 - 选中的码字。

  2. 第二层量化:把残差向量在第二个码本中找最近的码字。记录索引,再算新的残差。

  3. 第三层、第四层...... 重复这个过程。每加一层,重建精度提高一点,但也多花 10 bits。

如果使用 N_q 个量化器,每个码本大小为 C,那么总比特率 = N_q x log2(C) bits/frame。SoundStream 默认用 N_q=12, C=1024,所以每帧 12x10=120 bits。帧率为 75fps,总比特率 = 120 x 75 = 9000 bps = 9kbps。通过减少量化器层数(比如只用 3 层),可以降到 3kbps 以下。

为什么 RVQ 比单层 VQ 好

单层 VQ 要达到同样的精度,需要一个巨大的码本(比如 2^120 约等于 10^36 个码字)——这在内存和搜索速度上都不可行。RVQ 用 12 个小码本(每个 1024 条目)达到等效精度,总存储量只有 12x1024 = 12288 个码字向量,完全可以放进内存。

这就像邮政编码系统:不是给全球每栋建筑一个唯一编号(需要几十亿个编号),而是分层——国家代码 + 省份代码 + 城市代码 + 街道代码 + 门牌号。每层只需要几十到几百个选项,组合起来就能精确定位任何地址。

20.3.5 Quantizer Dropout:训练时的巧妙技巧

SoundStream 训练时用了一个聪明的技巧叫 quantizer dropout。

问题是这样的:如果你想让一个模型在不同比特率下都能工作(比如网络好时用高比特率,网络差时用低比特率),最朴素的方法是训练多个模型。但这很浪费。

Quantizer dropout 的做法:训练时,随机丢弃后面几层量化器。比如本来有 12 层,这次训练只用前 6 层,下次用前 9 层,再下次用全部 12 层。这样模型学会了在任意层数下都能产出合理的重建——前面的层被迫承担更多信息量,不能"偷懒"把重要信息推给后面的层。

类比:考试时老师随机决定只改前 N 道题就给分。学生不知道 N 是多少,所以必须每道题都认真答——不能把重要的内容放在最后面。

这个技巧让单个 SoundStream 模型可以在 3kbps 到 18kbps 的范围内灵活切换比特率,而不需要训练多个模型。对于网络条件多变的实时通信场景(比如机器人在 WiFi 信号弱的区域),这非常实用。

20.3.6 3kbps 超越 Opus 12kbps 的含义

让我们用一个具体的数字来感受这个突破的意义。

Opus 是目前互联网上最常用的音频编码器之一(WebRTC、Discord、Zoom 等都在用)。它是传统信号处理方法的巅峰——集合了几十年的心理声学研究和信号处理技巧。

SoundStream 在 3kbps 下的主观音质(MOS 评分),超过了 Opus 在 12kbps 下的音质。这意味着用四分之一的带宽,神经网络编解码器就能达到更好的效果。

为什么神经网络能做到?因为传统编解码器只利用信号层面的冗余(时域相关性、频域稀疏性),而神经网络还利用了语义层面的冗余——它"知道"语音听起来应该是什么样的,所以能用更少的比特传输关键信息,然后在解码端"脑补"出细节。就像你给朋友发语音消息,信号很差只传过来一半内容,但朋友根据上下文能猜出你想说什么——这就是语义层面的冗余。

20.3.7 EnCodec:Meta 的改进版

SoundStream 发布一年后(2022),Meta 推出了 EnCodec,可以看作 SoundStream 的增强版,主要改进了三个方面:

因果卷积(Causal Convolution)

SoundStream 的编码器使用普通卷积——处理当前帧时会"偷看"未来的帧。这在离线处理(比如编码一首歌)时没问题,但在实时流式场景(比如视频通话)中,你不能等未来的音频到来才编码当前帧。

EnCodec 使用因果卷积:编码当前帧只用过去和当前的信息,不依赖未来。这使得它可以真正做到流式处理——音频一边进来一边编码,延迟极低。

类比:SoundStream 像翻译完整篇文章再交稿的笔译员,EnCodec 像逐句同步翻译的口译员。口译员不能等说话人讲完再开始翻译。

多尺度 STFT 判别器

编解码器的训练需要一个"裁判"来评判重建音质。EnCodec 使用多尺度 STFT 判别器——同时在多个时间窗口长度(比如 256、512、1024、2048 个采样点)下计算频谱,并对每个尺度下的频谱分别用判别器评估质量。

短窗口关注瞬态细节("嗒""嘭"这类短促声音的锐利度),长窗口关注稳态音质(持续元音的平滑度和低频的饱满度)。多个尺度一起约束,确保各方面音质都好。

这和 20.2.6 节中提到的时频不确定性原理直接相关:没有单一的 STFT 参数组合能同时在时间和频率维度上都达到最优分辨率,所以用多个尺度来互相补充。

比特率范围

EnCodec 支持 1.5kbps 到 24kbps 的宽范围比特率。低比特率(1.5-3kbps)适合极低带宽场景(如卫星通信),高比特率(24kbps)适合高保真音乐编码。通过调整 RVQ 的层数来控制:更多层 = 更高比特率 = 更好音质。

20.3.8 语义 Token vs 声学 Token:AudioLM 的核心洞察

到目前为止我们有了高质量的声学 token(SoundStream/EnCodec 的 RVQ 索引)。但仅有声学 token 是不够的——这是 AudioLM 论文中最深刻的洞察。

问题:声学 token 不理解"意思"

声学 token 精确记录了声音"长什么样",但它不理解声音的语义内容。

打个比方:假设你把一段演讲录音交给 SoundStream 编码,得到一串 token。这些 token 能完美重建原始音质——说话人的声线、语速、背景噪音都完美还原。但如果你想"续写"这段演讲——让 AI 生成接下来的内容——仅靠声学 token 是做不到的。因为声学 token 里的信息太底层了,大量 token 用于描述音色、呼吸声等非语义细节,真正的"说了什么"信息被淹没了。

这就像给你一张油画的高清照片(像素级精确),让你"续画"下去。你能看到每个笔触的纹理和颜色,但如果不理解画面的构图和主题,你画出来的东西虽然纹理上可能衔接自然,但内容上会驴唇不对马嘴。

解决方案:两层 token 系统

AudioLM 引入了语义 token 来解决这个问题:

语义 token = w2v-BERT 模型中间层表示 -> k-means 聚类 -> 离散索引

  • 来源:自监督语音模型(w2v-BERT)的中间层
  • 制作方法:对中间层表示做 k-means 聚类(通常 1024 个聚类中心),每帧音频映射到最近的聚类中心索引
  • 捕捉的信息:"说了什么"——语言内容、语调模式、音乐旋律
  • 丢失的信息:精确音色、背景细节、录音环境

声学 token = SoundStream RVQ 索引

  • 来源:SoundStream 编码器 + RVQ
  • 捕捉的信息:"怎么说的"——精确音色、韵律细节、环境音
  • 特点:从声学 token 可以直接重建波形

经典类比:乐谱与演奏

这个双层 token 系统可以用音乐类比完美解释:

  • 语义 token = 乐谱上的音符:记录了旋律、节奏、和声走向——"弹什么"
  • 声学 token = 演奏者的诠释:同一首曲子,郎朗弹出来和一个初学者弹出来完全不同——指触力度、踏板运用、节奏伸缩(rubato)。这些"表情"信息不在乐谱上,但决定了听感

当你想"续写"一段音乐时:

  1. 首先需要知道旋律走向(语义层面)——下一个乐句应该是上行还是下行?回到主调还是继续发展?
  2. 然后需要保持演奏风格一致(声学层面)——如果前面是钢琴独奏,后面不能突然变成电吉他

AudioLM 正是这样做的:先用语义 token 规划"说什么",再用声学 token 确定"怎么说"。

这个设计的深远影响

语义-声学双层 token 的思想影响了几乎所有后续的音频生成模型:

  • MusicLM(2023):文本到音乐。先从文本描述生成语义 token(旋律规划),再生成声学 token(音色实现)
  • VALL-E(2023):3 秒语音克隆。语义 token 决定说话内容,声学 token 复制目标说话人的音色
  • AudioPaLM(2023):统一文本和音频词汇表,在两种模态间自由转换
  • Stable Audio(2023):虽然走扩散路线不用离散 token,但其 latent space 也有类似的语义-声学分离

对具身 AI 而言,这个分层设计意味着:

  • 语义 token 可以对接语言模型——机器人能"听懂"声音事件的含义
  • 声学 token 可以用于高质量声音重建和生成——机器人能"说出"自然的语音反馈
  • 两层可以独立处理:紧急情况下只处理语义 token 快速反应,有余裕时再处理声学 token 获取完整信息

20.4 Whisper:68 万小时炼出的听力大师

20.4.1 核心思想:弱监督的规模法则

在 Whisper 之前,语音识别(ASR)领域的标准做法是:收集人工标注的语音-文本对,训练有监督模型。这带来两个问题:

  1. 数据瓶颈:人工标注极其昂贵。LibriSpeech(当时最常用的英语 ASR 数据集)只有 960 小时——大约 40 天的连续音频。即使是大公司内部数据集,通常也不超过几万小时。

  2. 分布偏移:在安静录音棚里标注的数据,训练出的模型到嘈杂的真实环境中表现急剧下降。这就是所谓的 OOD(Out-of-Distribution)问题。

Whisper 的核心洞察非常简单:互联网上已经有海量带字幕的音频了——YouTube 视频的自动字幕、电影/电视的字幕文件、有声书配文本、播客带转录稿......这些字幕质量参差不齐(所以叫"弱标注"),但胜在量大。

680,000 小时——这是 Whisper 的训练数据量。大约 78 年的连续音频。比之前最大的有标注数据集大了将近一个数量级。

类比:传统 ASR 模型像一个在安静教室里跟着外教学英语的学生——学习环境好,老师发音标准,但一到嘈杂的街头就懵了。Whisper 像一个在全世界各地生活了 78 年的人——听过各种口音、各种噪音环境、各种话题。虽然没有人系统地教过他语法规则,但他什么都能听懂。

20.4.2 弱监督 vs 强监督的 trade-off

维度 强监督(传统 ASR) 弱监督(Whisper)
数据量 小(千到万小时) 巨大(68 万小时)
标注质量 精确 有噪声
训练集内表现 更好 略差
OOD 表现 大幅领先
多语种覆盖 需要每种语言单独收集 自然覆盖
鲁棒性

这个 trade-off 和 CLIP(Ch8)如出一辙:CLIP 也是用海量弱标注的图文对(互联网上的图片配文字)训练,牺牲了在特定数据集上的精度,换来了通用性和鲁棒性。Whisper 是 CLIP 思想在音频领域的直接应用。

20.4.3 架构设计:优雅的简洁

Whisper 的架构出奇地简单——标准的 Encoder-Decoder Transformer,没有什么花哨的模块。这本身就是一个设计选择:当数据量足够大时,简单架构 + 规模 > 复杂架构 + 小数据。

输入处理管线

原始音频(任意长度)
    |
切分为 30 秒片段(不足补零)
    |
计算 80 通道 log-Mel 频谱图
    |
得到 (3000, 80) 的特征矩阵
    |
两层 CNN(stride=2, 下采样到 1500 帧)
    |
加位置编码
    |
送入 Transformer Encoder

逐步解释:

  1. 30 秒固定窗口:所有音频被切成 30 秒的片段独立处理。这是工程上的简化——避免了处理超长序列的复杂性。30 秒足以包含大多数句子,太短会切断语句,太长会增加计算量。

  2. 80 通道 log-Mel:如前面 20.2 节所述,将音频转换为 80 个频率通道的对数梅尔频谱图。帧移 10ms,所以 30 秒 = 3000 帧。结果是一个 3000x80 的"图像"。

  3. 两层 CNN:不是用于特征提取的大型卷积网络,只是两层 1D 卷积(kernel size 3, stride 2),目的是将时间维度从 3000 下采样到 1500。这减少了 Transformer 的序列长度,降低计算量。

  4. Transformer Encoder:标准多头自注意力 + FFN。Large-v2 模型有 32 层 encoder。

解码过程

解码器是标准的自回归 Transformer Decoder,逐 token 生成输出。但 Whisper 的巧妙之处在于用特殊 token 来控制多任务行为:

<|startoftranscript|>  ->  开始标记
<|en|>                 ->  语种标记(英语)
<|transcribe|>         ->  任务标记(转录 vs 翻译)
<|notimestamps|>       ->  是否输出时间戳
"Hello world"          ->  实际文本输出
<|endoftext|>          ->  结束标记

通过改变这些 prompt token,同一个模型可以执行不同任务:

  • 语种设为 <|zh|> + 任务设为 <|transcribe|> -> 中文语音识别
  • 语种设为 <|zh|> + 任务设为 <|translate|> -> 中文语音翻译为英文
  • 加上 <|timestamps|> -> 输出带时间戳的转录(每个词/句子的开始结束时间)
  • 如果输入音频无语音 -> 模型输出 <|nospeech|> token -> 兼具 VAD(语音活动检测)功能

这种设计的灵感来自 GPT 系列的 prompt engineering 思想:不改模型结构,通过改变输入 prompt 来控制行为。

模型规模

模型 参数量 Encoder 层 Decoder 层 注意力维度
Tiny 39M 4 4 384
Base 74M 6 6 512
Small 244M 12 12 768
Medium 769M 24 24 1024
Large-v2 1.55B 32 32 1280

Large-v2 有 15.5 亿参数。对比 GPT-3(1750 亿)来看不算大,但对于一个专用的音频模型来说已经很可观了。

20.4.4 训练策略

数据清洗

680K 小时的互联网音频+字幕,质量参差不齐。Whisper 做了以下清洗:

  1. 去重:删除重复音频(同一视频被搬运到多个平台的情况很常见)
  2. 语种检测过滤:用现有语种检测工具初步标注每段音频的语种,过滤掉语种标签和实际内容不符的数据
  3. ASR 质量过滤:用已有的 ASR 模型对部分数据做转录,和原始字幕对比。如果差异太大(说明原始字幕可能是完全错误的机器翻译或无关文本),则过滤掉
  4. 音频质量过滤:过滤掉纯音乐、纯噪音、极短片段等

清洗后剩余的数据覆盖了 97 种语言,其中英语占比最大(约 65%),其次是中文、西班牙语、俄语等。

多语种联合训练

所有语种在一个模型里联合训练。模型通过 prompt token 中的语种标记来区分不同语言。这带来两个好处:

  1. 正迁移:语言之间共享的声学模式(如呼吸、停顿、语调升降)可以互相帮助
  2. 低资源语种受益:资源少的语种(如越南语、冰岛语)借助高资源语种的知识获得更好的性能

Scaling 分析

Whisper 论文做了详细的 scaling 分析:随着模型从 Tiny(39M)增大到 Large(1.55B),在大多数语种上 WER 持续下降。但有趣的是,在某些高资源语种(如英语)上,Medium 和 Large 的差距很小——暗示这些语种的性能瓶颈已经从模型容量转移到了数据质量。这和 Chinchilla scaling law 的核心发现一致:模型规模和数据规模需要匹配增长。

20.4.5 关键实验结果

OOD 鲁棒性:最大亮点

Whisper 最核心的贡献不是在某个 benchmark 上刷到最低 WER,而是它的鲁棒性。

论文做了一个很有说服力的实验:比较 Whisper 和当时最好的有监督模型在各种数据集上的表现。

  • 在 LibriSpeech test-clean(安静朗读英语)上:有监督模型 WER 2.7%,Whisper Large WER 3.4%。有监督模型略胜。
  • 在 CHiME-6(嘈杂会议录音)上:有监督模型 WER 67%,Whisper Large WER 38%。Whisper 大幅领先。
  • 平均 OOD WER 改善 55.2%——这意味着在训练集以外的真实数据上,Whisper 的错误率比有监督模型低了一半以上。

为什么?因为有监督模型在 LibriSpeech 的安静朗读数据上"过拟合"了——它完美地学会了在安静环境中识别标准美式英语,但面对噪音、口音、非标准录音条件时就不行了。而 Whisper 的训练数据本身就包含各种噪声条件、各种口音、各种录音质量,所以它天然具备鲁棒性。

类比:一个只在游泳池里练过游泳的人,到了大海里可能会慌张。但一个从小在河里、湖里、海里都游过的人,到哪里都不怕。Whisper 就是在"大海"里练出来的。

多语种表现

Fleurs 是一个覆盖 102 种语言的 ASR benchmark。Whisper Large-v2 在其中 75 种语言上的平均 WER 低于 20%。考虑到这些语言中很多(如哈萨克语、马其顿语)的专用 ASR 模型都很难达到这个水平,这个结果非常惊人。

但也要注意,Whisper 在低资源语种上仍有明显短板。比如在某些非洲语言上 WER 超过 50%。这是训练数据分布不均的直接后果——互联网上这些语种的带字幕音频本来就少。

和有监督模型的互补关系

Whisper 的定位不是"在所有场景下都最好",而是"在所有场景下都还行"。如果你只关心一种特定语言在特定条件下的 ASR,训练一个专用的有监督模型可能更好。但如果你需要一个在各种条件下都可靠工作的通用模型(这正是具身 AI 的需求),Whisper 是目前最好的选择。

20.4.6 对具身 AI 的意义

Whisper 对具身 AI 领域的影响是全方位的:

作为 VLA 的语音前端

在 Ch12 中我们学习了 VLA(Vision-Language-Action)模型。当用户通过语音发出指令时,需要先将语音转为文本,再送入 VLA 的语言通道。Whisper 是目前最常用的语音前端:

用户语音 -> Whisper -> 文本指令 -> VLA -> 机器人动作
"把红色的杯子递给我" -> "把红色的杯子递给我" -> RT-2/OpenVLA -> 机械臂运动

更进一步,一些研究直接使用 Whisper 的 encoder 输出(而非解码后的文本)作为 VLA 的输入。这样可以保留语音中的韵律信息(比如紧急程度、情感色彩),而不仅仅是语言内容。一个焦急的"快停下来!"和一个平静的"停下来"在文本上差不多,但韵律完全不同——前者应该触发紧急停止,后者可以正常减速。

零样本多语种能力

一个工厂机器人可能需要理解中文、英语、越南语等多种语言的指令(取决于工人的母语)。传统做法需要为每种语言部署单独的 ASR 模型。Whisper 一个模型覆盖所有语种,大大简化了部署。

更重要的是,Whisper 具备语种自动检测能力——不需要提前告诉它"接下来的指令是中文"。它会自动识别语种并正确转录。这对多语种混合使用的场景(比如中英夹杂的指令)非常实用。

实时性考量

具身 AI 对延迟很敏感——用户说完话后不能等太久才响应。Whisper 各模型的推理延迟:

  • Tiny(39M):30 秒音频在 CPU 上约 1 秒推理,适合实时
  • Small(244M):30 秒音频在 CPU 上约 3-4 秒,勉强可用
  • Large-v2(1.55B):30 秒音频在 V100 GPU 上约 2 秒,可接受
  • Large-v2 在边缘设备(如 Jetson Orin)上:约 5-8 秒,需要优化

实际部署中的常见策略:

  • 在机器人本地跑 Tiny 或 Small 模型做实时响应
  • 重要指令通过网络发到云端用 Large-v2 再确认一次
  • 使用 Whisper 的流式变体(如 faster-whisper),不等 30 秒说完就开始转录

20.4.7 Conformer 对比:前 Whisper 时代的 ASR 标杆

在 Whisper 出现之前,Conformer(2020)是 ASR 领域的标杆架构。理解 Conformer 有助于理解 Whisper 为什么选择了不同的道路。

Conformer 的"马卡龙"结构

Conformer 的创新是将卷积和自注意力融合在一个 block 中,结构如下:

输入
  |
1/2 FFN(前馈网络,输出减半)
  |
Multi-Head Self-Attention
  |
Convolution Module(depthwise 1D conv)
  |
1/2 FFN(前馈网络,输出减半)
  |
LayerNorm
  |
输出

两片 FFN 像三明治面包一样夹住注意力和卷积——这就是"马卡龙"名字的由来(macaron:法式夹心饼干,两片饼皮夹着馅料)。

为什么要这样设计?

  • Self-Attention 擅长捕捉长距离依赖(比如一个词的发音受 10 秒前的语境影响)
  • Convolution 擅长捕捉局部模式(比如一个音素的频谱形状就是几十毫秒内的局部特征)
  • 两者互补:Attention 看全局,Conv 看局部

Conformer 的成绩

LibriSpeech test-clean WER 约 2.1%(带语言模型重评分)。在发布时是 SOTA。参数量 118M,比 Whisper Large 小得多。

为什么 Whisper 不用 Conformer

Whisper 论文并没有明确解释这个选择,但可以从几个角度理解:

  1. 简洁性:标准 Transformer 的实现最简单、最成熟、硬件优化最充分。Conformer 增加了 depthwise conv 模块,引入额外的超参数(kernel size、conv 层数等),但当数据规模足够大时,这些架构层面的边际收益递减。

  2. Scaling 友好:标准 Transformer 的 scaling law 已被 GPT 系列充分验证到千亿参数规模。Conformer 的 scaling 行为没有被充分验证到十亿参数以上。在"确定性"层面,选择已被证明的架构更安全。

  3. 多任务需求:Whisper 不只做 ASR,还做翻译、时间戳对齐、VAD 等。Encoder-Decoder 结构天然支持这些序列到序列任务(通过改变 decoder 的 prompt)。而 Conformer 原本设计为 encoder-only + CTC loss 的纯 ASR 架构,要做多任务需要额外改造。

  4. 工程哲学:OpenAI 的一贯风格是"数据 + 规模 + 简单架构"(GPT、CLIP、DALL-E 都是),而非精巧的架构设计。他们的核心假设是:当数据量和模型规模足够大时,简单架构能学到复杂架构通过归纳偏置(inductive bias)手动编码的信息。Whisper 延续了这一哲学。

这个选择是否"正确"取决于评价标准。如果目标是在 LibriSpeech 上刷最低 WER,Conformer + 精细调参可能更好。但如果目标是做一个在各种条件下都鲁棒的通用模型,Whisper 的方法论被证明是更成功的。


20.5 AudioLM:让 AI 学会"接话"

20.5.1 核心思想:音频版的 GPT

设想这个场景:你唱了半句"祝你生日快乐,祝你生日快乐",然后停下来。旁边的人会自然地接唱"祝你生日快乐,祝你——"。他们不需要看乐谱,不需要知道歌名,仅凭听到的旋律和节奏就能预测接下来应该唱什么。

AudioLM(2022,Google Research)做的就是这件事:给模型一段音频开头,让它自动续写后续内容——保持一致的说话内容、说话风格、背景音效。而且它做到了完全不需要文本转录作为中间步骤。

为什么"不需要文本"这件事很重要?因为文本只能表达语言内容,不能表达:

  • 音乐(没有乐谱的即兴演奏怎么用文本描述?)
  • 环境音("厨房里的声音"——包含冰箱嗡嗡声、水龙头滴水、远处的电视...)
  • 副语言信息(叹气、笑声、犹豫的"呃...")

AudioLM 的目标是做一个通用的音频生成模型,不局限于语音,也不依赖文本。它的核心方法论是:把音频生成问题转化为 token 序列预测问题——和 GPT 预测下一个文本 token 完全同构。

20.5.2 三阶段生成架构

AudioLM 的生成过程分为三个阶段,从粗到细逐步生成:

阶段 1: 语义 token -> 语义 token     (规划"说什么")
阶段 2: 语义 token -> 粗声学 token   (确定"怎么说")
阶段 3: 粗声学 token -> 细声学 token  (高保真还原)

每个阶段都是一个独立的 Transformer 语言模型,训练目标都是预测下一个 token。让我们逐一深入理解每个阶段。

阶段 1:语义续写

输入:前文的语义 token 序列(w2v-BERT 中间层 -> k-means -> 索引) 输出:后续的语义 token

这一步的目标是规划接下来应该"说什么"或"播放什么旋律"。语义 token 已经去除了说话人音色等无关细节,只保留了语言/音乐的核心内容。所以这个阶段只需要关注内容的连贯性——就像写小说时先列大纲,不用操心具体遣词造句。

具体来说,w2v-BERT 的语义 token 频率是 25Hz(每秒 25 个 token)。AudioLM 在这一步生成大约几秒钟的后续语义 token。由于语义 token 的速率远低于声学 token(25Hz vs 75Hz x 12 层 = 900Hz),这个阶段的计算量最小,但语义规划的质量直接决定了最终结果的连贯性。

阶段 2:声学着色

输入:完整的语义 token 序列(包括原始前文的 + 阶段 1 新生成的) 输出:SoundStream RVQ 的前几层 token(粗声学 token,通常是前 4 层)

这一步的目标是确定"怎么说"——用谁的声音?什么样的语速和语调?在什么样的环境中?这些信息从前文的声学 token 中"推断"出来(因为前文的完整声学 token 是已知的,模型从中学到了说话人身份和环境特征)。

只生成 RVQ 前几层是有意为之的——前几层包含了最重要的信息(基本频谱形状、音高轨迹、能量包络),后面的层只是精细化修补。先用前几层建立"骨架",下一阶段再填充细节。

类比:这就像装修房子——先做硬装(墙体、地板、水电,对应粗声学 token),再做软装(家具、装饰品,对应细声学 token)。先硬后软的顺序不能反。

阶段 3:精细化

输入:粗声学 token(RVQ 前 4 层) 输出:细声学 token(RVQ 后 8 层)

这一步纯粹是提升音质——从"能听清内容"到"听起来自然舒适"。类似于图像生成中的超分辨率步骤:先生成低分辨率图像确定构图,再做 upscaling 补充高频细节。

完成三阶段后,将全部 12 层 RVQ token 送入 SoundStream 解码器,直接重建波形。整个过程完全不需要文本参与——从音频到音频,端到端。

20.5.3 与 GPT 的详细类比

为了让零基础读者真正理解 AudioLM 的意义,我们详细对比它和 GPT 的关系:

维度 GPT(文本) AudioLM(音频)
输入 文本 token 序列 音频 token 序列
目标 预测下一个文本 token 预测下一个音频 token
Token 来源 分词器(BPE/SentencePiece) 声学编码器 + 语义编码器
Token 层次 单层(文本本身就是离散的) 双层(语义 + 声学)
生成结果 连贯的文章 连贯的音频
无需标注 是(纯文本自监督) 是(纯音频自监督)
生成阶段 1 个阶段 3 个阶段

最关键的区别是 token 层次:文本天生就是离散的(字母、词汇都是可数的),所以 GPT 只需要一层 tokenization。但音频是连续信号,需要额外的步骤将它离散化。而且如 20.3 节所述,单纯的声学 token 不足以捕捉语义,所以需要两层 token。

这正是为什么 AudioLM 需要三个阶段而不是像 GPT 那样一个阶段就能生成:它需要先在语义层面规划(阶段 1),再映射到声学层面(阶段 2-3)。如果强行只用一层 token 一个阶段生成,生成质量会大幅下降——模型在"说什么"和"怎么说"之间左右为难,两头都做不好。

另一个视角:GPT 的文本 token 本身就同时编码了语义(词义)和"声学"(拼写/发音),两者在文本中天然统一。但音频的语义和声学是可分离的——同一句话可以用完全不同的声音说出来。所以音频生成需要显式地分开处理这两个维度。

20.5.4 AudioLM 的训练与评估

AudioLM 的训练过程体现了自监督学习的优雅:

训练数据:只需要大量无标注音频。论文使用了 LibriLight 60K 小时的无标注英语语音。不需要任何文本转录。

预处理(离线)

  1. 用预训练的 w2v-BERT 模型提取中间层表示,做 k-means 得到语义 token
  2. 用预训练的 SoundStream 编码器提取声学 token(RVQ 索引)

训练三个 Transformer

  • Stage 1 模型:在语义 token 序列上做标准的 next-token prediction(和训练 GPT 完全一样)
  • Stage 2 模型:以语义 token 为条件,预测粗声学 token
  • Stage 3 模型:以粗声学 token 为条件,预测细声学 token

每个模型都是标准的 Transformer decoder,训练损失都是交叉熵。没有任何对抗训练、扩散过程或其他花哨的训练技巧。

评估维度

AudioLM 的评估从两个角度进行:

  1. 语义连贯性:生成的续写在语义上是否合理?评估方式包括:

    • 对于语音:生成结果是否是连贯的语句(用 ASR 转文本后检查语法和语义)
    • 人工评估:让人听原始 + 续写,判断续写是否像自然的接续
  2. 声学质量:生成的音频是否自然、无明显伪影?评估方式包括:

    • MOS(Mean Opinion Score):人工打分,1-5 分
    • Frechet Audio Distance(FAD):类似图像领域的 FID,衡量生成音频的分布和真实音频分布的距离

论文结果表明 AudioLM 在两个维度上都达到了接近真实音频的水平——听众难以区分真实续写和 AI 续写。

20.5.5 后续影响:AudioLM 开启的范式

AudioLM 的"音频 token + 自回归生成"范式影响了一系列后续工作:

MusicLM(2023,Google)

将 AudioLM 的方法应用于文本到音乐生成:

  • 文本描述(如"一段欢快的爵士钢琴独奏,带有即兴段落")
  • 通过 MuLan 模型将文本编码为音频相关的嵌入
  • 然后用类似 AudioLM 的三阶段生成:语义 token -> 粗声学 token -> 细声学 token
  • 条件信息(文本嵌入)注入第一阶段,指导语义 token 的生成方向

MusicLM 可以生成几分钟长度的高质量音乐,风格和内容都与文本描述一致。

AudioPaLM(2023,Google)

AudioPaLM 做了一件更激进的事:将文本 token 和音频 token 放进同一个词汇表,用一个统一的 PaLM-2 模型同时处理。

统一词汇表 = PaLM-2 文本 token + AudioLM 音频 token

这样模型可以无缝地在文本和音频之间转换:

  • 输入音频 token -> 输出文本 token = ASR(语音识别)
  • 输入文本 token -> 输出音频 token = TTS(文本转语音)
  • 输入语种 A 音频 token -> 输出语种 B 音频 token = S2ST(语音到语音翻译)

特别是 S2ST——语音到语音翻译,保持说话人音色。这是传统管线(ASR -> MT -> TTS)做不到的。在传统管线中,说话人身份信息在文本阶段被彻底丢失——翻译后的语音只能用固定的 TTS 音色。AudioPaLM 通过统一 token 空间,让音色信息在整个过程中得以保留。

VALL-E(2023,Microsoft)

VALL-E 专注于零样本语音克隆:给 3 秒参考音频 + 目标文本,生成用参考人声音说出目标文本的音频。

它的做法是:

  • 3 秒参考音频提取声学 token(提供音色信息)
  • 目标文本通过音素转换(phoneme)提供语义指导
  • 生成过程结合两者:用参考的音色,说出目标的内容

这同样是语义-声学分离思想的应用:语义内容来自文本("说什么"),声学特征来自参考音频("用谁的声音说")。

两条技术路线的分野

AudioLM 之后,音频生成领域形成了两条明显的技术路线:

Token + 自回归路线(AudioLM, MusicLM, VALL-E, AudioPaLM):

  • 优点:可以和 LLM 统一框架(都是 token 预测);易于做条件生成和多任务
  • 缺点:自回归生成速度慢(逐 token 串行);容易累积误差

扩散模型路线(Stable Audio, AudioLDM, Make-An-Audio):

  • 优点:生成质量高(扩散模型在图像生成中已证明实力);可以并行去噪
  • 缺点:不容易和 LLM 统一;难以做真正的"续写"(更擅长从头生成)

两条路线谁会最终胜出还不明确,可能会像视觉生成中 DALL-E 2(扩散)和 DALL-E 3(token+扩散混合)那样融合。

20.5.6 对具身 AI 的意义:听觉世界模型

在 Ch15 中我们学习了世界模型——模型在内部模拟世界的物理规律,预测"如果我做了 X,世界会变成什么样"。当时的讨论主要集中在视觉世界模型(预测下一帧图像)。

AudioLM 本质上就是一个听觉世界模型:它能从当前的声音状态预测未来的声音演变。

这对具身 AI 意味着什么?

场景 1:声音事件预测

机器人听到水壶里的水开始"咕噜咕噜"冒泡——如果有一个好的听觉世界模型,它能预测接下来会发生什么:泡沫声会越来越密集,然后壶会开始尖啸(鸣笛声),最终如果不关火水会溢出来。基于这个预测,机器人可以提前行动——在水烧开前就走向厨房去关火。

这种"预测性行动"比"反应性行动"(等水真的沸腾了才去关火)要高效得多,也更接近人类的行为模式。人类总是在事件发生之前就基于声音线索采取行动——你听到钥匙响就会提前看门口,而不是等门开了才反应。

场景 2:动作结果验证

机器人执行了一个"把玻璃杯放在桌子上"的动作。它的听觉世界模型预期会听到一声轻柔的"叮"(玻璃触碰硬表面的特征声音)。如果实际听到的是"啪嚓"(碎裂声),这意味着执行出了问题——杯子可能摔碎了。

这种声音层面的"预期-现实对比"可以作为动作成功与否的反馈信号。比起视觉确认(需要摄像头对准特定位置、需要良好光照),声音确认更加即时和可靠。

场景 3:与视觉世界模型互补

视觉世界模型(Ch15 的 UniSim、Genie 等)擅长预测空间变化——物体移动到哪里、形状如何变化。但它不擅长预测声音事件。

听觉世界模型正好互补。两者结合,机器人能建立更完整的世界物理模型:

  • 视觉世界模型:"如果我推这个杯子,它会从桌边掉落"
  • 听觉世界模型:"杯子掉落后会发出碎裂声"(玻璃杯)或"闷响"(塑料杯)

通过声音预测来推断材质(进而推断是否需要小心处理),这是纯视觉系统做不到的。

场景 4:异常检测

一个工业机器人在工厂里运行。它的听觉世界模型知道"正常运转"的声音模式。如果某天电机开始发出异常的高频啸叫,模型预测到的"正常下一秒的声音"和实际听到的声音出现严重偏差——这个偏差本身就是异常信号,提示设备可能出了故障。

这回到了本章开篇的核心论点:声音携带着大量视觉不易获取的信息(材质、内部状态变化、机械健康状况)。一个真正智能的具身系统,需要像人一样同时利用视觉和听觉来理解和预测世界。


20.6 语音分离基础:鸡尾酒会问题

20.6.1 嘈杂酒吧里的超能力

想象这个场景:你坐在一家超级热闹的火锅店里。锅底在沸腾,隔壁桌在划拳,服务员在喊号,背景音乐放着流行歌——同时有十几个声源在发声。

但是,你的朋友坐在你对面说了一句"我觉得这个鸳鸯锅太辣了"。

你听清了。

这件事看起来稀松平常,但从工程角度看,简直是奇迹。你的耳朵接收到的是所有声源的混合信号——一根单一的空气压力波形。你的大脑需要从这根波形中,把朋友的声音"拆"出来,同时把火锅咕嘟声、划拳声、服务员喊声全部"压下去"。

这就是 鸡尾酒会问题(Cocktail Party Problem)——1953 年由 Cherry 提出。名字来源于鸡尾酒会上人们能在嘈杂环境中聚焦一个说话人的能力。

20.6.2 为什么机器人需要解决这个问题

在上半部分(20.3 节)我们学了 Whisper——它能把语音转成文字,正确率很高。但 Whisper 有一个隐含的前提:输入的音频里只有一个人在说话,或者至少目标说话人的声音足够清晰。

在真实部署环境中,这个前提几乎不成立。家用机器人工作的客厅里可能同时有电视声、小孩吵闹声、大人交谈声。工厂机器人周围有机械噪音。护理机器人的环境中老人可能在多人对话场景中给出指令。

所以,在 Whisper 之前,我们需要一个前处理步骤:把混合音频里的目标声音单独拎出来。这就是语音分离(Speech Separation)要解决的问题。

20.6.3 传统方法的局限

在深度学习之前,人们主要用两类方法:

频域掩码(Time-Frequency Masking):先把混合音频做 STFT(短时傅里叶变换),得到一个时频谱图。然后估计一个掩码(mask),标记每个时频点属于哪个说话人。把掩码乘上混合信号的频谱,就得到分离后的单人频谱。最后做逆 STFT 恢复波形。

问题在于:STFT 有一个固有的"时频分辨率矛盾"。窗口长了,频率分辨率高但时间分辨率低;窗口短了反过来。这个矛盾限制了分离质量的上限。

独立成分分析(ICA):假设各声源统计独立,用数学方法分解。但它假设声源数量等于麦克风数量,单麦克风就没法用。

20.6.4 Conv-TasNet:时域端到端分离

2019 年,Luo & Mesgarani 提出了 Conv-TasNet(Convolutional Time-domain Audio Separation Network),彻底改变了语音分离的范式。

核心思想:抛弃 STFT,直接在时域波形上操作。

架构分成三个模块:

混合波形 x(t)
    ↓
[Encoder] — 1D 卷积,窗口 L=2ms,步长 L/2=1ms
    ↓
特征表示 W(类似学习到的时频表示)
    ↓
[Separator] — 堆叠的 TCN(时序卷积网络)
    ↓
M 个掩码 m_1, m_2, ..., m_M(M=说话人数)
    ↓
[Decoder] — 转置卷积,掩码 × 特征 → 分离后的波形
    ↓
分离出的 s_1(t), s_2(t), ..., s_M(t)

Encoder:一个 1D 卷积层,kernel size = L(比如 16 个采样点 ≈ 2ms @ 8kHz)。它把原始波形切成小片段,每个片段映射成 N 维向量。你可以把它理解成一个"学出来的 STFT"——但不受时频分辨率矛盾的束缚,因为卷积核是学出来的。

Separator:这是核心。使用 TCN(Temporal Convolutional Network) 结构——堆叠多层膨胀因果卷积(dilated causal convolution)。膨胀因子每层翻倍:1, 2, 4, 8, ...,这样感受野指数增长,用很少的层数就能覆盖很长的时间跨度。

separator 的输出是 M 个掩码,每个掩码和 encoder 的输出维度相同。

Decoder:转置卷积。把掩码乘上 encoder 输出,再用转置卷积恢复为时域波形。

关键数字

指标 数值 意义
SI-SNRi 15.3 dB 分离后信噪比改善 15.3 dB(WSJ0-2mix)
参数量 5.1M 非常小,适合部署
实时率 <1x 处理速度快于音频播放速度
对比 频域最佳方法约 12 dB 时域完胜频域

SI-SNRi(Scale-Invariant Signal-to-Noise Ratio improvement) 是语音分离的标准指标。它衡量分离后的信号相比原始混合信号在信噪比上提升了多少。15.3 dB 意味着分离后的信号质量大幅改善。

为什么时域打败了频域? 核心原因是:encoder 的卷积核可以自由学习最适合分离任务的变换基(basis functions),不受 STFT 的正弦/余弦基函数的限制。这种灵活性让模型能够捕捉到对分离有用但在传统时频谱上不明显的特征。

20.6.5 DPRNN:处理长序列

Conv-TasNet 有一个限制:当音频很长时(比如完整的对话,几十秒甚至几分钟),TCN 的感受野可能不够,或者计算量会很大。

DPRNN(Dual-Path Recurrent Neural Network) 通过一个巧妙的设计解决了这个问题:

思路:把一个长序列分成固定长度的小块(chunk),然后在两个尺度上分别处理:

  1. Intra-chunk RNN:在每个小块内部做处理。这是局部建模——捕捉短时间内的精细结构。
  2. Inter-chunk RNN:跨所有小块做处理。把每个小块的同一位置串起来,做全局建模——捕捉长程依赖关系。
[chunk 1] [chunk 2] [chunk 3] [chunk 4] ...

Intra: →→→→   →→→→   →→→→   →→→→     (每块内部)
Inter: ↓        ↓        ↓        ↓       (跨块同位置)

类比:就像读一本小说。Intra-chunk 相当于仔细读每一段落的细节;Inter-chunk 相当于把各段落的线索串起来理解整个故事线。两者交替进行,既看细节又看全局。

DPRNN 在 WSJ0-2mix 上达到了 18.8 dB SI-SNRi,超过 Conv-TasNet。而且由于 chunk 是固定长度的,处理任意长音频的计算量是线性增长的——不会因为输入很长就爆炸。

20.6.6 这些和具身 AI 的关系

Conv-TasNet 和 DPRNN 是基础模块。你可以把它们看作"听觉前处理的 backbone"。后面 20.7 和 20.8 节会讲到的 Proactive Hearing 和 NeuralAids,都是在这些基础结构上做改进——加入说话人定向、加入超低功耗约束等。

就像 ResNet 是视觉系统的 backbone,Conv-TasNet/DPRNN 是听觉分离系统的 backbone。


20.7 Proactive Hearing:主动聚焦目标说话人

20.7.1 火锅店里的"自动调频"

继续用火锅店的场景。刚才说的语音分离是把所有说话人分出来——就像同时录下了桌上每个人的声音。但你真正需要的可能只是一个人的声音——你正在跟谁对话,你就聚焦谁。

更微妙的是:你是怎么知道"现在该听谁"的?

不是因为你事先录了朋友的声纹(voiceprint)。如果一个陌生人第一次跟你说话,你也能立刻聚焦对方——你用的线索是对话节奏。谁刚说完话、谁转向你、谁的语调在等你回应——这些 turn-taking(轮次交接)信号告诉大脑"下一个该听的是谁"。

Proactive Hearing(主动听觉,2024)就是受这种机制启发的系统。它不需要预先注册说话人的声纹,而是通过对话的 turn-taking 节奏来动态锁定目标说话人。

20.7.2 为什么不用声纹注册

传统的"目标说话人提取(Target Speaker Extraction, TSE)"系统需要一段预录的目标说话人语音作为参考。系统计算参考语音的 speaker embedding(说话人嵌入向量),然后在混合音频中找到匹配这个嵌入的声音进行提取。

这个方法有几个实际问题:

  1. 注册负担:每个新用户都需要先录一段清晰的声音样本。家里来了客人想跟机器人对话?先注册一下。
  2. 声音变化:人的声音会因为感冒、情绪、年龄而变化。注册的声纹可能很快过期。
  3. 多人切换:在多人对话中,目标说话人不断切换。传统方法需要在每次切换时重新选择参考向量——但怎么知道什么时候该切换?这又是一个鸡生蛋蛋生鸡的问题。

Proactive Hearing 的思路是:不需要知道"目标是谁(声学身份)",只需要知道"现在该听谁(对话角色)"

20.7.3 系统架构:快慢模型协作

Proactive Hearing 使用了一个快慢双模型(fast-slow model)的设计:

混合麦克风信号
      ↓
┌─────────────────────────────────┐
│  Fast Model(快模型)            │
│  帧级处理,12.5ms/帧            │
│  功能:VAD + 方向估计            │
│  输出:每帧的说话人活跃状态 +    │
│        声源方向角 (DOA)          │
└─────────────────────────────────┘
      ↓ 语音活动 + 方向信息
┌─────────────────────────────────┐
│  Turn-Taking Logic(轮次决策)   │
│  功能:根据对话节奏判断           │
│       "下一个该聚焦的方向"        │
└─────────────────────────────────┘
      ↓ 目标方向
┌─────────────────────────────────┐
│  Slow Model(慢模型)            │
│  片段级处理,~1s 窗口            │
│  功能:精细语音分离              │
│  条件:目标方向作为引导           │
│  输出:干净的目标说话人语音       │
└─────────────────────────────────┘

快模型(Fast Model)

  • 处理粒度:12.5ms 一帧(非常快,接近实时)
  • 功能:Voice Activity Detection(VAD,语音活动检测)+ Direction of Arrival(DOA,声源方向估计)
  • 输出:每一帧里"谁在说话"以及"从哪个方向说的"
  • 计算量:极小,因为只做二分类(有/无语音)和方向估计

Turn-Taking Logic

  • 分析快模型输出的时间序列模式
  • 判断当前对话处于什么阶段:A 在说 → A 停了 → 等待 B 回应 → B 开始说
  • 核心假设:紧接在机器人(或当前说话人)说话结束后、从特定方向开口的人,就是对话的下一个参与者——即目标

慢模型(Slow Model)

  • 处理粒度:约 1 秒窗口
  • 功能:给定目标方向,做精细的语音分离
  • 技术:基于 DPRNN 的改进架构,加入方向条件
  • 输出:干净的单人语音

20.7.4 性能表现

在多说话人真实录音评估中:

指标 数值 含义
SI-SDRi 11.95 dB 信号失真比改善
说话人识别准确率 92.1% 正确锁定了目标说话人
说话人混淆率 1.5% 误把 A 当成 B 的概率极低
跨语言 EN / ZH / JA 英语、中文、日语都有效
延迟 <100ms 满足实时对话需求

关键发现

  1. Turn-taking 信号比声纹更鲁棒:在嘈杂环境中,声纹匹配的性能会急剧下降(因为参考和目标的声学条件不同),但 turn-taking 信号基于时间模式,对噪声不那么敏感。

  2. 跨语言泛化:turn-taking 是一种通用的人类对话行为模式——不管说什么语言,对话的轮次交接都遵循类似的时间规律(一个人说完 → 短暂停顿 → 另一个人接话)。所以模型在英语上训练后,迁移到中文和日语上性能下降很小。

  3. 无需预注册即可启动:新用户第一次跟机器人说话,机器人就能立即聚焦这个人——因为它依赖的是"谁在跟我对话"这个上下文,不是"这个声音匹配谁的声纹"。

20.7.5 具身 AI 的应用场景

场景 1:家庭服务机器人

客厅里,电视在播放新闻(一直在出声),两个大人在聊天,一个小孩在旁边自言自语。主人对机器人说:"帮我把水杯拿过来。"

传统方法:机器人需要预先知道"主人的声纹",然后从混合信号中匹配。但如果主人刚好感冒了(声音变化),或者是家里的客人在发指令呢?

Proactive Hearing:机器人检测到一个声音从"面对机器人的方向"发出,并且在此之前有一个"叫机器人名字"的触发词或者注意力转向动作(face direction 朝向机器人)。turn-taking 逻辑判断"这个人在跟我说话",于是聚焦提取这个方向的声音,交给 Whisper 转写。

场景 2:多人会议记录

会议室里 5 个人讨论。机器人担任会议记录员。它需要知道"现在是谁在说话"以便标注到正确的人名下面。

Proactive Hearing 的 turn-taking 模块能实时追踪说话人切换。结合 DOA(每个人坐在固定位置,方向固定),它能把每段话分配给正确的说话人——不需要每个人预先录声纹。

场景 3:嘈杂工厂中的语音指令

工人在机器轰鸣的车间里对机械臂说:"停!"。机械臂需要立刻听到这个指令。

快模型的 12.5ms 帧级响应确保了极低延迟。即使在高噪声环境下,结合方向信息(工人站在机械臂前方),系统能快速定位并提取指令。

20.7.6 和前文的关系

Proactive Hearing = Conv-TasNet/DPRNN 的分离能力 + turn-taking 的目标锁定策略。

它回答了一个上一节没有解决的问题:分离出来的多个人声,选哪个给下游 ASR(如 Whisper)?答案是:用对话节奏来选择。


20.8 NeuralAids:芯片级神经网络助听

20.8.1 大货车和自行车

上面讲的 Whisper、AudioLM、Proactive Hearing,它们都有一个共同特点:算力需求不小。Whisper Large-V3 有 1.55B 参数,跑在 GPU 上。AudioLM 需要大模型推理。Proactive Hearing 的慢模型也需要相当的算力。

这些系统适合部署在有算力保障的平台上——云端服务器、有 GPU 的机器人主机。就像大货车,马力强劲,什么都能拉。

但有一类设备,它的计算资源极其有限:助听器

助听器是一个塞在耳朵里的微小设备。它的电池只有一粒纽扣大,需要续航一整天(16+小时)。它的处理芯片功率只有几十到一百毫瓦。它的存储只有几百 KB 到几 MB。

但它要做的事情和上面讨论的一样:在嘈杂环境中帮助用户听清目标说话人。

这就是"大货车 vs 自行车"的区别。NeuralAids 要在自行车的资源约束下,做到大货车的部分效果。

20.8.2 硬件平台:GAP9

NeuralAids 系统使用的芯片是 GAP9——一颗专为边缘 AI 设计的 RISC-V 处理器:

特性 规格
架构 RISC-V,9 核
频率 370 MHz
内存 1.6 MB L1 SRAM
用途 超低功耗边缘 AI
功耗范围 几十到几百 mW
制程 22nm FDX

对比一下你熟悉的设备:

  • iPhone 芯片频率:~3 GHz(是 GAP9 的 8 倍)
  • GPU 显存:几 GB 到几十 GB(是 GAP9 内存的上千倍)
  • GAP9 的存储约束意味着整个模型(权重+激活)必须装在 1.6 MB 里

在这种芯片上做语音分离,就像让一辆自行车在高速公路上和卡车一起跑——你必须极度精简。

20.8.3 模型设计:TF-GridNet 变体

NeuralAids 采用的网络结构基于 TF-GridNet 的精简变体。TF-GridNet 本身是一个强大的语音分离网络(在 WSJ0-2mix 上达到了很高的分离指标),但原版有上百 MB 参数。

精简策略:

1. 大幅减少通道数和层数

原版 TF-GridNet 可能有 64-128 个通道,多个 GridNet 块。NeuralAids 版本把通道数砍到很小(如 16-32),只用最少的块数,在保持基本分离能力的前提下极力压缩。

2. QAT(Quantization-Aware Training,量化感知训练)

这是关键步骤。正常的神经网络用 float32(32 位浮点数)存储权重——每个参数占 4 字节。NeuralAids 使用 int8 量化——每个参数只占 1 字节,体积直接缩小 4 倍。

但直接把 float32 模型截断成 int8 会损失很大精度。QAT 的做法是:在训练阶段就模拟量化带来的误差,让模型在训练时就"习惯"低精度运算。这样量化后的性能损失比事后量化小得多。

训练阶段:
  前向传播:权重 float32 → 模拟 int8 量化 → 量化后的权重参与计算
  反向传播:计算梯度,更新 float32 的原始权重
  效果:模型学会了在低精度下也能正确分离

部署阶段:
  只保留 int8 权重
  所有计算用整数运算——在 RISC-V 上超快

3. 模型剪枝(Pruning)

去掉对输出贡献小的连接和神经元。就像修剪一棵树——去掉不结果的枝条,让营养集中到重要的枝干上。

20.8.4 最终部署指标

经过这些优化,最终部署在 GAP9 上的模型:

指标 数值 对比参考
模型大小 299 KB Whisper Large = 3 GB(万倍差距)
推理延迟 5.54 ms/帧 帧长 16ms,远快于实时
功耗 71.64 mW 纽扣电池可续航 16h+
SI-SDRi 8.19 dB Proactive Hearing = 11.95 dB
实时因子 0.35x 处理速度是音频速度的 2.9 倍

解读这些数字:

  • 299 KB:一张普通照片的大小就能装下整个模型。这证明了"有用的神经网络不一定要大"。
  • 5.54 ms/帧:每帧音频 16ms,处理只要 5.54ms,剩余 10ms 是空闲时间。系统有充足的余裕。
  • 71.64 mW:一枚 PR44 助听器电池(锌空气电池)容量约 600-700 mAh @ 1.4V ≈ 840-980 mWh。即使整个系统(含放大器、蓝牙等)功耗 100mW 出头,也能撑接近 8 小时。实际助听器有其他省电策略,续航达到全天使用是可行的。
  • 8.19 dB SI-SDRi:虽然低于 Proactive Hearing 的 11.95 dB,但记住——这是在一颗 370MHz 芯片上、299KB 模型达到的!这个级别的分离改善对助听器用户来说已经是巨大的帮助——把聆听难度从"完全听不清"降到"集中注意力可以听懂"。

20.8.5 对具身 AI 的启示

NeuralAids 的意义不仅仅是助听器。它证明了一件更大的事情:

神经网络语音分离可以完全在边缘设备上运行,不需要云端。

对具身 AI 来说,这意味着:

1. 低成本机器人也能有听觉分离能力

不是只有装了 GPU 的高端机器人才能在噪声中听清指令。一个成本几十块钱的 RISC-V 芯片就能运行语音分离。这让家用机器人、玩具机器人、工业传感器都可以具备这个能力。

2. 隐私保护

音频在本地处理,不需要把用户的对话传到云端。这对家庭场景特别重要——没人愿意自己在家说的每句话都上传到服务器。

3. 低延迟保证

5.54ms 的处理延迟 + 没有网络延迟 = 几乎瞬时响应。这对安全关键场景很重要——"停!"这个指令的响应不能等云端返回。

4. 离线可用

工厂深处没有 WiFi?户外偏远地区没有信号?不需要网络连接,机器人的听觉系统照常工作。

20.8.6 和 Proactive Hearing 的互补

你可以把 NeuralAids 看作 Proactive Hearing 的"边缘版"。完整的系统设计可能是:

层级 1:NeuralAids(边缘芯片,实时)
  - 做基础的噪声抑制和初步分离
  - 响应延迟 <10ms
  - 覆盖简单场景(单一主要噪声源)

层级 2:Proactive Hearing(主控 CPU/GPU)
  - 做复杂的多人分离 + turn-taking 追踪
  - 响应延迟 ~100ms
  - 覆盖复杂场景(鸡尾酒会、多人对话)

这种分层设计类似于人类的听觉系统:外周(耳蜗)做快速的频率分解和初步滤波,中枢(听觉皮层)做高级的声源分离和语义理解。


20.9 Acoustic Swarms:移动麦克风阵列

20.9.1 固定路灯和走路的萤火虫

传统的麦克风阵列是固定安装的——就像路灯。你在会议室天花板上装一圈麦克风,它们的位置关系是已知的、不变的。基于这些固定的几何关系,你可以计算声音到达不同麦克风的时间差(TDOA),从而定位声源方向。

但这有一个根本限制:覆盖范围取决于安装位置。路灯只能照亮它脚下的那片区域。如果声源离麦克风阵列太远,信号衰减严重;如果有障碍物阻隔,可能完全接收不到。

Acoustic Swarms(声学蜂群,2024)的思路完全不同:让麦克风自己走到声源附近去。

就像一群萤火虫——它们散布在整个空间中,自由移动。每只萤火虫是一个微弱的光源,但当它们协作起来、从不同角度照亮一个物体时,比一盏固定的大灯更灵活。

具体来说:7 个小型移动机器人,每个携带一个麦克风,在房间里自主移动,组成一个动态的分布式麦克风阵列。

20.9.2 核心挑战:位置自校准

固定麦克风阵列的优势是:你精确知道每个麦克风的坐标位置。这让声源定位的数学计算很简单——解一组 TDOA 方程即可。

但移动机器人在不停走动,它们的位置时刻在变。要做声源定位,你必须首先知道"麦克风们现在在哪里"。

传统做法可能用 GPS(室内不行)、UWB 定位(需要额外基础设施)、或视觉 SLAM(计算量大)。

Acoustic Swarms 用了一个极其巧妙的方法:超声波啁啾测距(Ultrasonic Chirp Ranging)

原理:每个机器人的扬声器周期性地发出一个超声波 chirp 信号(人耳听不到的频率范围)。其他机器人的麦克风接收到这个 chirp 后,通过计算 chirp 的到达时间和已知的声速,得出两个机器人之间的距离。

机器人 A 发出 chirp → 声速 343 m/s → 机器人 B 在 2.92ms 后收到
距离 = 343 × 0.00292 = 1.00m

误差:±0.45 cm(非常精确!)

7 个机器人两两之间有 21 对距离观测。用这 21 个距离约束,通过多边定位(multilateration)可以恢复所有 7 个机器人的相对坐标。测距精度 0.45 cm——对于声源定位来说足够精确了。

20.9.3 声源定位:SRP-PHAT

知道了麦克风的位置,下一步是定位声源。Acoustic Swarms 使用 SRP-PHAT(Steered Response Power with Phase Transform) 算法:

思路:把空间划分成网格点。对每个候选位置,计算"如果声源在这个位置,7 个麦克风的信号延迟应该是多少",然后把实际信号按这些延迟对齐求和。如果声源真的在这个位置,对齐后的信号会互相增强(相干叠加),得到一个功率峰值。

空间网格:
  . . . . . .
  . . . . . .
  . . ★ . . .    ← 声源真实位置
  . . . . . .

对每个点计算 SRP 值:
  点(1,1): 功率 = 0.2
  点(2,3): 功率 = 0.8  ← 接近声源,功率高
  点(3,3): 功率 = 0.95 ← 声源位置,功率最高!
  ...

定位结果 = 功率最高的网格点 = (3,3)

PHAT(Phase Transform) 是一个加权策略:在频域中只保留相位信息、去掉幅度信息。这样做的好处是对混响(房间反射)更鲁棒——直达声和反射声的相位差异比幅度差异更稳定。

有 7 个分布在房间各处的麦克风,SRP-PHAT 的定位精度达到了 0.37 cm(2D)。这比只用一个集中式阵列精确得多——因为更大的阵列"孔径"(aperture)意味着更好的空间分辨率。

20.9.4 语音分离:Conformer + Transformer

定位声源之后,就可以做分离了。Acoustic Swarms 的分离模块使用了 Conformer + Transformer 架构:

Conformer(卷积 + Transformer 混合):

  • 卷积层捕捉局部时频模式(类似 Conv-TasNet 的 TCN)
  • Self-attention 层捕捉长程依赖(类似 DPRNN 的 inter-chunk)
  • 两者结合兼顾局部和全局

Transformer 融合层

  • 融合来自 7 个麦克风的信息
  • Cross-attention 机制让每个麦克风的特征能"看到"其他麦克风的特征
  • 空间信息(麦克风位置 + 声源位置)编码为 positional embedding

分离结果

条件 SI-SDRi 备注
2 说话人,模拟 >12 dB 仿真房间
2 说话人,真实 >10 dB 真实房间录音
3 说话人,真实 ~8 dB 更难的场景

在真实环境中达到 >10 dB SI-SDRi 是很不容易的——真实环境有混响、有背景噪声、机器人自身还有电机噪声。

20.9.5 动态重配置

Acoustic Swarms 最有趣的特性是:阵列形状可以根据任务动态调整

  • 检测到声源在房间左侧 → 几个机器人向左移动,增加那个方向的分辨率
  • 声源移动了 → 机器人跟着移动,保持良好的覆盖
  • 多个声源分散在房间各处 → 机器人均匀分布,最大化整体覆盖

这就像一个自适应天线阵列——能把"波束"对准需要的方向。

20.9.6 多机器人协作听觉

对具身 AI 来说,Acoustic Swarms 开启了一个全新范式:多机器人协作感知

传统思路是给一个机器人装很多传感器(大型麦克风阵列、多摄像头等),让它独立完成所有感知任务。

Acoustic Swarms 的思路是:每个机器人只有一个麦克风(传感器极简),但通过多个机器人的协作,实现比单个豪华设备更好的效果。

这跟自然界的类比很恰当:一只蚂蚁很弱小,但蚁群可以完成惊人的任务。一个机器人只有一个麦克风,但 7 个机器人协作就是一个超大孔径的阵列。

应用场景:

  • 智能家居:家里的几个小型设备(扫地机器人、智能音箱、台灯底座里的 mic)协作组成分布式阵列
  • 搜救:多个无人机在废墟上空分散飞行,协作定位幸存者的呼救声
  • 大型会议厅:多个移动麦克风机器人自动分布在会场各处,确保全场覆盖

20.10 听觉在具身 AI 的应用全景

20.10.1 语音驱动机器人动作:VLAS

在 Ch12 中,我们学习了 VLA(Vision-Language-Action)模型——把视觉和语言输入映射到机器人动作。

VLAS(Vision-Language-Audio-Action) 更进一步:在 VLA 的基础上加入了原生的语音输入通道。传统 VLA 的语言输入是已经转写好的文字(text)。VLAS 直接接收语音波形:

传统 VLA 流水线:
  麦克风 → [Whisper ASR] → 文字 → [VLA 模型] → 动作

VLAS 端到端流水线:
  麦克风 → [Whisper Encoder 特征] → [VLA 模型] → 动作

区别在于:VLAS 不需要等 ASR 完整转写,而是直接把 Whisper encoder 的中间特征送入 VLA。这带来了:

  1. 更低延迟:不等转写完成就开始规划动作
  2. 保留韵律信息:语音的音调、语速、重音包含额外语义——"快点拿过来!"(急促)vs "帮我拿过来"(平缓)可以映射到不同的动作速度
  3. 抗 ASR 错误:ASR 转写可能有错(特别是噪声环境下),但 encoder 的连续特征保留了更完整的信息

20.10.2 声音作为物理线索

声音不仅仅是"语音指令"的载体。对机器人来说,非语音声音同样携带了大量有价值的物理信息:

碰撞声 → 材质判断

机器人抓起一个物体轻轻敲桌面:

  • "叮"(高频、衰减慢)→ 金属或玻璃
  • "砰"(低频、衰减快)→ 木头或塑料
  • "噗"(极低频、几乎无回弹)→ 软质物(布、海绵)

这些信息帮助机器人决定抓取力度——玻璃杯需要轻拿轻放,塑料瓶可以用更大力。

倒水声 → 水位估计

往杯子里倒水时,声音的频率会随着水位上升而升高(因为杯子里的空气柱变短了,共振频率上升)。机器人可以通过监听倒水声的频率变化来判断"杯子快满了"——不需要视觉确认(可能被手或壶遮挡)。

异常声 → 故障诊断

正常运转的电机有稳定的频率模式。如果出现异常的高频啸叫、不规则的敲击声、或者频率突然变化——这些都是故障的早期信号。机器人可以在故障真正发生之前就检测到异常并报警。

这些应用不需要复杂的模型——简单的频谱分析 + 阈值判断就可以解决很多问题。但关键是:机器人需要"注意到"这些声音,并且知道它们意味着什么。这需要一个听觉场景理解(Auditory Scene Analysis)的能力。

20.10.3 通用声音分离:USS

前面讨论的语音分离专注于"人声"。但在具身 AI 的应用中,机器人需要分离的不只是人声——它可能需要从混合环境声中单独提取"水烧开的声音"或"电机异响"。

USS(Universal Sound Separation) 是 Google 提出的通用声音分离系统:

设计

  • 覆盖 527 个声音类别(AudioSet ontology)
  • 输入:混合音频 + 一个查询("提取哪种声音?")
  • 查询方式:可以是文字标签("dog barking")或者一段参考音频
  • 架构:FiLM(Feature-wise Linear Modulation)条件机制 + ResUNet

FiLM 条件机制

混合音频 → ResUNet encoder → 特征图
                                    ↓
查询 embedding → FiLM: γ·特征 + β   ← 缩放和偏移
                                    ↓
                         ResUNet decoder → 分离出的目标声音

FiLM 的作用是:根据查询(你想要什么声音),调制(modulate)中间特征。这样同一个网络可以根据不同查询提取不同的声音——就像一个可调节的滤波器。

对具身 AI 的意义

机器人不需要为每种声音训练一个专用分离器。一个统一的 USS 模型就够了。想听水声就查询"water",想听电机就查询"motor"。这种灵活性对实际部署非常重要——你不知道机器人未来会遇到什么声音环境。

20.10.4 五大系统对比

系统 目标 核心技术 规模 延迟 核心指标 部署场景
Conv-TasNet 盲分离 1D Conv + TCN 5.1M params 实时 SI-SNRi 15.3 dB 通用前处理
Proactive Hearing 目标锁定 Turn-taking + DPRNN 中等 <100ms SI-SDRi 11.95 dB, 92.1% ID 多人对话机器人
NeuralAids 边缘分离 TF-GridNet + QAT int8 299 KB 5.54ms SI-SDRi 8.19 dB 助听器/IoT
Acoustic Swarms 协作感知 Chirp测距 + SRP-PHAT + Conformer 7 机器人 准实时 0.37cm精度, >10dB 多机器人
USS 通用分离 FiLM + ResUNet 非实时 527类覆盖 声音场景分析

选择逻辑

  • 只需要分离所有声源 → Conv-TasNet / DPRNN
  • 需要追踪"跟我对话的人" → Proactive Hearing
  • 资源极度受限(mW 级功耗)→ NeuralAids
  • 多机器人场景 → Acoustic Swarms
  • 需要按类别查询特定声音 → USS

20.10.5 全景拼图

把 Ch20 上下两部分的所有技术串起来,一个完整的具身 AI 听觉系统长这样:

┌─────────────────────────────────────────────────────┐
│  物理层                                              │
│  麦克风阵列 / 分布式机器人 mic(Acoustic Swarms)    │
└────────────────────────┬────────────────────────────┘
                         ↓ 原始波形
┌─────────────────────────────────────────────────────┐
│  前处理层                                            │
│  噪声抑制 + 语音分离                                 │
│  - 边缘快速: NeuralAids(芯片级,<10ms)            │
│  - 精细分离: Conv-TasNet / DPRNN                     │
│  - 目标锁定: Proactive Hearing (turn-taking)         │
│  - 通用分离: USS (按类别查询)                        │
└────────────────────────┬────────────────────────────┘
                         ↓ 干净的目标音频
┌─────────────────────────────────────────────────────┐
│  理解层                                              │
│  - 语音识别: Whisper(ASR → 文字)                   │
│  - 音频表示: SoundStream / EnCodec(RVQ tokens)     │
│  - 声音事件分类: AudioSet 分类器                     │
└────────────────────────┬────────────────────────────┘
                         ↓ 语义信息
┌─────────────────────────────────────────────────────┐
│  决策层                                              │
│  - 语音指令 → VLA/VLAS → 动作                       │
│  - 声音事件 → 状态推理 → 行为规划                    │
│  - 听觉世界模型: AudioLM(预测 + 异常检测)         │
└─────────────────────────────────────────────────────┘

每一层都有明确的分工,每个系统都解决一个具体的子问题。真正强大的具身 AI 听觉不是单一模型的胜利,而是这个完整 pipeline 的协同。


20.11 总结与反思

20.11.1 三个核心教训

教训一:时域优于频域(在端到端学习时代)

Conv-TasNet 证明了:当你让神经网络自由学习信号表示时,它能找到比人工设计的 STFT 更好的变换基。这个教训泛化到整个 AI 领域——尽量少加人工假设,让数据说话。

但也要注意:在资源受限场景(NeuralAids),STFT 的结构化先验反而是有用的——因为你没有足够的参数量来"自由学习"。这就是工程中永恒的 trade-off:灵活性 vs 效率。

教训二:系统设计比单模型更重要

Proactive Hearing 的创新不在于分离网络本身有多强,而在于"怎么决定分离谁"这个系统级设计。它用 turn-taking 替代了声纹注册,解决了实际部署中的可用性问题。

类似地,Acoustic Swarms 的创新不在于分离算法本身,而在于"让麦克风自己走到最优位置"这个系统架构思想。

这提醒我们:在实际应用中,模型的 SOTA 分数不是唯一重要的事情。系统的整体设计——如何把模型嵌入到一个可用、可靠、可扩展的系统中——往往决定了最终效果。

教训三:边缘部署是一种设计约束,不是低配妥协

NeuralAids 不是"把大模型缩小了就完事"。它从芯片架构开始思考,选择了适合低功耗硬件的网络结构和量化方案,最终在 299KB 的约束下达到了实用的分离效果。

这跟"把 Whisper 量化压缩一下放到手机上跑"是完全不同的思路。后者是"先有模型,再想怎么塞进设备";前者是"先知道设备有什么资源,再设计能在这个资源下工作最好的模型"。

对具身 AI 来说,很多设备都是资源受限的——小型无人机、穿戴设备、低成本家用机器人。为它们设计的 AI 系统需要从一开始就把资源约束作为设计参数,而不是最后的妥协。

20.11.2 Token LM vs Diffusion:听觉生成的两条路线

在上半部分我们学了 AudioLM——它用 token LM(语言模型预测下一个 token)的方式生成音频。整个系统是:音频 → 离散 token → 自回归预测。

但还有另一条路线正在崛起:扩散模型(Diffusion Model)生成音频。代表系统包括 Stable Audio、AudioBox、Make-An-Audio 等。

两条路线的对比:

维度 Token LM(AudioLM 路线) Diffusion(Stable Audio 路线)
表示 离散 token(RVQ 码本) 连续潜空间(latent)
生成方式 自回归,token by token 迭代去噪,全局并行
优势 与 LLM 无缝集成;流式生成 全局一致性好;质量上限高
劣势 长序列累积误差;速度受制于序列长度 不好流式输出;步数多时慢
可控性 用 prompt token 条件化 用 cross-attention 条件化
类比 写作文:一个字一个字写 画油画:先涂底色,逐步细化

对具身 AI 来说:

  • 如果需要实时流式响应(机器人边听边生成回应的语音)→ Token LM 更自然,因为它可以一个 token 一个 token 地输出,不需要等整段生成完
  • 如果需要高质量音效合成(生成特定场景的环境声用于训练或模拟)→ Diffusion 质量更高
  • 如果需要和 LLM 统一架构(一个模型同时理解文字和音频)→ Token LM 的离散化表示更容易和 LLM 的文字 token 混合处理

目前这两条路线在快速融合——有些系统把 token LM 用于粗粒度生成,再用 diffusion 做精细化(类似 AudioLM 的 semantic → acoustic 分层策略)。最终可能不会有一个明确的"赢家",而是两者各司其职。

20.11.3 从"被动听见"到"主动听觉"

回顾整个 Ch20,我们看到了听觉智能的一条进化线:

  1. 被动接收:SoundStream/EnCodec 编码音频 → "把声音记下来"
  2. 被动理解:Whisper 转写语音 → "听懂说了什么"
  3. 被动预测:AudioLM 续写音频 → "预测接下来会听到什么"
  4. 主动选择:Conv-TasNet / Proactive Hearing → "选择要听谁"
  5. 主动靠近:Acoustic Swarms → "走到能听清的位置"
  6. 主动适配:NeuralAids → "在极端约束下也要听清"

从被动到主动,从固定到自适应——这正是"具身"的核心含义。不是被动地处理送来的数据,而是主动地改变自身状态(位置、注意力焦点、资源分配)来获取最需要的信息。

一个真正智能的具身系统,会像人一样:在嘈杂的环境中凑近说话的人(Acoustic Swarms),锁定对话伙伴(Proactive Hearing),在大脑后台持续监听异常(AudioLM 做异常检测),同时保持低能耗(NeuralAids 的边缘策略)。

这就是听觉智能对具身 AI 的完整贡献——不只是"给机器人装个麦克风"这么简单。


通向下一章

至此,我们走完了具身 AI 的感知维度:

  • Ch8-9:视觉感知(CLIP / BLIP-2 / LLaVA)
  • Ch18:触觉感知(多模态融合)
  • Ch19:射频感知(RF-Pose / PanoRadar)
  • Ch20:听觉感知(Whisper / AudioLM / Proactive Hearing / NeuralAids / Acoustic Swarms)

感知是具身 AI 的"输入端"——机器人通过各种传感器理解世界。但所有这些感知模型都需要一样东西来训练:数据

大量的、多样的、高质量的数据。

在视觉领域,ImageNet 和 LAION 级别的数据集推动了 CLIP 和 Stable Diffusion 的成功。在 NLP 领域,万亿 token 的网络文本催生了 GPT-4。

那么在具身 AI / 机器人领域,数据从哪里来?

这不是一个容易回答的问题。机器人数据不能像网络文本一样"爬"下来——你需要真实的物理机器人在真实环境中执行真实任务,才能产生训练数据。这个过程缓慢、昂贵、且难以规模化。

但近两年出现了几个关键的大规模数据集和数据收集方案,正在改变这个局面。

下一章,我们将系统梳理具身 AI 领域的数据集全景——从 Open X-Embodiment(汇聚 22 个机器人形态的统一数据集)到 DROID(分布式采集的海量操作数据)到 BridgeData V2(低成本机械臂数据)到 LIBERO(标准化基准套件)。

理解这些数据集的设计思想,你就会明白为什么某些模型有效、某些模型泛化能力强——很大程度上不是因为模型架构本身,而是因为训练数据的覆盖度和多样性。


前置章节:Ch19: 射频感知——RF-Pose / milliMap / PanoRadar / RF-SLAM / mmCLIP 后续章节:Ch21: 数据集全景——Open X-Embodiment / DROID / BridgeData V2 / LIBERO 返回目录

本章涉及论文 17 篇

点击查看论文笔记全文,标有 的为已读。

№ 16 Auditory & Acoustic · 经典

AudioLM

№ 19 Auditory & Acoustic · 经典

EnCodec

№ 17 Auditory & Acoustic · 经典

Conformer

№ 21 Auditory & Acoustic · 经典

MusicLM

№ 67 Multimodal Ecology · 经典

AudioPaLM