不告诉它“何时”,
只告诉它“说了什么”。
六个时间步,两个字。文字的时间边界在哪里?
让 CTC 把所有可能的对齐,一起纳入学习。
不是选定唯一的时间边界,而是对有效路径求和。
先看网络自己输出了什么,再用老师的整句答案给它评分。
这是可调的神经网络输出教学示例,不是已训练的语音识别器。T 表示编码器输出的时间步(可能经过下采样),不必等于原始音频帧数。所有 CTC 概率、路径和梯度均实时计算。
每个时间步,先保留所有可能。
“开”“灯”和 blank,各有一个概率。
同一列加起来始终等于 1。
可读取声音上下文→时间步表征 hₜ→Softmax:开 / 灯 / ∅
第 1 步 · 开
拖动滑杆,其他两个概率按原比例自动调整。下方所有阶段同步更新。
它定义“逐步输出如何对应文本”的概率模型和训练目标。编码器可以是 RNN、Transformer 或其他网络;CTC 路径概率按时间步相乘,并不意味着编码器看不到上下文。
先合并连续重复,再移除 blank。
顺序不能反过来。
被 blank 隔开的同字,要保留下来。
开 · 开 · 开 → 开
开 · ∅ · 开 → 开开
它表示这个时间步不输出新的文本标签。有声的时间步也可能输出 blank;最终文本中没有这个符号。重复字之间必须有至少一个 blank,才能不被合并。
同一句话,不止一种时间安排。
一条路径的概率:沿时间相乘。
一个文本的概率:把有效路径相加。
已累加 0 条有效路径
只给整句转写,CTC 就把所有能折叠为它的路径纳入目标。这是“无需预先提供帧级对齐”,不是“对齐不重要”或“不需要文本标签”。
相同的进度,就汇入同一个格子。
每个格子保存到这里的路径概率之和。
这里用“加”,不是 Viterbi 的“取最大”。
—
—
“开 → 灯”可以跨过中间 blank;“开 → 开”不可以,否则两个“开”会折叠成一个。也不能跳入 blank。扩展目标的位置是“输出进度”,不是上节课的声学状态。对给定长度 U 的目标,前向计算量为 O(TU)。
学习时求和,识别时找文本。
训练:让正确转写的总概率上升。
识别:逐步贪心只是一个近似。
—
这里直接优化这一个例子的输出 logits,学习率 0.7;使用真实 CTC 梯度。它不是完整语音编码器训练,也不能用于未见语音。
识别时没有老师答案:下面只根据网络的整张概率表搜索文本,不使用上面的训练标签,也不更新参数。
最佳路径,不一定给出最佳文本。
—
—
—
这里 T ≤ 8、词表只有两个字,因此能完整枚举,得到精确文本排名。真实长语音通常用前缀束搜索近似,常结合语言模型;本页面不把精确枚举称为 beam search。
上个演示用 Viterbi 选出最佳状态路径;CTC 训练把目标对应的路径相加。HMM 的前向算法也能求和,HMM 训练本身并非必须依赖人工时间边界。CTC 的特点是字符 / 子词 + blank 的输出方式和序列级训练目标,而不只是“有动态规划”。
让容易混淆的地方,自己显形。
不需要边界,
仍然需要顺序。
- CTC 的对齐是单调的。路径不能颠倒目标标签顺序;相邻重复标签还需要 blank 分隔。
- 给定输入后的逐步条件独立,不等于不看声音上下文。编码器仍可读取上下文,但标准 CTC 的输出分布没有显式条件于已生成的文本历史。
- CTC 不会自动保证流式。是否能实时输出,取决于编码器是否依赖未来声音,以及解码设计;不是加了 CTC 损失就能流式。
教学边界、计算约定与参考资料
本页面采用字符级小词表 {开, 灯} 和 blank ∅;概率是预设或手动调整的教学数据,不来自真实语音编码器。为便于看清全部路径,输出长度限制为 2—8 步。实际 ASR 常使用更大字符或子词词表、下采样编码器,并在 log 域计算以防数值下溢。
路径概率是逐步条件概率的乘积;文本概率对折叠映射下的所有原像求和。前向表使用 log-sum-exp,显示为普通概率;当前时间步之后的数值在逐步演示中隐藏。训练演示通过前向—后向求出标签占用后验 γ,使用 ∂L/∂zₜ(k) = pₜ(k) − γₜ(k) 更新单例 logits。损失为单条序列的负自然对数概率,不作长度平均。
最少时间步 = 标签数 + 相邻相同标签对数;长度不足时目标概率为 0、损失为 ∞,页面禁止无效学习。blank 是折叠规则的符号,不是声学静音类别。不能把 CTC 的字符后验与 GMM 的特征概率密度混为一谈。