最近在学习CTC,这位作者的文章写的非常好,对我入门CTC非常有帮助,抱着向前辈学习的态度来写一篇学习笔记,这里附上原文链接:
CTC Algorithm Explained Part 1:Training the Network(CTC算法详解之训练篇)
1. CTC由来
CTC由Alex Graves等人在ICML 2006上提出来,目的是实现RNN直接对序列数据进行学习,而无需事先标注好训练数据中输入序列和输入序列的映射关系,使得RNN模型在语音识别等序列学习任务中取得更好的效果。
2. CTC思想
CTC主要作为一种loss函数来使用,他的核心思想主要分为以下几个部分:
- 它扩展了RNN的输出层,在输出序列和最终标签之间增加了多对一的空间映射,并在此基础上定义了CTC Loss函数
- 它借鉴了HMM(Hidden Markov Model)的Forward-Backward算法思路,利用动态规划算法有效地计算CTC Loss函数及其导数,从而解决了RNN端到端训练的问题
- 最后,结合CTC Decoding算法RNN可以有效地对序列数据进行端到端的预测
3. CTC解决的问题:
在语音识别中,由于每个说话人发音方式的不同,同样的一句话会有千万种的发音方法。
通常语音的做法是每10毫秒取为一帧,分析该帧中的内容。
以“我爱你中国”这句话为例,输入是一段语音片段,经过MFCC或LPC等特征提取方法得到特征向量输入到RNN中,RNN的输出是对应的发音方法,而CTC的作用就是将这些发音方法变成最终的标签输出。

4. 问题定义

本质上是最大似然预估, S是训练数据集,X和Z分别是输入空间(由音频信号向量序列组成的集合)和目标空间(由声学模型建模单元序列组成的集合),L是由输出的字符集(声学建模单元的集合),且x的序列长度小于或等于z的序列长度。

说明:得到每条路径的概率,是每个输出结果的乘积,因此用累乘;标签结果是每种对应路径结果概率的加和,因此用累加。
5. CTC Loss函数计算
由于直接暴力计算 𝒑(𝒛│𝒙)的复杂度非常高,作者借鉴HMM的Forward-Backward算法思路,利用动态规划算法求解。
(这部分原作者的图用得非常棒,这里就可耻地直接抄过来了☺)
如下图,为了更形象表示问题的搜索空间,用X轴表示时间序列, Y轴表示输出序列,并把输出序列做标准化处理,输出序列中间和头尾都加上blank,用l表示最终标签,l’表示扩展后的形式,则由2|l| + 1 = 2|l’|,比如:l=apple => l’=a_p_p_l_e














通过动态规划求解出前向概率之后,可以用前向概率来计算CTC Loss函数,如下图:







总结一下,根据前向概率计算CTC Loss函数,得到以下结论:

根据后向概率计算CTC Loss函数,得到以下结论:

根据任意时刻的前向概率和后向概率计算CTC Loss函数,得到以下结论:

网友评论