基于DNN-HMM的语音识别技术

基于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算法十分类似,即首先前向计算误差项,然后再进行误差的反向传播。只不过由于池化层通过下采样操作对输入数据进行了压缩,因此需要在误差的反向传播过程中,采用上采样函数将误差矩阵还原至压缩之前,并重新对误差进行分配。

原文地址:https://www.cnblogs.com/liuerdou/p/11332422.html

时间: 2024-11-05 19:44:37

基于DNN-HMM的语音识别技术的相关文章

一套基于模板匹配的语音识别技术 提取语音的特征,并建立模板库 可以将语音识别技术应用于机器人

视图类,废话少说,看看带注释的源码 #include "stdafx.h" #include "robot.h" #include"Label.h" #include "robotDoc.h" #include "robotView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE

基于80251的嵌入式语音识别

一.文档介绍 嵌入式语音识别技术在251内核的实现. 缩写.术语 解 释 Specific Person Isolated Word Speech Recognition 特定人孤立词语音识别 Endpoint detection 端点检测 Feature parameter extraction 特征参数提取 DTW (Dynamic Time Warping) 动态时间规整 LPCC 线性预测倒谱参数 二.语音识别技术介绍 1.应用分类 (1)特定人与非特定人识别,特定人识别相对简单,训练者

语音识别技术简介

在人际交往中,言语是最自然并且最直接的方式之一.随着技术的进步,越来越多的人们也期望计算机能够具备与人进行言语沟通的能力,因此,语音识别这一技术也越来越受到关注.尤其,随着深度学习技术应用在语音识别技术中,使得语音识别的性能得到了显著提升,也使得语音识别技术的普及成为了现实. 以上是废话,下面开始正文. 自动语音识别技术,简单来说其实就是利用计算机将语音信号自动转换为文本的一项技术.这项技术同时也是机器理解人类言语的第一个也是很重要的一个过程. 为了进一步解释计算机如何实现语音到文字的转换这一过

语音识别技术

通过谷歌语音接口的实现语音识别 最近在项目中有需要实现语音识别的功能.折腾了几天才搞好.刚开始做的时候没点头绪 ,网上找的资料都是乱七八糟的,要不就是非常古老的实现方法,一些简单的代码片段.所以我决定把我的经验分享给大家. 要在IOS中实现语音识别流程如下: 录音->pcm格式->转换wav->转换flac->向谷歌发送请求->等待返回的json数据->解析数据; 首先如果你要使用谷歌的接口实现语音识别必须知道下面着几点: 1.如何发送POST请求.(可以使用开源库AS

(转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不再本文的讨论范围. 一.什么是XMPP? 介 绍XMPP之前,我们先来聊聊GTalk.GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN.从技术角度来说,GTalk与QQ和MSN的差异是使用了不同的通讯协议,QQ使用了自己的私 有协议(未公开),MSN也

基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台【课程分享】

链接:http://pan.baidu.com/share/link?shareid=1334596560&uk=3611155194 密码:ffna 对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 课程讲师:IT小生 课程分类:Java 适合人群:中级 课时数量:52课时 用到技术:Hibernate.Struts.Spring.Maven.EasyUI 涉及项目:易买网电子商务 更新程度:完毕 一.易买网前台部分讲解: 第一讲: Maven初体验 第二讲:Maven打包测试

转:基于科大讯飞语音API语音识别开发详解

最近项目需要用到android语音识别,立马就想到科大讯飞,结合官方实例及阅读API文档,初步的完成了Android语音识别,下面是实现过程实录. 一.准备工作 1.你需要android手机应用开发基础 2.科大讯飞语音识别SDK android版 3.科大讯飞语音识别开发API文档 4.android手机 关于科大讯飞SDK及API文档,请到科大语音官网下载:http://open.voicecloud.cn/ 当然SDK和API有多个版本可选,按照你的需要下载,其次,下载需要填写资料申请注册

基于哈希的图像检索技术

为什么在图像检索里面使用到哈希(hashing)算法? 基于哈希算法的图像检索方法将图片的高维内容特征映射到汉明空间(二值空间)中,生成一个低维的哈希序列来表示一幅图片,降低了图像检索系统对计算机内存空间的要求,提高了检索速度,能更好的适应海量图片检索的要求. 最近或者最近邻问题在大规模的数据查询中用得非常多.但是他们都会遇到一个问题,就是"维数灾难".也就是说当数据的维数太大的时候,之前的那些索引方法(如KD树)就不能起到作用,这时候新的方法就很有必要,哈希算法满足了这个要求. ?

智能电话机器人,使用Microsoft语音识别技术(Speech sdk)

最近公司接手到了一个有挑战的项目,很有意思,拿出来和大家分享下,交流下开发过程中的一些收获和感悟. 智能电话机器人 原委是这样的,有一个大佬,手里有好多好多,总之就是好多手机充x卡,他想把这些充x卡充值到不同的用户手机号里.有的朋友接触过的,会说“可以和移动去谈,然后搞到移动的接口,根据接口开发程序,然后把充x卡密码都弄进数据库里,用程序读取,之后调用移动接口完成充值.” 说得好,漂亮!而且充x卡密码存到数据库里面这件事,大佬已经找人没日没夜加班干活全都录入到数据库里了. 但是事实很悲催,由于各