基于DNN-HMM的语音识别声学模型结构如下图所示,与传统的基于GMM-HMM的声学模型相比,唯一不同点在于用DNN替换了GMM来对输入语音信号的观察概率进行建模。DNN与GMM相比具有如下优点:
- DNN不需要对声学特征所服从的分布进行假设;
- DNN的输入可以采用连续的拼接帧,因而可以更好地利用上下文的信息;
- DNN的训练过程可以采用随机优化算法来实现,而不是采用传统的批优化算法,因此当训练数据规模较大时也能进行非常高效的训练,显然,训练数据规模越大,所得到的声学模型就越精确,也就越有利于提高语音识别的性能;
- 在发音模式分类上,DNN这种区分式模型也要比GMM这种产生式模型更加合适。
DNN的输入是传统的语音波形经过加窗、分帧,然后提取出来的频谱特征,如MFCC、PLP或更底层的滤波器组(filter bank,FBK)声学特征等。FBK特征多利用Mel滤波器组在功率谱上进行滤波并计算对数能量,然后采用其规整值来表示。目前,FBK特征获得了广泛的成功,证明了原始语音频率对于基于DNN的语音识别技术的重要性。与传统的GMM采用单帧特征作为输入不同,DNN将相邻的若干帧进行拼接来得到一个包含更多信息的输入向量。研究表明,采用拼接帧作为输入是DNN相比GMM能获得明显性能提升的关键因素之一。
DNN输出向量的维度对应HMM中状态的个数,通常每一维输出对应一个绑定的triphone状态。训练时,为了得到每一帧语音在DNN上的目标输出值(标准值),需要通过事先训练好的GMM-HMM识别系统在训练语料上进行强制对齐。即要训练一个DNN-HMM声学模型,首先需要训练一个GMM-HMM声学模型,并通过基于Viterbi算法的强制对其方法给每个语音帧打上一个HMM状态标签,然后以此状态标签,训练一个基于DNN训练算法的DNN模型。最后用DNN模型替换HMM模型中计算观察概率的GMM部分,但保留转移概率和初始概率等其他部分。
早期的DNN一般采用前馈神经网络结构,其本质上是一个包含多个隐层的多层感知机。它采用层级的结构,分为输入层、隐层和输出层。相邻层的神经元节点采用全连接的方式,而在同一层的节点之间则不存在连接。隐层神经元节点的输出(激活值)是前一层输出向量和当前层网络权重的线性加权和,再通过非线性激活函数得到。对于包含L个隐层的DNN,假设其输入为\(h^0=o_t\),则各隐层的输出向量\(h^l\)可如下计算
\[ \begin{eqnarray*} & a^l & =W^lh^{l-1}+b^l,1 \leq l \leq L+1\tag{1-1}\\ & h^l & =f(a^l),1 \le l \le L\tag{1-2} \end{eqnarray*} \]
其中\(W^l\)和\(b^l\)分别表示网络第\(l\)层的权重和偏置向量。\(f(.)\)表示隐层节点的非线性激活函数。传统的DNN普遍采用\(Sigmoid()\)激活函数,其函数表达式如下
\[ f(a)=\frac{1}{1+e^{-a}}\tag{1-3} \]
DNN的输出层通常采用\(Softmax()\)函数对输入观察样本的后验概率分布进行建模,其第\(i\)维输出为
\[ y_i=P(i|o_t)=h_i^{L+1}=\frac{e^{-a_i^{L+1}}}{\mathop{\sum}_je^{-a_i^{L+1}}}\tag{1-4} \]
DNN的优化目标函数常采用最小交叉熵(cross-entropy,CE)准则和最小均方误差(mean square error,MSE)准则等。在语音识别中采用CE准则更加普遍,它可以表示为如下的优化问题
\[ \theta^*=\mathop{argmax}_\theta[-\mathop{\sum}_tlog \ y_{s(t)}]\tag{1-5} \]
其中,\(\theta=\{W^l,b^l|l=1,2,\cdots,L+1\}\),表示DNN中左右参数的集合,\(s(t)\)是声学特征向量\(o_t\)所对应的HMM状态标签。该优化问题是高维且非凸的,通常采用基于随机梯度下降的BP算法来进行优化。BP算法的核心思想是通过链式求导法则,计算出相对于目标函数的每层输出的反向传播误差信号,然后进一步得到网络参数的梯度。
研究发现,对上述神经网络采用BP算法直接进行训练往往效果不佳,这也导致了早期基于ANN的混合声学模型未能得到成功应用。究其原因在于:
- 多层神经网络参数优化是一个高维非凸优化问题,常收敛到较差的局部解,尤其是在使用随机初始化的权重参数作为学习起点的情况下,这种现象表现得更加突出;
梯度消失问题。BP算法计算出的误差会从输入层开始向下呈指数衰减,这样计算出的各层梯度也会随着深度的变化而显著下降,导致靠近输出层的隐层能够训练的比较好,而靠近输入层的隐层则几乎不能得到有效训练。
基于以上两点,有研究者提出了若干无监督的逐层预训练算法来进行网络参数的初始化,这相当于在权重参数空间寻找一个相对合理的点来作为学习过程的起点,以此来减少算法陷入局部最优的可能性。预训练步骤完成后,可以用其权重参数来对一个标准前馈DNN进行初始化,之后就可以用BP算法对DNN网络的权重参数进行精细调整。这样的与训练方法包括基于深度置信网的方法和基于深度自编码器神经网的方法等。下面着重介绍一下基于深度自编码器神经网的方法。基于深度自编码器神经网的预训练方法
深度自编码器神经网也是一种无监督模型,其输出向量与输入向量同维,训练目标是使其目标值等于输入值,即尝试逼近一个恒等函数。这样就可以将其隐层激活值看作为对原始数据的压缩标志或有效编码。通常也采用逐层贪婪训练方法来训练深度自编码器神经网。每次采用基于随机梯度下降的BP算法来训练仅一个隐层的自编码神经网,然后将其堆叠在一起构成深度网络。这样的深度自编码网络也被称为栈式自编码神经网络。其训练过程如下:先利用原始输入数据训练一个单隐层自编码器网络,学习其权重参数,从而得到第一个隐层。然后将其隐层神经元激活值组成的向量作为输入,继续训练一个新的单隐层自编码器网络,从而得到第二个隐层及其权重参数,以此类推。同样,最后增加一个Softmax层作为输出。这样也能构成一个自下而上的前馈深层且具有区分性的DNN,并能得到其网络参数的一个有效初值,可以对其进行进一步的基于BP算法的有监督精调训练。
对DNN首先进行无监督的预训练,然后进行有监督的调整是DNN-HMM声学模型能够成功应用于语音识别任务,并在性能上超越GMM-HMM的主要原因之一。无监督预训练避免了有监督训练时常常过拟合与泛化能力很差的局部极值点的问题,而逐层的贪婪训练弥补了梯度消失问题带来的影响。然而深度学习技术发展迅猛,从今年的研究进展看,预训练的重要性日益降低,原因大致有以下几点:- 使用海量数据进行训练能有效避免过拟合问题,Dropout等随机优化算法的出现,也极大地提高了DNN模型的泛化能力;
采用整流线性单元(ReLU)作为激活函数,以及采用卷积神经网络,这种深度网络结构也成功的减小了梯度消失问题的影响。下面将简要介绍一下ReLU和CNN。
ReLU
相关的研究表明,采用基于ReLU()激活函数的DNN与采用基于Sigmoid()激活函数的DNN相比,不仅可以获得更好的性能,而且不需要进行预训练,可以直接采用随机初始化。其函数表达式如下:
\[ f(a)=max(0,a)\tag{1-6} \]CNN
近年来的研究显示,基于CNN的语音声学模型与传统的DNN的模型相比,可以获得更好的性能,究其原因在于:- CNN具有局部连接和权重共享的特点,以及很好的平移不变性。因而将卷积神经网络的思想应用到语音识别的声学模型中,就可以利用卷积的不变性来克服语音信号本身的多样性,如说话人多样性(说话人自身及说话人之间)、环境的多样性等,从而增强声学模型的顽健性。
CNN也是一个更适合对大数据进行建模的深度网络结构,尤其是近几年来,以ResNet和Highway网络为代表的深度CNN的研究工作,对语音识别的研究起到了很好的作用。
CNN是一种经典的前馈神经网络,是受生物学上感受野机制启发而来。它本质上是一种基于监督学习的数学模型,由多个卷积层和池化层交替出现构成整个网络的前端,用于特征提取和表示,在后端由多个全连接层用于对提取到的局部特征进行全局上的整合与变换。网络最终输出会根据任务的不同而动态调整。与传统的DNN网络结构相比,CNN能够从大量的训练数据中提取有效且泛化能力强的特征,因而非常适合于分类任务。
一个典型的CNN网络结构如下图所示,其中卷积层是整个网络最为核心的部分,它通过卷积核对输入进行卷积操作以获取输出。这里可以将卷积操作理解为线性加权运算,卷积层的输出称之为特征图。一般会采用多个卷积核来学习不同层次的特征,这样便会得到多个特征图。不同于全连接网络,卷积层的卷积核只会与输入中的某些局部区域相连接,这样不仅能有效降低网络的连接数量,而且也可以获得丰富的局部特征。此外,同一层之间相同的卷积核会共享参数,这进一步降低了需要训练的网络参数的规模。在卷积层,特征图也要通过激活函数进行非线性处理,在CNN中一般也采用ReLU作为激活函数。
池化层又称为下采样层,他主要对上一层得到的特征图进行压缩。在实际应用中以最大池化和均匀池化最为常见。最大池化会对池化域内的特征点取最大值,而均匀池化则对池化域内的特征点取平均值。池化操作不仅能显著压缩数据规模,减少训练参数,更重要的是他能是网络获得某种不变性,以增强自身的顽健性。就语音识别而言,它能够使识别系统对因噪音带来的频率偏移,以及不同说话方式带来的平移有一定的容错能力。
全连接层就是普通的前馈网。CNN在完成卷积或者池化后一般需要接入全连接层,但在此之前需要完成光栅化操作。所谓光栅化是指将最后输出的特征图依次展开,重新构造成一个特征向量。全连接层能够将卷积和池化操作后提取到的局部特征在更高的维度上进行全局的信息整合。
CNN也是一种前馈神经网络,它的训练算法也是基于链式法则求梯度,然后用随机梯度下降方法求优。计算梯度的过程与传统的BP算法十分类似,即首先前向计算误差项,然后再进行误差的反向传播。只不过由于池化层通过下采样操作对输入数据进行了压缩,因此需要在误差的反向传播过程中,采用上采样函数将误差矩阵还原至压缩之前,并重新对误差进行分配。