单个样本的Loss定义:

训练集上CTC Loss定义:
将所有样本的loss求和:


CTC目标函数
给定语音序列 x,标签序列 z,对于所有满足能映射到序列z的解码路径,可用 前向-后向 算法求解:
α(t, u)·β(t, u)含义
对t时刻,输出标签‘u’的所有路径π的概率求和(s.t. 但是路径π必须满足映射后为z)。
formula 1
先计算单条路径的概率,然后对满足的所有路径概率求和
formula 2
P( z | x )
因此对所有输出字符u进行遍历,即为给定x输出z的概率。
![]()
因此得到单个样本的Loss:

CTC反向传播
对单个样本来说:
1. 对网络输出y的偏导:

因为我们要考虑 t时刻 输出 标签k 的所有路径,因此要引入前向-后向算法【见 formula 2】,于是有:

同时,因为标签k在序列z'中可能会出现多次,因此定义B(z, k)={ u: z'u = k },那么就得到了p( z | x )对输出y的偏导:【实际上就是对所有输出标签k的位置计算损失,为了进行对齐】

最终单个样本对于网络输出y的偏导为:

2. 对输出层的偏导:

其中k’为遍历所有输出单元,网络输出y是输出层通过softmax得到的,即:

对Softmax求偏导,如下:【注意softmax要对 k = k' 和 k ≠ k 分别讨论】
将两种情况进行综合,于是上式的δkk'就是下式:

因此,得到网络输出y对输出层a的偏导,最终传到输出层的梯度为:

网友评论