而序列分类就不一样,他是直接把一个序列映射到另一个序列,从头到尾的去做训练。而这种序列训练的建模理论和基础和我们传统的语音识别差异很大,它本质上并不是静态分类器,它是动态分类器。
语音识别要想实现动态分类,语音识别本质上是训练DNN模型、CNN模型,甚至你训练LSTM,多多少少都有静态分类的影子。而CTC训练是真正的序列训练,优化整个序列的损失,而不是优化单点的损失。
那在展开训练之前,我想再对比一下CTC训练跟传统语音训练HMM训练的不同。
那HMM训练是有这样一个拓扑结构,这个输出分布换成GMM或者是换成DNN,这样的分布,大家建模的时候实际上拓扑是固定了,大家只是训练这部分,这部分东西。我们先得到一个模型初值,切分出边界,在固定边界的学习下,把GMM和DNN模型调到最优,这是我们传统的一个学习分量方法。
虽然我们实现了动态训练分类,但是我们的训练和本质上是静态分类器,我们没有做动态分类器的动态直接训练。但是CTC训练不同,CTC是直接的动态序列学习,它是要优化整个序列的可能性,什么叫整个序列的可能性?
比如说话ABC是一个序列,那么Blank空白AAB Blank CC,这叫ABC,对应的全叫ABC。任何一种序列可能的展开,都是这个序列的实例。它并没有固定的边界,那引入了一个重要的空白模型。空白模型是无意义的,就是没有任何的物理意义,这个模型就是硬引入来的。对应的这个模型拓扑结构,从上面这个模型转成下面这个模型,大家注意这个模型的拓扑,首先Blank空白是可以跨越的,大家可以是越过空白的。但是也可以经过空白,
黑点表示实际的ABC观测,是不可跨越的。可以多帧注流,但是不可以跨越。空白也可以多帧注流,这是CTC理论模型,实际上非常可贵,CTC模型的拓扑结构是这样的。空白是无限延展的,这些有意义的标签分布只有一帧,这是非常重要的CTC的性质。你模型越好你越近于这个性能,而且CTC模型是否训练成功,就依赖于这个拓扑是不是和语音一致。
而当这个语音识别的标签变为一帧的时候,它的价值在解码时会有巨大的收益。解码器是语音识别中最复杂的技术模块,而且它是复杂的逻辑运作,意味着没法加速,而只能顺着 if-else 的路径去拓展,整个就是动态规划。
而如果能把解码速度大大压缩,剩下就是DNN的计算量了。DNN是好办的,它是规整的,有固定的计算规律,而且有很多专业硬件,可以加速和提升。
我觉得这就是语音识别的未来,线上如果50%的搜索都由语音完成,如果机器耗费还和今天一样,没有人能承担起这样的机器耗费。所以这个技术对于语音识别的未来弥足珍贵。
那这个模型好不好,能不能在精度上超越我们现实的语音世界?我再解释一下CTC的实际训练情况,刚开始的路径首先是空白,按照刚才的拓扑结构,空白可以经过,也可以跳跃。空白也可以多帧注流,可以跳向有意义的实际建模单元,建模单元也可以跳过空白到下一个。
整个的空间展开是固定序列约束的解码。什么叫固定序列,我知道我的目标序列是ABCDE,我把ABCDE整个空间在这个模型的拓扑结构上全部去展开。
这是我觉得只要大家是传统做语音识别的,全部是这样的思路。所以当机器学习的人最初提出CTC的时候,很少有语音识别的人去追求,甚至到现在很多人,包括我在9月份的interspeech开会,谷歌的学者讲CTC的时候,底下很多人尤其是传统语音识别的人是不信的。因为这东西在传统的语音识别框架中完全存在,我们也完全能做这个事情,这个东西能有提升吗?其实大家都是不相信的。
包括谷歌的实验结果,谷歌实验结果有一些前后矛盾的地方,它得到的提升不足10%。而状态判断系统的很低,就是一个双重的S型状态。谷歌并没有给出原因,为什么CTC能提升。
那然后讲一讲CTC的函数优化,CTC是优化整个无空间序列,这跟我们的图空间是一样的。但是有一点不一样的,CTC并不是全局Normalise,CTC是在逐帧Normalise打分。
CTC不可能和GMM融合,而必须用轨迹建模,这就要用RNN、LSTM进行轨迹建模。CTC训练必须采用整句训练,综合考虑全局的上下文信息,力求全局对比。然后我们讲空白,CTC模型有两个伟大之处。
第一个伟大之处是全局Global,这个东西我们报告有。
第二个是空白,CTC有特殊的空白模型,我们语音识别有SP,我们有长境义和短境义,我们短境义也有,那它那个空白跟我们的空白有什么差别。
那我可以讲一下,引入blank的类别,它的作用主要是较好的解决两个建模单元之间的混淆性。比如说这是两个建模单元的边界,边界的地方我们是切分切出一个边界,这个边界似是而非,说属于前面也行,说属于后面也行,讲不清楚。这种情况下,CTC模型的空白可以吸收这个边界,对于我们的疑问是,我们的SP模型是不是也能干这个事情。
对应的第二个,将传统的轨迹学习转为差异化学习。CTC的模型结果,一定是当前的建模单元只有一个脉冲信号。我并不是在描述轨迹变化过程,我是在描述差异性。哪一帧信号最能代替这个因素,这是CTC训练的理念实质。
还有CTC训练天然解决了语音和非语音的区别,他们的区分性不是那么重要了,因为CTC已经搞定了。当你在区分训练的时候,更重要的是区分语音之间的混淆性。
这一点实际上是通过一帧信号来代替一个观测量,你说R这个因素可能维持时间很长,但是代表的特征只有一帧信号。然后讲一下CTC实际的前后项算法的特性,这个热力图代表的是误差分布函数,这是从前到后的误差分布,这是从后到前的误差分布,这是两个合到一起的误差分布。