参考文献如下:

(1) A Context-Sensitive-Chunk BPTT Approach to Training Deep LSTM/BLSTM Recurrent Neural Networks for Offline Handwriting Recognition

(2) Training Deep Bidirectional LSTM Acoustic Model for LVCSR by a Context-Sensitive-Chunk BPTT Approach

(3) Improving Latency-Controlled BLSTM Acoustic Models for Online Speech Recogintion

       前言       众所周知,BLSTM是双向的LSTM,它可以同时兼容上下文的信息,从而在一般序列任务上的表现很好。但是BLSTM有一个很致命的弱点,那就是因为有逆向LSTM的存在,它需要有后文的后验,使得它无法在实时的序列任务上也有好的表现。基于实时任务的需求,出现了两种BLSTM的变体——CSC-BLSTMLC-BLSTM


1. CSC-BLSTM结构解析

       CSC-BLSTM结构全名——Context-Sensitive-Chunk Bidirectional Long Short-Term Memory,是BLSTM的第一种改进版本。请看结构图:

       CSC-BLSTM首先把序列按照图示的方法分割成多组chunk,除了首尾位置,其他位置处的都是由Nl+Nc+Nr构成,分割的大小事先给定,一般选做30帧+60帧+30帧的模式。

       其核心思想在于,Nl用来初始化Nc的前向细胞层状态,Nr用来初始化Nc的后向细胞层状态。NlNr不参与误差反向传播。如下图:

       很显然,CSC-BLSTM的这种结构改进可以减小实时任务的延迟,用不着整段话都输入完毕才有结果。但是从整体上看,它是以牺牲计算量为代价的。因为与BLSTM相比,它多出了NlNr上的计算。在此基础之上,为了减少这种计算量,又出现了更加简化了的LC-BLSTM。

2. LC-BLSTM结构解析

       LC-BLSTM结构全名——Latency-Controlled Bidirectional Long Short-Term Memory,它改进了CSC-BLSTM。请看结构图:

       可以发现,相比于CSC-BLSTM,LC-BLSTM取消了Nl,只保留了Nc+Nr。但是如此在计算上必然有差异。

       原来,LC-BLSTM的计算也并不复杂,同CSC-BLSTM一样,Nr用来初始化Nc的后向细胞层状态。但是,Nc的前向细胞层状态直接由它的前一个Nc的输出状态得到。这样,相比于CSC-BLSTM,LC-BLSTM避免了Nl的计算量。

       But!!!很不幸,通过实验发现,为了保证准确率,LC-BLSTM必须要保证Nr划分的足够大,比如在原论文中,Nc=22的情况下,Nr需要有21,这几乎使得Nr需要有Nc同样的大小。在Nc=Nr=30的情况下,LC-BLSTM的计算量是传统BLSTM的两倍。

3. 改进的LC-BLSTM

       通过上述分析,LC-BLSTM的表现依然不好。阿里的研究人员改进了这个结构。他们总结LC-BLSTM的结构,多出来的计算量就在于Nr,但是Nr的作用无非两点:

  1. 用于初始化当前Nc的后向细胞状态;
  2. 用做下一层网络的输入(因为正常都会使用多层BLSTM)

       于是作者分别采用了两种简化的网络结构代替Nr的BLSTM结构。分别是LC-BLSTM-FABDILC-BLSTM-FABSR

3.1 LC-BLSTM-FABDI

       首先对于时间轴上正向移动的LSTM,去掉了Nr部分的计算。而对于时间轴上反向移动的LSTM,Nr部分的计算主要是为Nc提供cell的初始状态,作者简化了这部分的计算,使用正向全连接来代替LSTM,将f()的输出取平均后作为Nc的初始状态。

3.2 LC-BLSTM-FABSR

       首先对于时间轴上正向移动的LSTM,同样去掉了Nr部分的计算。另外作者发现对于BLSTM模型,时间轴上反向传播的LSTM不如时间轴上正向传播的LSTM重要,因此使用简单RNN模型来代替时间轴上反向传播的LSTM。

       但RNN会有梯度爆炸的问题,所以对其进行strict gradient-clipping。同时为了利用未来的信息,加入了target delay

作者在320小时的Switchboard数据集上进行测试,在不影响wer的情况下,这个两种方法的解码速度分别相对提升40%和27%。

最新文章

  1. 搭建自己的网站之一:如何在linux下使用tomcat
  2. NoSQL和Redis简介及Redis在Windows下的安装和使用教程
  3. Excel解析与导入导出
  4. Android 定时任务高度【schedule】与【scheduleAtFixedRate】差别
  5. index页面数据展示为设定的命名
  6. wordpress version
  7. Error:Could not determine Java version-- 关于Android Studio JDK设置和JVM version设置
  8. 前端面试题整理(css)
  9. ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程(转)
  10. httpd: Could not reliably determine the server's fully qualified domain name
  11. Java反射机制练习
  12. java 如何判断操作系统是Linux还是Windows
  13. 聊聊API网关的作用
  14. Group By Rollup
  15. [Objective-C语言教程]数组(14)
  16. 【转】python 退出程序的方式
  17. SQL With (递归CTE查询)
  18. 洛谷 P4148 简单题 解题报告
  19. thinkCMF----调用幻灯片
  20. HP-unix如何生成动态库?

热门文章

  1. 更新vs2017 15.9.2后,在指定-T v141_xp情况下载编译会报下面warning MSB8051
  2. 2018.10.13 bzoj4008: [HNOI2015]亚瑟王(概率dp)
  3. 2018.06.29 洛谷P1505 [国家集训队]旅游(树链剖分)
  4. 2018.08.28 集合堆栈机(模拟+STL)
  5. day4之内置函数、匿名函数,递归函数
  6. Node开发文件上传系统及向七牛云存储和亚马逊AWS S3的文件上传
  7. MySQL性能调优与架构设计——第12章 可扩展设计的基本原则
  8. HDU2976 Dropping tests 2017-05-11 18:10 39人阅读 评论(0) 收藏
  9. 基于tinyproxy搭建代理服务器
  10. hbuilder APP服务器端(C#)推送