BLSTM的训练算法、解码算法以及模型的改进
摘要
BLSTM解码时,解码器需要等待整个音频到达后才开始解码,因为时间反方向的前向传播需要末尾的历史信息。BLSTM这一延时问题使其不适用与实时语音识别。context-sensitive-chunk BLSTM(CSC-LSTM)和latency-controlled BLSTM(LC-BLSTM,延时控制-双向LSTM)都将整句切分为数个chunks。通过在每个chunk中添加左右上下文帧,并以chunk为单位进行前向计算,BLSTM的延迟可以控制为一个chunk左右的时长,并且与传统BLSTM相比,可以保持原有准确率基本不变。文本提出了两种LC-BLSTM。通过使用不同类型的神经网络拓扑以初始化BLSTM的cell状态;通过上下文帧和快速在线识别以降低计算开销。320h Swbd实验显示本文的解码速度能加速24%至61%而无识别率的损失。
在LSTM声学模型(包括其变形,比如highway LSTM网络)中,双向LSTM的识别率远远优于单向LSTM。然而双向LSTM模型的延迟极高,不适用于在线语音识别。为了克服这一限制,文献[1]、文献[2]、文献[10]和文献[11]研究了基于Chunk的训练与解码。
Chunk BPTT
文献[5]提出了Chunk BPTT。
加速BPTT训练
- 将特征序列切分为固定长度的chunks
- 将多个chunks组合为更大的batches

对Chunk大小的调优
使用一块NVIDIA GTX680 GPU对IAM手写数据集的训练时间如下:

能取得FER与训练时间之间的平衡。
epochwise BPTT
GPU的内存大小限制了一个mini-batch中的序列数(对于很长的序列来说),这会导致加速效果较差。
CSC BPTT
文献[6]提出CSC(Context-Sensitive-Chunk) BPTT训练方法以及基于CSCs的解码方法,并应用于手写识别中。




epochwise BPTT可表示为0-Full+0,由于此处的chunk即完整的帧序列
BPTT在BLSTM-HMM中的应用,以及提出了基于CSCs的解码方法
文献[7]将CSC-BPTT应用于语音识别中。
受到语音语句中协同发音的影响,每个音素的语音帧基本上只受之前和之后几帧影响。那么,就没有必要用BLSTM对整句话进行建模。因此,只需对一个较小的chunk建模即可。
帧或850毫秒。
基于CSC的解码
对于使用CSC-BPTT训练的BLSTM,待识别的语句也要使用与训练时相同的配置切分为多个CSCs。
若需要考虑到计算复杂度,那么解码时CSCs之间可以没有重叠;否则,CSCs之间可以有若干帧的重叠,以取得更高的识别率。比如:

LC-BLSTM
CSC-BLSTM未利用历史chunk的记忆状态信息,这带来了额外的计算。文献[8]提出了延时控制-BLSTM(LC-BLSTM)。在时间反向计算中,LC-BLSTM只使用修剪过的下文信息用作cell状态的初始化。



LC-BLSTM的改进
由于LC-BLSTM的时间反向计算中需要额外对右下文进行计算,这大大增加了计算量。为此,文献[9]提出了LC-BLSTM-FA、LC-BLSTM-FABDI与LC-BLSTM-FABSR
LC-BLSTM Without Forward approximation


LC-BLSTM-FA(With Forward approximation)
LC-BLSTM-FA去除了上述无用的计算

本节介绍两种效率改进的LC-BLSTM,用于快速实时在线语音识别
LC-BLSTM-FABDI(Forward Approximation and Backward DNN Initialization)


每个BLSTM层的前向计算步可以分解为:
时间正向:

时间反向:




LC-BLSTM-FABSR(Forward Approximation and Backward Simple RNN)


第二种结构被称为"forward approximation and back-

SRNN的训练需要处理长程依赖,因此容易发生梯度爆炸。为此在LC-BLSTM-FABSR的训练中,需要使用更为严格的梯度修剪以促进收敛。
实验表明,LC-BLSTM-FA的WER优于LC-BLSTM-FABDI、LC-BLSTM-FABSR,但LC-BLSTM-FABDI和LC-BLSTM-FABSR的解码速度比前者快。
参考文献
- A. Zeyer, R. Schluter, and H. Ney, "Towards online-recognition with deep bidirectional LSTM acoustic models," Proceedings of Interspeech, vol. 08-12-Sept, pp. 3424–3428, 2016.
- P. Doetsch, M. Kozielski, and H. Ney, "Fast and Robust Training of Recurrent Neural Networks for Offline Handwriting Recognition," Proceedings of International Conference on Frontiers in Handwriting Recognition, ICFHR, vol. 2014-Decem, pp. 279–284, 2014.
- K. Chen, Z.-J. Yan, and Q. Huo, "Training Deep Bidirectional LSTM Acoustic Model for LVCSR by a Context-Sensitive-Chunk BPTT Approach," in Proceedings of the Interspeech, 2015.
- A.-r. Mohamed, F. Seide, D. Yu, J. Droppo, A. Stoicke, G. Zweig, and G. Penn, "Deep bi-directional recurrent networks over spectral windows," in Automatic Speech Recognition and Understanding (ASRU), 2015 IEEE Workshop on. IEEE, 2015, pp. 78–83.
- P. Doetsch, M. Kozielski, and H. Ney, "Fast and Robust Training of Recurrent Neural Networks for Offline Handwriting Recognition," Proceedings of International Conference on Frontiers in Handwriting Recognition, ICFHR, vol. 2014-Decem, pp. 279–284, 2014.
- K. Chen, Z.-J. Yan, and Q. Huo, "A context-sensitive-chunk BPTT approach to training deep LSTM/BLSTM recurrent neural networks for offline handwriting recognition," Proc. ICDAR-2015.
- K. Chen, Z.-J. Yan, and Q. Huo, "Training Deep Bidirectional LSTM Acoustic Model for LVCSR by a Context-Sensitive-Chunk BPTT Approach," in Proceedings of the Interspeech, 2015.
- Yu Zhang, Guoguo Chen, Dong Yu, and Kaisheng Yao, "High- way long short-term memory RNNs for distant speech recog- nition," in IEEE International Conference of Acoustics,Speech and Signal Processing (ICASSP), 2016, pp. 5755–5759.
- IMPROVING LATENCY-CONTROLLED BLSTM ACOUSTIC MODELS FOR ONLINE SPEECH RECOGNITION. Shaofei Xue, Zhijie Yan, Alibaba Inc, China
BLSTM的训练算法、解码算法以及模型的改进的更多相关文章
- 条件随机场CRF(三) 模型学习与维特比算法解码
条件随机场CRF(一)从随机场到线性链条件随机场 条件随机场CRF(二) 前向后向算法评估标记序列概率 条件随机场CRF(三) 模型学习与维特比算法解码 在CRF系列的前两篇,我们总结了CRF的模型基 ...
- 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...
- 程序员训练机器学习 SVM算法分享
http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文 ...
- h.264并行解码算法3D-Wave实现(基于多核共享内存系统)
3D-Wave算法是2D-Wave的扩展.3D-Wave相对于只在帧内并行的2D-Wave来说,多了帧间并行,不用等待前一帧完成解码后才开始下一帧的解码,而是只要宏块的帧间参考部分以及帧内依赖宏块解码 ...
- h.264并行解码算法2D-Wave实现(基于多核共享内存系统)
cache-coherent shared-memory system 我们最平常使用的很多x86.arm芯片都属于多核共享内存系统,这种系统表现为多个核心能直接对同一内存进行读写访问.尽管内存的存取 ...
- h.264并行解码算法2D-Wave实现(基于多核非共享内存系统)
在<Scalable Parallel Programming Applied to H.264/AVC Decoding>书中,作者基于双芯片18核的Cell BE系统实现了2D-Wav ...
- Base64编码和解码算法
Base64么新鲜的算法了.只是假设你没从事过页面开发(或者说动态页面开发.尤其是邮箱服务),你都不怎么了解过,仅仅是听起来非常熟悉. 对于黑客来说,Base64与MD5算法有着相同的位置.由于电子邮 ...
- 记录:EM 算法估计混合高斯模型参数
当概率模型依赖于无法观测的隐性变量时,使用普通的极大似然估计法无法估计出概率模型中参数.此时需要利用优化的极大似然估计:EM算法. 在这里我只是想要使用这个EM算法估计混合高斯模型中的参数.由于直观原 ...
- Linux同步互斥(Peterson算法,生产者消费者模型)
同步 两个或两个以上随时间变化的量在变化过程中保持一定的相对关系. 互斥 对一组并发进程,一次只有一个进程能够访问一个给定的资源或执行一个给定的功能. 互斥技术可以用于解决诸如资源争用之类的冲突,还可 ...
随机推荐
- [转帖]为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
[终极解决方案]为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误.该进程 ID 为“XXXX”.数据字段包含错误号. ...
- npm install报错
npm ERR! C:\Users\xxxxxx\AppData\Roaming\npm-cache\_logs\2019-02-27T07_48_47_283Z-debug.log " ...
- spring boot Websocket(使用笔记)
使用websocket有两种方式:1是使用sockjs,2是使用h5的标准.使用Html5标准自然更方便简单,所以记录的是配合h5的使用方法. 1.pom 核心是@ServerEndpoint ...
- 1.nginx_add_after_body
语法: add_before_body uri;默认值: —配置段: http, server, location发起一个子请求,请求给定的uri,并且将内容追加到主题响应的内容之前. 语法: add ...
- tensorflow-mnist报错[WinError 10060] 由于连接方在一段时间后没有正确答复解决办法
问题原因: tensorflow提供了tensorflow.exapmles.tutorials.mnist.input_data模块下载mnist数据集.代码如下 如果path路径底下没有mnist ...
- C# 中使用面向切面编程(AOP)中实践代码整洁
1. 前言 最近在看<架构整洁之道>一书,书中反复提到了面向对象编程的 SOLID 原则(在作者的前一本书<代码整洁之道>也是被大力阐释),而面向切面编程(Aop)作为面向对象 ...
- gogs git代码管理
Gogs 是一个基于 Go语言的开源的 Git 服务端.非常轻量,安装也很简单.官网https://gogs.io/docs/installation/install_from_binary 下载后解 ...
- P1438 无聊的数列 (差分+线段树)
题目 P1438 无聊的数列 解析: 先考虑修改,用差分的基本思想,左端点加上首项\(k\),修改区间\((l,r]\)内每个数的差分数组都加上公差\(d\),最后的\(r+1\)再减去\(k+(r- ...
- 「CF#554 div2」题解
A 水题一道. 题目的大致意思就是:给你两个集合,求集合间有多少数对和是奇数. 题解,开\(4\)个桶后,求一个\(min\)就可以了. #include <bits/stdc++.h> ...
- spring启动容器加载成功后执行调用方法
需求: 由于在微服务架构中各服务之间都是通过接口调用来进行交互的,像很多的基础服务,类似字典信息其实并不需每次需要的时候再去请求接口.所以我的想法是每次启动项目的时候,容器初始化完成,就去调用一下基础 ...