CTC(Connectionist Temporal Classification)一种用于训练深度神经网络在语音识别,笔迹识别等序列问题的算法。
CTC(对齐与折叠)工作过程(主观上)
过程分析:
ε
\varepsilon
ε
p
(
Y
∣
X
)
=
∑
A
∈
A
X
,
Y
∏
t
=
1
T
p
t
(
a
t
∣
X
)
p(Y|X)=\qquad \sum_{\mathclap{A\in A_{X},_{Y}}}\qquad\qquad\prod_{t=1}^T p_{t}(a_{t}\,|\,X)
p(Y∣X)=A∈AX,Y∑t=1∏Tpt(at∣X)
The CTC conditional probability marginalizes over the set of valid alignments computing the probability for a single alignment step-by-step.
首先是一张分好帧的声谱图,将每一帧的特征送入(fed into)RNN中训练。随后,每一帧的特征随着时间step by step进行识别,获得映射(比对)到{h,e,l,o,ϵ}的概率分布。如上图所示,阴影部分越重代表映射(比对)到该alphabet 的概率越大。然后,随着时间,从前往后通过比对形成3个概率不同的序列L’,整合后形成最终的L。到这里,通过直观感受,这段音频说的就是hello。
经过CTC训练的模型通常使用递归神经网络(RNN)估算每个时间步的概率,
p
t
(
a
t
∣
X
)
p_{t}(a_{t}\,|\,X)
pt(at∣X)RNN通常会很好地工作,因为它考虑了输入中的上下文
但,我们又想,那如果我们一下送入不止一小段音频。可能最后的L’集合包括
hello
hϵello
ϵhelloϵ
heϵllϵllo
…
可以看出这些都会被整合成hello.假设能够整合成hello序列的所有序列的个数为N.
而,这L的形成过程就是N个path,这N个path所代表的的概率相加就组成了最终的标签L。
注意:L’.length()>=L.length();
如果我们不小心,CTC损失的计算成本可能非常高。因为采用直接的方法会有大量的比对。