CTC理解

看了这篇Sequence Modeling with CTC搞懂了CTC,简单的记录一下。

CTC(Connectionist Temporal Classification)是常用于语音识别、手写识别等识别模型的输出结果对齐。

首先,X代表输入序列,a代表X中每个x经过模型得到的输出,Y代表label字符集。

CTC可以简单地理解为:对于给定的X,为任意的一个y分配概率,即P(Y|X),计算这种概率的关键是“CTC如何理解输入X与输出Y的对齐”
为了得到给定输入X时输出y的概率,CTC把二者之间所有可能的对齐方式的概率加起来。

image

这种对齐方式的缺点:

(1)对于语音识别中类似静音这种情况,无输出,却强制只能输出lable集Y中的字符

(2)对于“hello”这种重复字符,会折叠成“helo”

因此,CTC引入空标识(blank token)。

CTC的特性:

(a)如果输入X前进到下一位,则相应的输出a必须相同或前进到Y中的下一位

(b)X到Y一定是多对一的关系

(c)Y的长度不能大于X的长度

那么,对于一对儿(X,Y)来说,CTC的目标为:

image

其中,集合AX,Y为所有正确的对齐方式的集合,如下图等:

image

at表示时间步t上,Xt对应的输出at。

However,这种计算方式较慢,因为需要遍历所有情况并相加。

可以采用动态规划的方式加快计算,这里的动态规划根据性质“在某timestep上若at与at-1的输出相同,可以合并”进行计算。

(下面这段英文说的就很明白,翻译成中文就显得很多余,直接粘过来了)

image

只要我们知道上一个timestep上的a,就可以计算当前的as,t

两种情况:

Case1、不能跳过Zs-1

“不能跳过”有两种前提,任一满足即可:

a、上一个token是来源于Y,即Zs-1 from Y

b、若上一个token是空格,且在重复字符之间,也不能跳过,即Zs=Zs-2&&Zs-1=blank


image

image.png

Case2、允许跳过Z中Zt的Z中Zt的上一个token Zt-1
该情况的前提:
空格符在不同的字符之间
因此,我们到达Zt有三种方式,如下图


image.png
image.png

总的来说,以上两种case到达涵盖了有效对齐的所有情况
CTC的反向传播:把直接最大化概率的方式转化为最小化对数:


image.png

前向
在训练完模型之后,需要对于给定输入X找到可能性最大的输出,即:


image.png

你可能感兴趣的:(CTC理解)