CTC论文阅读笔记

CTC论文阅读笔记

CTC是Alex大佬在06年发表在ICML上的文章首次提出的,是第一篇将端到端的训练引入到语音识别领域的文章。
下面就仔细介绍一下这篇文章的内容。我们首先需要记住的是CTC本身不是一个完整的网络,它需要嵌在神经网络后面,它实际上只是引入了一个新的损失函数和计算损失函数的算法,以及一个解码最终标签的算法。

引言

在DNN-CTC结构之前,所有的语音识别系统本质上都是以HMM或者CRF为基础的,但是这种框架具有较大的缺点,比如他们要求音频特征序列和标签之前具有预先标注的一一对应关系,也即需要人工标注哪段音频对应哪个标签;此外,类似于HMM这种需要提前假设先验概率分布,这些缺点使得语音识别在大规模数据集下的成本非常高,效果也不好,因此,就有了CTC,它会直接用整段语音序列训练,不需要预先标注每一段的标签,并且最终直接输出预测标签,实现了端到端的训练。
对于一段音频,我们将其预切割为几段,每一段的值就是这一段音频对应的音频特征。如果在没有CTC结构时,直接用RNN对这段音频训练那实际上其输出就和下面的图片一样。但是,CTC考虑到一段音频的切割音频中,很可能存在空白音频,也就是那些完全没有声音的音频,这个时候由于RNN必须要输出一个标签,但是不可能让它输出某个字符标签,这样就不符合实际了,所以CTC引入了一个“blank”标签,表示空白。更进一步的,我们从图片上可以看到,RNN的输出标签里面实际上是有重复的,因为两段切割的音频本身就有相关性,可能刚好把“我”这个字的发音切成了两段,所以这样的一个RNN输出是不能够作为我们最终想要得到的预测标签的,还需要经过一个处理,这个处理在文中就是花B那个函数(之后也会讲),RNN的这样一个中间输出称为一条路径π 。
在这里插入图片描述

Temporal Classification

这一小节作者主要是给出了一些notation和模型的性能度量指标
CTC的目标就是训练h这样一个分类器,性能度量指标使用的则是LER,其中涉及到编辑距离,这个在自然语言处理里面都会学到,就是衡量一个字符变成另一个字符的最少编辑操作次数。

CTC

3.1小节作者继续给出了一些notation,由我们之前说的,结合上面那个图很自然就可以得到文中的公式(2),它表达的就是一条路径π 出现的概率就是它在各个时刻为某个标签的概率的乘积,其中,ykt就是指时刻t时,标签为k的概率。同时,此时的标签集合L被更新为L‘,其中引入了blank标签(从这里可以知道CTC网络的输入需要将初始的字符标签的每两个中间和首尾各加入一个blank标签,这样才组成了文中说的(x,z)一个样本,比如本来初始标签为abc,现在就是-a-b-c-)。
紧接着,作者定义了花B这样一个映射,将两个连续重复字符删掉、将blank标签删掉,经过这样一个映射,路径π 可以更新为最终的预测标签l,因此,我们最终想要的p(l | x)这样一个概率实际上就是所有经过花B映射可以变为l的路径π 的概率的求和,也即得到文章中的公式(3)和下面那个公式,CTC网络训练的目的就是求使得p(l | x)最大化的标签序列l。

Training

下面我们先跳过3.2小节,因为3.2小节本质上只是对最终的路径的解码从而得到预测标签,我们需要先知道CTC的训练过程。我们在上一小节的描述中说了,建模的目的就是要找使得p(l | x)最大化的标签序列l,此时就需要我们计算所有可以得到l的路径π,但是如果直接用穷举法会使得网络的复杂度太大,所以我们用动态规划算法,其包括了前向和后向算法(这个前向和后向算法不是神经网络的前向传播和反向传播算法)。
具体的前向-后向算法过程我画了两个图如下,大家可以更加直观的看。
以前向算法为例,实际上可以分为三种情况:
(1)结尾为blank标签的情况
此时,结尾为blank标签的序列可以由上一个时刻结尾不为blank标签的序列加上一个blank标签或者结尾为blank标签的序列再加上一个blank标签
(2)结尾为字符标签,且其和倒数第三个标签(一定为字符标签)相等
这个情况也即图中的两个l字母,结尾为l的标签序列可以是上一个时刻结尾为blank的标签加上一个字符或者上一个时刻结尾为相同字符的标签序列加一个blank
(3)结尾为字符标签,但是其不和倒数第三个相等
这个情况允许上一个时刻的三条路线的转入,结合文章中的公式理解一下就行。
在这里插入图片描述

损失函数计算

基于动态规划算法训练完之后,我们实际上就可以计算p(l | x)这个概率,从而可以计算CTC损失函数的值,也即文章中的公式(12),进一步可以对CTC损失求偏导,然后基于反向传播算法更新RNN隐藏层的参数。推导过程可以参考我的手写笔记(包括对soft Max层的求导)
在这里插入图片描述
在这里插入图片描述
以上就是CTC网络的训练过程和参数更新过程,最后我们介绍文章中的3.2小节也就是解码过程
文中提供了两种解码方法,第一种是最优路径搜索,直接取每个时刻概率最大值对应的标签组成一条路径,然后经过花B函数映射得到预测标签l
第二种是前缀路径搜索,在每个节点处选择概率最大值进行扩展
那么网上实际上还有一些其他的解码方法,比如beam search decoding,其思路很简单,选择概率最大的前k个节点进行扩展,而不是仅仅选择概率最大的那个,这样一个方法是可以确保得到最优标签,而不是前面两种方法只能得到近似最优标签。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CTC(Connectionist Temporal Classification)分割是一种被广泛应用于序列学习任务中的分割方法。它最初被应用于语音识别领域,用于解码语音信号对应的文字序列。CTC分割的思想是将输入序列与输出序列对齐,使得输入序列上的每一个时间步都能对应一个输出标记。 在CTC分割中,输入序列被表示为一个矩阵,例如语音识别中的声学特征矩阵。输出序列是一个包含所有可能标记的序列,包括目标标记和空白标记。空白标记用于建立标记间的空隙,以便更好地适应输入序列与输出序列的对齐。 CTC分割的目标是找到最可能对应于输入序列的输出序列。这通过计算条件概率来实现,即给定输入序列的条件下,得到输出序列的概率。CTC分割使用动态规划算法来计算这一条件概率,通过对输入序列上的所有可能对齐路径求和来得到最终的输出序列概率。 CTC分割具有很好的鲁棒性,它可以处理输入序列与输出序列之间的对齐问题,即输入序列和输出序列长度不一致的情况。同时,CTC分割还可以处理同一输出序列上的多个相同标记的情况,这对于一些序列学习任务非常重要,例如语音识别中的连续重叠发音。 总的来说,CTC分割是一种有效的序列分割方法,可以被应用于多个领域的序列学习任务中,如语音识别、手写识别等。通过对输入序列与输出序列的对齐和概率计算,CTC分割能够找到最可能对应的输出序列,为序列学习任务提供了一种可靠且灵活的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值