参考文献如下:

(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. ViewFlipper实现自动播放的图片库

    作者实现的基础上,加上了文字的变换 public class MainActivity extends Activity { private ViewFlipper viewFlipper; priv ...

  2. (转) MVC 中 @help 用法

    ASP.NET MVC 3支持一项名为“Razor”的新视图引擎选项(除了继续支持/加强现有的.aspx视图引擎外).当编写一个视图模板时,Razor将所需的字符和击键数减少到最小,并保证一个快速.通 ...

  3. POJ3104 Drying 2017-05-09 23:33 41人阅读 评论(0) 收藏

    Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15604   Accepted: 3976 Descripti ...

  4. Hdu2952 Counting Sheep 2017-01-18 14:56 44人阅读 评论(0) 收藏

    Counting Sheep Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Tota ...

  5. c++ 64位int

    转自:https://www.byvoid.com/blog/c-int64 C/C++的64位整型 在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支持 ...

  6. [FMX]将 Android 程序切换到后台及从后台切换到前台实现

    有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元:   1 uses Androidapi.JNI.App,Andr ...

  7. SMINT:单页网站的免費jQuery插件

    最近为了做一个静态网页版的数据报告,不希望花很多时间去设计网页,或者花时间去调整布局,于是找到了一个名为Smint的免費jQuery插件.几乎不需要写什么代码就可以完成一个一页式网站.这非常适合用来制 ...

  8. mysql之使用centos7实现主从复制(读写分离)的实现过程

    什么是主从复制? 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 主从复制的作用(好处)! 1.做数据的热备,作为后备数据库,主数据库服务器故 ...

  9. 解决使用ICsharpCode解压缩时候报错Size MisMatch4294967295;的错误

    如果是一个文件夹生成的zip文件,解压缩时候不会报错. 如果是一个文件夹里面包含着两个子文件夹,而且每个子文件夹里面都有着文件.生成的zip文件在解压时候就出报这个错误. 具体的解决办法,通过网上搜索 ...

  10. 第六章 ReentrantLock源码解析2--释放锁unlock()

    最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final Reentrant ...