从经典模型走向端到端 · CONNECTIONIST TEMPORAL CLASSIFICATION

不告诉它“何时”,
只告诉它“说了什么”。

六个时间步,两个字。文字的时间边界在哪里?
让 CTC 把所有可能的对齐,一起纳入学习。

逐帧概率→多条路径→一个文本
时间可以不同,答案仍然相同
开开∅灯灯∅
∅开∅∅灯∅
↘ 开灯 ↙

不是选定唯一的时间边界,而是对有效路径求和。

先分清:我们是在教模型,还是用模型?

训练时,老师知道答案,但不知道每个字的时间边界。

输出时间步6

先看网络自己输出了什么,再用老师的整句答案给它评分。

这是可调的神经网络输出教学示例,不是已训练的语音识别器。T 表示编码器输出的时间步(可能经过下采样),不必等于原始音频帧数。所有 CTC 概率、路径和梯度均实时计算。

老师答案:开灯

01 / 概率分布

每个时间步,先保留所有可能。

“开”“灯”和 blank,各有一个概率。
同一列加起来始终等于 1。

整段声音 X→Encoder
可读取声音上下文
→时间步表征 hₜ→Softmax:开 / 灯 / ∅
当前时间步
逐步读到这里 · 还不是最终最优文本

网络输出 pₜ(k | X)blank 开 灯 · 点击格子再调节
修改这一格

第 1 步 · 开

拖动滑杆,其他两个概率按原比例自动调整。下方所有阶段同步更新。

教学调节范围:0.01—0.98
↳
CTC 不是一种特定的神经网络。

它定义“逐步输出如何对应文本”的概率模型和训练目标。编码器可以是 RNN、Transformer 或其他网络;CTC 路径概率按时间步相乘,并不意味着编码器看不到上下文。

点击一个概率,观察模型还保留了哪些可能。
带着三个问题,再做一次实验

让容易混淆的地方,自己显形。

课堂里的三个提醒

不需要边界,
仍然需要顺序。

  1. CTC 的对齐是单调的。路径不能颠倒目标标签顺序;相邻重复标签还需要 blank 分隔。
  2. 给定输入后的逐步条件独立,不等于不看声音上下文。编码器仍可读取上下文,但标准 CTC 的输出分布没有显式条件于已生成的文本历史。
  3. CTC 不会自动保证流式。是否能实时输出,取决于编码器是否依赖未来声音,以及解码设计;不是加了 CTC 损失就能流式。
教学边界、计算约定与参考资料

本页面采用字符级小词表 {开, 灯} 和 blank ∅;概率是预设或手动调整的教学数据,不来自真实语音编码器。为便于看清全部路径,输出长度限制为 2—8 步。实际 ASR 常使用更大字符或子词词表、下采样编码器,并在 log 域计算以防数值下溢。

路径概率是逐步条件概率的乘积;文本概率对折叠映射下的所有原像求和。前向表使用 log-sum-exp,显示为普通概率;当前时间步之后的数值在逐步演示中隐藏。训练演示通过前向—后向求出标签占用后验 γ,使用 ∂L/∂zₜ(k) = pₜ(k) − γₜ(k) 更新单例 logits。损失为单条序列的负自然对数概率,不作长度平均。

最少时间步 = 标签数 + 相邻相同标签对数;长度不足时目标概率为 0、损失为 ∞,页面禁止无效学习。blank 是折叠规则的符号,不是声学静音类别。不能把 CTC 的字符后验与 GMM 的特征概率密度混为一谈。

参考:Graves 等,CTC 原始论文(ICML 2006);PyTorch CTCLoss 文档。