参考文献如下:

(1) Deep Feed-Forward Sequential Memory Networks for Speech Synthesis

(2) Deep FSMN for Large Vocabulary Continuous Speech Recognition

1. cFSMN结构解析

       有了之前对FSMN结构的了解,现在看cFSMN结构就很简单。由于FSMN需要将记忆模块的输出作为下一个隐层的额外输入,这样就会引入额外的模型参数。而隐层包含的节点越多,则引入的参数越多。

       基于此,cFSMN结合矩阵低秩分解的思路,通过在网络的隐层后添加一个低维度的线性投影层,并且将记忆模块添加在这些线性投影层上。进一步的,cFSMN对记忆模块的编码公式进行了一些改变,通过将当前时刻的输出显式的添加到记忆模块的表达中,从而只需要将记忆模块的表达作为下一层的输入。这样可以有效的减少模型的参数量,加快网络的训练。具体的,单向和双向的cFSMN记忆模块的公式表达分别如下:

\[
\vec{\tilde{p}_t^l} = \vec{p_t^l}+\sum_{i=0}^{N}\vec{a_i^l}\odot \vec{p_{t-i}^l}\tag{1}
\]

\[
\vec{\tilde{p}_t^l} = \vec{p_t^l}+\sum_{i=0}^{N_1}\vec{a_i^l}\odot\vec{p_{t-i}^l}+\sum_{j=0}^{N_2}\vec{c_j^l}\odot\vec{p_{t+j}^l}\tag{2}
\]

2.DFSMN结构解析

       观察结构图可以发现,DFSMN是在cFSMN的基础上,在不同层之间的记忆模块上添加了跳转链接skip connection,从而使得低层记忆模块的输出会被直接累加到高层记忆模块里。这样在训练过程中,高层记忆模块的梯度会直接赋值给低层的记忆模块,从而可以克服由于网络的深度造成的梯度消失问题,使得可以稳定地训练深层的网络。
       并且,通过借鉴扩张卷积的思路,DFSMN在记忆模块中引入了一些步幅因子stripe,具体的计算公式如下:

\[
\vec{\tilde{p}_t^l} = H(\vec{\tilde{p}_t^{l-1}})+\vec{p_t^l}+\sum_{i=0}^{N_1^l}\vec{a_i^l}\odot\vec{p_{t-{s_1*i}}^l}+\sum_{j=0}^{N_2^l}\vec{c_j^l}\odot\vec{p_{t+{s_2*j}}^l}\tag{3}
\]

       关于变换H可以是任意的线性或者非线性函数,特别的,如果每一层的记忆模块都是相同维度的,可以直接使用恒等映射:

\[
H(\vec{\tilde{p}_t^{l-1}}) = \vec{\tilde{p}_t^{l-1}}\tag{4}
\]

       至于为什么要引入步幅因子,是因为在实际工作处理中,临近单元信息会有大量的冗余,而步幅因子就可以帮助模型适当地消除这种冗余,从而加快模型的训练。

       

DFSMN结构快速解读的更多相关文章

  1. FSMN结构快速解读

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

  2. LC-BLSTM结构快速解读

    参考文献如下: (1) A Context-Sensitive-Chunk BPTT Approach to Training Deep LSTM/BLSTM Recurrent Neural Net ...

  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. java-web的请求和响应机制中的request请求

     1 Request对象和Response对象的原理 1.1  都是由服务器创建的  我们使用它 1.2 Request对象  是获取请求消息 response对象是响应 2 request 对象的继 ...

  2. elasticsearch5安装

    环境: centos7 es 5.4.3 es安装 一.下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsear ...

  3. Django REST framework的分页

    DRF分页组件 为什么要使用分页 我们数据表中可能会有成千上万条数据,当我们访问某张表的所有数据时,我们不太可能需要一次把所有的数据都展示出来,因为数据量很大,对服务端的内存压力比较大还有就是网络传输 ...

  4. 丑数(python)

    题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数.   # ...

  5. HTMLParser和BeautifulSoup使用入门和总结

    1.HTMLParser一般这么用: from html.parser import HTMLParser from urllib import request class MyHtmlParser( ...

  6. Linux LVM磁盘管理

    几个概念: PV:物理卷,指LVM的基本逻辑卷,包含LVM的基本参数,如/dev/sdb1等. VG:卷组,类似于非LVM的硬盘,由多个PV组成. LV:逻辑卷,类似于非LVM硬盘中的分区. PE:物 ...

  7. Mac Eclipse 配置 SDK Manager Proxy (代理)

    默认的下载地址非常慢,可以换成东软的代理. 顶部任务栏中选择SDK Manager -> 偏好设置 : 可以看到下载速度快了很多,出现类很多安装选项: 安装好后,在偏好设置窗口中,选择Clear ...

  8. 分布式Snowflake雪花算法

    前言 项目中主键ID生成方式比较多,但是哪种方式更能提高的我们的工作效率.项目质量.代码实用性以及健壮性呢,下面作了一下比较,目前雪花算法的优点还是很明显的. 优缺点比较 UUID(缺点:太长.没法排 ...

  9. Android Studio 内置SDK在 unity中使用

    1 AndroidStudio 安装好后更新SDK Platforms 2 在 File -> Other Settings -> Default Project Structure 中可 ...

  10. AX_List

    List list = new List(Types::Class);  CustTable custTable;  while select custTable  {      list.addEn ...