参考文献如下:

(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%。

LC-BLSTM结构快速解读的更多相关文章

  1. DFSMN结构快速解读

    参考文献如下: (1) Deep Feed-Forward Sequential Memory Networks for Speech Synthesis (2) Deep FSMN for Larg ...

  2. FSMN结构快速解读

    参考文献如下: (1) Feedforward Sequential Memory Neural Networks without Recurrent Feedback (2) Feedforward ...

  3. 快速解读GC日志(转)

    本文是 Plumbr 发行的 Java垃圾收集手册 的部分内容.文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息.我们通过 -XX:+UseSerialGC 选项,指定JVM ...

  4. 快速解读GC日志

    本文是 Plumbr 发行的 Java垃圾收集指南 的部分内容.文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息.我们通过 -XX:+UseSerialGC 选项,指定JVM ...

  5. 快速解读linq语法

    在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  6. SqlServer字段说明查询及快速查看表结构

    SqlServer字段说明查询 SELECT t.[name] AS 表名,c.[name] AS 字段名,cast(ep.[value] )) AS [字段说明] FROM sys.tables A ...

  7. 解读Cardinality Estimation<基数估计>算法(第一部分:基本概念)

    基数计数(cardinality counting)是实际应用中一种常见的计算场景,在数据分析.网络监控及数据库优化等领域都有相关需求.精确的基数计数算法由于种种原因,在面对大数据场景时往往力不从心, ...

  8. boot.img格式文件拆解实例结构解析

    以msm8226为例,讲解android源码编译生成boot.img的结构.boot.img包括boot.img header.kernel以及ramdisk文件系统.下面是对boot.img的结构进 ...

  9. Java中系统时间的获取_currentTimeMillis()函数应用解读

    快速解读 System.currentTimeMillis()+time*1000) 的含义 一.时间的单位转换 1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)1秒=1,000,000 微 ...

随机推荐

  1. sqlserver将数据库的数据导成excel文档方法

    sqlserver将数据库的数据导成excel文档方法 最近公司需要下载uniport的数据跟之前的数据进行对比,所以避免不了需要将数据库的数据导出来,把SQLServer表中的数据导出为Excel文 ...

  2. hdu-1251(string+map)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 思路:重点是用gets输入,而且用a[20],不能直接输入string类型的. #include ...

  3. 20155336 2016-2017-2《JAVA程序设计》第六周学习总结

    20155336 2016-2017-2<JAVA程序设计>第六周学习总结 教材学习内容总结 第十章 串流(Stream): 数据有来源及目的地,衔接两者的是串流对象.如果要将数据从来源取 ...

  4. authentication 和 authorization

    单词 词性 解释 authentication n. 认证 authentic adj. 真实的 authorization n. 授权 authorise vt. 授权 authentication ...

  5. VS2013支持多字节的方法

    参考链接: https://jingyan.baidu.com/article/6181c3e06ab30f152ff1534d.html

  6. shell 脚本,将/etc/目录下所有的软链接文件输出

    #!/bin/bash # cd /etc for a in *;do if [ -L $a ];then #如果文件存在,为软链接文件且指向的是文件,则返回真 echo $a fi done 测试:

  7. springMVC 开涛 Controller接口控制器

    通过注解实现控制器类,所以不用看Controller接口了.把之前的笔记保存下. 笔记(图片):http://pan.baidu.com/s/1mgMNDna 第三章看不太懂,3.2 3.3.只了解到 ...

  8. Python学习-21.Python的代码注释

    在Python中有两种注释,一种是普通注释,另一种是文档注释. 普通注释是使用#开头 print('output something') # here is comment 而Python中多行注释也 ...

  9. WinForm如何去掉右边和下边的白边

    系统给的窗体样式都缺乏美感,想要漂亮的UI只能自己做,很容易实现 1.新建窗体,设置FormBorder为None 这时的窗体就只有一个Panel(Form自带的默认Panel),没有边框,没有标题栏 ...

  10. ASP.NET控制HTTP缓存

    请求   响应 If-Modified-Since Last-Modified If-None-Match ETag 至于Expires和Cache-Control 附上几张高手的图 Etag 在使用 ...