CTC Loss 解决什么问题?
简化版
CTC 用 blank 和对齐路径边缘化,在不知道帧级标签对齐时训练输入长序列到较短标签序列。它假设给定输入后各时间步条件独立,通过动态规划求所有能折叠成目标序列的路径概率。
详细版
-
路径先合并连续重复符号,再删除 blank。
-
重复标签之间必须有 blank 或其他符号分隔。
-
输入时间步必须足以容纳标签与必要分隔。
-
前向后向算法避免枚举指数条路径。
-
解码可用 greedy 或带语言模型的 prefix beam search。
完整版教学
一、CTC 把未知对齐当隐变量求和
语音帧与文字长度不同且边界未知,强制人工对齐成本高。
CTC 为每帧输出字符加 blank,再把所有合法路径概率相加。
时间步独立假设限制了语言依赖,因此实际系统常结合外部语言模型或改用 RNN-T/attention。
二、底层机制与公式
B(a)=remove_blank(merge_repeats(a))
P(y|x)=sum_(a:B(a)=y) product_t P(a_t|x)
三、带数字的推演
目标是 aa,路径 a a 会先合并成单个 a,不合法;至少需要 a blank a 三步。
因此标签长度 2 不代表输入长度 2 一定可训练。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| CTC | 无需帧级对齐、单调 | 独立假设强 |
| Attention seq2seq | 对齐灵活 | 流式与长序列较难 |
| RNN-T | 流式且建模输出历史 | 训练解码更复杂 |
五、执行流程
编码 T 帧 -> 输出 T×(V+blank) 概率 -> 前向后向累加合法路径
-> 负对数似然 -> 反向训练 -> greedy/prefix beam 解码
六、边界条件与工程代价
若 input_length 包含 padding,CTC 会把补齐帧当真实证据;长度张量必须是下采样后的有效长度。
blank id、词表 id 与解码器映射不一致会造成看似收敛却输出异常,需用小例子核对折叠。
记忆钩子:CTC 三步记忆:“路径含 blank,连续重复先合并,blank 再删除”。
七、常见误区与追问
-
误区:blank 就是空格字符。 它是对齐占位符,折叠时删除。
-
追问:重复字符为何困难? 连续相同符号会被合并,需 blank 分隔。
-
误区:CTC 会学习任意乱序对齐。 它要求输出顺序与输入单调一致。
-
追问:训练复杂度如何控制? 用前向后向动态规划而非枚举路径。
-
追问:为什么加语言模型? CTC 帧独立输出对语言依赖建模较弱。
八、加强记忆
CTC 三步记忆:“路径含 blank,连续重复先合并,blank 再删除”。
训练把所有合法单调路径求和,解码才选择具体序列。