基于改进的CNN语音识别研究
2022-01-28徐龙飞郁进明
徐龙飞 张 磊 郁进明
(东华大学信息科学与技术学院 上海 201620)
0 引 言
随着科技的进步,语音识别借助深度学习的相关技术实现了快速的发展[1]。在语音识别中,常见的深度学习技术包括卷积神经网络(CNN)、长短时记忆网络(LSTM)和基于CTC的神经网络等[2]。神经网络中的卷积核用于提取数据的特征,对特征的提取效果会直接影响到模型的性能。常见的神经网络中卷积核的大小一般保持不变,这可能会导致网络在训练的过程中,对数据特征重复提取或提取不足,从而影响模型的计算速度和识别率,因此需要对神经网络进行改进,提高模型的性能。
朱锡祥等[3]根据语音信号的时变性,构建一维CNN网络模型,在时间轴上移动卷积核,提取到信号的局部特征,保留了频带的相关性和完整性,提高了模型的识别性能。文献[4]在密度采样时,通过分析误差频率改进卷积方法,将权值与其他方法进行比较,降低了模型的重构误差。文献[5]利用sobel核来计算横向梯度和纵向梯度矩阵,并结合模糊逻辑系统提升模型的识别性能。文献[6]为了获取数据的多个维度的特征,设置了多个不同大小的卷积核,在处理不同大小的输入数据时提高了模型对特征的提取性能。文献[7]在不同的卷积层中根据网络训练情况调整卷积核大小,使用了5×5和11×11等大小的卷积核,加强对特征的提取效果。文献[8]对AlexNet结构进行改进并对卷积核进行可视化,使用卷积核学习模型的特征,进一步提升模型性能,但卷积核的大小需要手动设置,消耗人力和时间。
本文根据以上的研究,利用卷积核学习模型的参数,改进CNN的损失函数和卷积核大小,提出最大相似损失MSLoss函数,结合CNN反向更新时的参数和闵氏距离(Minkowski Distance),提出自适应卷积核算法ACKS,将其运用到CNN中,文中使用MSLoss和ACKS的CNN分别称为MSLoss-CNN和ACKS-CNN。
1 MSLoss
1.1 MSLoss流程
MSLoss的计算流程如图1所示。在CNN的全连接层得到预测值,计算预测值与真实值的最大子序列(Longest Common Subsequence,LCS),根据最大子序列计算MSLoss,然后与阈值比较来决定网络是否继续更新,若继续更新则会在下一轮迭代中计算新的MSLoss,若停止更新则迭代结束。
图1 MSLoss计算流程
1.2 最大子序列
设有两条相同长度的序列,序列1:ABCTHUJKLM和序列2:BTAHBKATEL。序列1有TH、CUL等子序列,序列2有AB、KTE等子序列,序列1与序列2有一个相同的子序列BTHKL,元素个数为5,而两个序列里没有元素相同且个数大于5的子序列,那么该子序列称为最大子序列[9]。最大子序列可以使用动态规划[10]来求解。动态规划是将复杂问题分解成数个子问题,依次求解子问题,根据解的规律和联系得出原复杂问题的解。使用动态规划可以减少复杂问题的计算量。
假设两个字符串分别为s和t,s[i]和t[j]分别表示其第i和第j个字符,字符的下标值从0开始,若有以s[i]和t[j]为结尾的子串,计算这些子串的长度,L[i,j]表示其中的最大值,可以得出L[i,j]和L[i+1,j+1]之间的关系,因为两者只差s[i+1]和t[j+1]这一对字符,若s[i+1]和t[j+1]不同,则L[i+1,j+1]为0,而如果s[i+1]和t[j+1]相同,则求解出s[i]和t[j]的LCS,在该LCS后加上s[i+1]或t[j+1]。合并上述两种情况,得到L[i+1,j+1]=(s[i]==t[j]?L[i,j]+1:0)这样的关系,公式如式(1)所示。
(1)
图2为求解LCS的过程。在求解出LCS的长度之后使用回溯法可以求出LCS的具体字符。图2中回溯到t[9]时,由于t[9]≠s[9],所以L[9,9]的值由L[8,9]和L[9,8]中最大的一个决定,即由L[8,9]决定,继续回溯,由于s[8]=t[9],则L[8,9]由L[7,8]决定,所以L[7,8]=4,根据以上过程不断回溯,经过的路径如图2中的箭头所示。LCS中包含的字符为路径经过的字符BTHKL。
图2 回溯法计算LCS
1.3 MSLoss推导
从LCS算法的推导过程中可以得到值L[i,j]和具体字符w,可以利用这两个值计算真实值与预测值的误差,从而改善判断模型性能。MSLoss把二维平面上两点的闵氏距离和LCS中的字符长度以及具体字符相结合来评估模型的拟合情况。欧氏距离如式(2)所示。
(2)
将欧氏距离中的变量进行替换,得到MSLoss,如式(3)所示。
(3)
式中:LCS为最大子序列的具体字符;w为实际的输入序列;L为LCS的长度;N为输入和预测序列的总长度。输入与预测序列相似度越高,L-N越小。因为LCS和w为具体的字符元素,所以使用“异或”来表示两者的相似度,若两个操作数不同则为1,相同则为0,所以LCS⊕w越小,LCS和w相似程度越大。若L-N和LCS⊕w越小,表示输入序列和预测序列的长度和字符元素越相似,则MSLoss越小,输入序列和预测序列的相关程度越高。
2 ACKS算法
2.1 算法基本原则
ACKS算法的基本原则如下:
(1)若CNN的卷积层有多个不同大小的卷积核,网络更新一次后计算参数的梯度,若某个参数的梯度接近参数的均值,则当前大小的卷积核已经提取到了足够的数据特征。这时若保持该大小不变,可能会导致重复提取相同的数据特征,造成计算资源的浪费,增加运算时间影响模型识别效果,此时应减小卷积核的大小,提高特征的提取效率和模型的识别率。
(2)若网络更新一次后某个参数的梯度接近与参数的均值差值较大,则当前大小的卷积核未能提取到足够的数据特征。这时若保持该大小不变,可能会造成数据特征提取不足,导致识别率较低产生欠拟合,此时应增加卷积核的大小,提取更多数据特征,提高模型的识别率。
ACKS算法可以让卷积核根据网络更新情况改变大小,保持动态平衡,提升数据特征的提取效率以改善模型的识别性能。
2.2 算法推导
首先进行CNN网络的初始化,每个卷积核规模初始值为kcl,i,假设在CNN网络中的每一个卷积层有三个不同的卷积核k1、k2和k3,系数分别设置为kcl,i=nl,i·nl,i,i=1,2,3,也就是对应卷积核的大小。卷积层的状态z和参数W还有b的关系如式(4)所示。
zl=al-1×Wl+b
(4)
可以求得卷积层参数W的梯度如式(5)所示。
(5)
(6)
(7)
(8)
更新后的卷积核大小如式(9)所示。
(9)
把式(5)和式(7)代入式(9)中,可得ACKS算法中卷积核大小改变后的大小如式(10)所示。
(10)
从式(10)可知,ACKS算法利用网络更新时参数的梯度与对应的闵氏距离来动态改变卷积核的大小,从而可以自适应地改变卷积核对特征的提取能力。ACKS的计算过程如下:
Step1通过卷积核计算特征图;
Step2计算闵氏距离dl,i;
Step3在全连接层后计算损失函数;
Step7改变卷积核大小后继续迭代。
算法流程如图3所示。
图3 ACKS算法的流程
图4 ACKS-CNN网络更新过程
3 实验流程与结果分析
3.1 实验流程
使用TensorFlow和Librosa框架进行实验分析。加速显卡为NVIDIA MX150,处理器为Intel i5-8250u,8 GB DDR4内存,内存频率为1 600 MHz。本次实验使用ST American English语音数据集。将数据集按照7 ∶3的比例分为训练集和验证集,使用Librosa对数据进行低频采样、预加重、分帧加窗,使用端点检测进行背景噪声的去噪处理,采样频率为8 kHz,使用MFCC提取语音数据的特征[13]。选取数据集的部分数据,波形图和时频图如图5所示。
(a)语音信号波形图
语音数据预处理之后进行模型的构建,使用TensorFlow进行MSLoss-CNN、ACKS-CNN、CNN等模型的代码编写[14]。模型参数使用随机化的方法来产生初始值,模型都使用2个卷积层和2个全连接层,迭代次数设置为1 000次,比较模型在200、400、600、800和1 000次时的具体数据。LSTM、CNN和ACKS-CNN在卷积层和池化层使用ReLU作为激活函数,MSLoss-CNN使用MSLoss作为损失函数。多个模型均使用随机梯度下降SGD来优化参数,池化层使用平均池化,全连接层使用ReLU作为激活函数,使用Dropout作为全连接层的降低过拟合的方法[15]。然后进行模型训练和模型性能的比较,使用MX150 GPU加速模计算。
3.2 MSLoss-CNN结构设计
MSLoss-CNN网络结构如图6所示。
图6 MSLoss-CNN网络结构
MSLoss-CNN的损失函数为MSLoss。有两个卷积层和两个全连接层,激活函数为ReLU,池化方法为平均池化[16],在全连接层中使用Dropout方法减少过拟合。
设当MSLoss-CNN达到稳定状态时,MSLoss更新前后的差值变化小于等于1%,如式(11)所示,当MSLoss的差值变化符合式(11)时停止网络更新,MSLoss-CNN达到稳定状态。
(11)
3.3 ACKS-CNN结构设计与性能分析
ACKS-CNN的网络结构如图7所示。
图7 ACKS-CNN网络结构
ACKS-CNN包含两个卷积层以及两个全连接层,激活函数为ReLU,池化方法为平均池化,在全连接层中使用Dropout方法减少过拟合。在进行一次网络迭代后需要计算闵氏距离和网络参数及其梯度,并根据ACKS算法来更新卷积核的大小,进入下一次迭代,在卷积核的动态变化中改善网络提取特征的能力。通常使用词错误率WER和句错误率SER来评价语音识别模型识别性能。计算方法如式(12)所示。
(12)
式中:N为单词的总个数,Subs、Dels和Insers分别为替换、删除和插入的单词个数。句错误率SER代表只要出现一个错误的词,则整句话识别错误,并求出错误句子占总数的比例[17],如式(13)所示。
(13)
实验中使用CNN、CTC-CNN以及ACKS-CNN三个模型作为比较的对象,三个模型的误识别率曲线分别如图8和9所示。
图8 WER对比
CNN、CTC-CNN、ACKS-CNN的运行时间和误识别率数据如表1所示。
表1 运行时间和误识别率对比
从图8和图9可知,CNN、CTC-CNN和ACKS-CNN模型在迭代次数为700次左右时达到稳定状态,并在之后的迭代中趋于收敛,在1 000次时结束迭代。结合表1可知,ACKS-CNN在数据集上的WER和SER均低于CNN和CTC-CNN[18]。CNN中加入ACKS算法后,在误识别率曲线变化幅度较小的阶段,模型的卷积核未能有效提取数据特征,使得误识别率没有出现明显的降低,所以ACKS算法会根据网络更新的情况自适应改变卷积核的大小,提升对数据特征的提取效率,降低模型的误识别率,所以ACKS-CNN的误识别率低于其他模型。在网络迭代过程中,ACKS-CNN的曲线波动较大,不如其他模型稳定,这是因为虽然ACKS-CNN卷积核的大小会随着网络的更新动态地改变,但是在改变的过程中参数的梯度距离参数的均值较远,卷积核大小为了弥补对数据特征的提取能力而发生较为剧烈的变化,从而使模型在迭代的过程中发生了不稳定的情况,可以对ACKS-CNN卷积核的大小变化设定阈值,防止卷积核大小出现剧烈的变化,从而减少识别率曲线出现震荡的情况。
图9 SER对比
3.4 混合模型网络结构设计与性能分析
结合MSLoss可以减少迭代次数的特点,在ACKS-CNN中使用MSLoss作为损失函数来减少计算时间,产生的混合模型网络结构如图10所示。
图10 混合模型的网络结构
从图10可知,混合模型在ACKS-CNN的基础上使用MSLoss作为损失函数。混合模型与MSLoss-CNN的运行情况如表2所示。结合表1和表2可知,MSLoss-CNN可以利用输入序列和预测序列的相似度计算MSLoss,以提升模型的运算速度,所以MSLoss-CNN相比其他模型有着最低的运行时间,但因为没有使用ACKS算法,误识别率并没有明显的优势。而在ACKS-CNN中加入MSLoss后形成的混合模型,可以结合ACKS和MSLoss两者的优点,使用输入序列和预测序列的相似度减少运行时间,并根据网络更新的情况自适应提升对数据特征的提取效率,所以混合模型比ACKS-CNN运行时间减少约2%,误识别率比MSLoss-CNN低约3%。实验说明混合模型可以在减少计算量的同时提供较高的准确率。
表2 运行时间和误识别率对比
4 结 语
本文根据语音信号的时序特性,使用序列的最大子序列理论,寻找语音数据间的联系,提出了MSLoss损失函数。同时结合闵氏距离和神经网络更新时参数的梯度提出ACKS算法,把MSLoss-CNN、ACKS-CNN、CNN和CTC-CNN进行性能比较。在语音数据集上的实验表明,MSLoss-CNN可以减少模型达到稳定状态时所需的时间,ACKS-CNN的识别错误率最低,融合了ACKS和MSLoss的混合模型可以减少2%的运行时间,同时降低3%的误识别率。所以该混合模型是进行语音识别的一个可行的方法,但使用ACKS算法的模型稳定性不高,所以如何在使用ACKS算法的同时保持模型的稳定是今后研究的方向。