最近在看手势识别相关论文,在看到一篇论文的时候发现了LSTM+CTC能够解决数据预分割的问题。于是抱着学习的心态这篇论文《Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks》。所以本片博客的内容主要是基于论文以及斯坦福PhD的一篇博客,以及自己的一些理解。
预备知识
在看懂CTC之前需要了解隐马尔可夫模型和EM算法。其实CTC里面的思想和HMM很相似,但是又有所区别,如果搞懂了HMM,那么对于CTC的理解就会轻松很多。如果有对HMM不太懂的可以参考我前面几篇博客。
EM算法(Expectation maximization algorithm)
摘要
首先我们要搞清楚为什么要发明CTC,对于真实世界的序列学习任务,数据往往含有噪声和没有预先分割。RNN是一个强大的序列学习模型,但是需要对数据进行预先处理,所以有了CTC我们就能够提升RNN的性能。下面结合论文
标签错误率
首先文章定义了一个标签错误率(label error rate)来进行度量。其中 x x 和 分别表示的是输入序列和标签序列, S′ S ′ 是一个 (x,z) ( x , z ) 的序列集合而 |S′| | S ′ | 表示序列的对数,就是里面有多少对 (x,z) ( x , z ) 。
其中 ED(p,q) E D ( p , q ) 表示编辑距离,其中 p,q p , q 表示的是两个序列。编辑距离的意思是其中 p p 经过插入删除和替换字符等基本操作转换成序列 的操作数。
CTC
从输出到标签
对于一个给定长度为 T T 的输入序列 ,定义一个RNN。并且定义 y