换掉「打分器」,
不换「走路的规则」。
GMM:这一种状态,能不能产生眼前的声音?
DNN:看到眼前的声音,各种状态分别有多大可能?
两者都提供逐帧声学证据;HMM 仍然负责顺序与时长。
一个共享 DNN逐帧声学打分
一帧声音,交给两种打分器。
橙色窗口选择当前帧。
下方两边的输入完全相同。
六个状态,六套 GMM。
同一帧分别代入各状态自己的高斯混合密度。小图为 C₁/C₂ 投影,打分仍用全部 12 维。
是密度分数,不要求六个数加起来等于 1。
一个共享 DNN,六个输出。
输入一起走过非线性层,最后一次输出全部状态概率。
只有输出节点代表状态;隐藏节点不是字或音素。
网络给的是后验,HMM 要的是似然。
不能把 P(s | xₜ) 直接当成 p(xₜ | s)。用贝叶斯公式除以状态先验 P(s),得到可供解码的比例似然。
最后一项对同一输入的所有状态相同,路径比较时可省略。下表橙色列就是传给 HMM 的分数。
某状态常见,不等于这帧特别像它。
B:后验 0.4 ÷ 先验 0.2 = 2.00
| 同一套 HMM 状态 | GMM log 密度 | DNN 后验 P(s | xₜ) | 训练集 先验 P(s) | 传入 HMM log 后验 − log 先验 |
|---|
证据换了,六个状态仍然这样走。
换成 DNN,也不能随便跳过状态。
一次前进一步,或留在原地。
只有橙色项的来源替换了。前驱比较、转移概率和回溯步骤都没变。
橙线:合法 Viterbi 路径;虚线:各帧声学分数独立赢家。底色在每帧内部归一化,仅展示相对强弱;GMM 与 DNN 分数的绝对尺度不同,不能用总分高低判断哪种模型更好。
先知道每帧的状态,再学会给状态分类。
例如声音 + “开灯”。训练时知道整句答案。
在已知文本对应的状态链里,给每帧生成状态标签。
交叉熵让正确状态的后验更高;不是直接预测“开灯”两个字。
这是经典混合系统的入门训练路线,不是唯一方法:后续还可做序列判别训练。识别时不输入正确文本;完整系统仍用词典、语言模型与搜索图竞争候选。
替换:逐帧 GMM 密度计算 → DNN 状态后验 + 先验校正。
保留:声学状态、状态转移、自循环、HMM 时序结构和 Viterbi 搜索。
DNN–HMM 仍是混合系统,不是“用一个网络把整段声音直接变成文字”。
模型范围与正确性约定
本页固定比较“开灯”的六个状态,不是完整三指令 DNN 识别器。为了只改变一个模块,两条路线保持相同的 12 维 MFCC 前端和 HMM 转移概率。这里 DNN 输入只有当前帧;实际经典 DNN–HMM 常拼接邻近帧上下文,前端也可能使用滤波器组特征。
DNN 为实际运行的 12→16→12→6 网络,两个 tanh 隐藏层和一个 Softmax 输出层。只用本页两段预设合成语音及 GMM–HMM 对齐标签训练,先验由这些标签频次估计。它用于展示接口,不用于评估泛化、证明 DNN 优于 GMM 或识别未见语音。
真实系统通常用一个共享 DNN 输出全状态集合(经常是绑定的上下文相关音素状态 / senone),不是每个字训练一张网络。本页的六状态仅为看清接口而缩小了状态集合。
参考:Hinton 等,2012:Deep Neural Networks for Acoustic Modeling in Speech Recognition。本页不提供录音或上传,所有预设演示计算在浏览器本地完成。