递归神经网络引入了时序的反馈机制,在语音、音乐等时序信号的分析上有重要的意义。 
Hochreiter(应该是Schmidhuber的弟子)在1991年分析了bptt带来的梯度爆炸和消失问题,给学习算法带来了梯度 
震荡和学习困难等问题; 
Hochreater和Schmidhuber在1997年提出了LSTM的网络结构,引入CEC单元解决bptt的梯度爆炸和消失问题; 
Felix Gers(Schmidhuber是指导人之一)2001年的博士论文进一步改进了lstm的网络结构,增加了forget gate和peephole; 
Alex Graves(Schmidhuber的弟子)2006年提出了lstm的ctc训练准则

第一步:RNN->基本lstm

参考文献[1]和[2]

问题

问题一:gradient

BPTT学习算法存在梯度爆炸和消失问题(gradient blow up or vanish),简单通过local error flow分析如下: 
对RNN的隐层进行unfolding后,可以得到如下的递推关系:

ϑj(t)=f′j(netj(t))∑iwijϑi(t+1)

可以理解为t+1时刻的error通过wij传递到t时刻的j节点。 
对于t时刻的节点u,通过bptt可以传递到t-q时刻的节点u,不难得到递推关系如下:

∂ϑv(t−q)∂ϑu(t)=⎧⎩⎨f′v(netv(t−1))wuvf′v(netv(t−q))∑nlq−1=1∂ϑlq−1(t−q+1)∂ϑu(t)wlq−1vq=1q>1

由此可以递推:

∂ϑlq−1(t−q+1)∂ϑu(t)=f′lq−1(netlq−1(t−q+1))∑lq−2=1n∂ϑlq−2(t−q+2)∂ϑu(t)wlq−2lq−1
......

设lq=v以及l0=u最后可得:

∂ϑv(t−q)∂ϑu(t)=∑l1=1n...∑lq−1=1n∏m=1qf′lm(netlm(t−m))wlmlm−1

所以后面的联乘公式对于梯度的传播影响很大,如果

|f′lm(netlm(t−m))wlmlm−1|>1.0

会有梯度爆炸问题,反之,有梯度消失问题。 
直观上理解,error向后传播的时候,每向前传递一步都需要乘以对应的系数W,系数W的大小会导致梯度的异常。

问题二:conflict

  • input weight conflict 
    假设wji表示输入层到隐层之间的连接,对于有些输入希望尽可能通过,也就是wji比较大,但是另外一些无关的输入可能希望尽可能屏蔽掉,也就是wji尽可能为0。而实际网络中的wji参数是跟输入无关,对于所有的输入,它的大小是一致的。由于缺少这种自动调节功能,从而导致学习比较困难。
  • output weight conflict 
    同理,隐层到输出层之间也存在放行和屏蔽的conflict。

解决


1997年Hochreiter和Schmidhuber首先提出了LSTM的网络结构,解决了传统RNN的上面两个问题。

问题一的solution

lstm通过引入CEC(constant error carrousel)单元解决了梯度沿时间尺度unfolding带来的问题。 
首先梯度的递推关系如下:

ϑj(t)=f′j(netj(t))∑iwijϑi(t+1)

要想梯度传播没有异常的话,最容易的想法是:

f′j(netj(t))wij=1

这里进一步简化这个问题,可以如下约定:

fj(x)=x
wjj=1
wij=0(i≠j)

相比之前的RNN结构,做了如下改变: 
1. 矩阵Whh简化为对角矩阵,也就是只允许节点的自旋,不允许隐层的其他节点连接到本节点 
2. 激活函数sigmoid替换为了线性函数f(x)=x

以上两点保证了error可以无损由t时刻传递到t-1时刻,如上图中的scj(t)=scj(t−1)+gyinj,CEC是lstm的核心部件

问题二的solution

针对问题二,lstm引入了两个gate:input gate(对应图中的inj)可以控制某些输入进入cell(对应图中的cj)更新原来存储的信息,或者屏蔽输入以保持cell存储的信息不变;output gate(对应图中的outj)以控制cell的信息对输出产生多大程度的影响。 
以output gate为例,直观上可以理解为(个人理解,欢迎讨论): 
传统RNN隐层到输出层的连接是由参数wkj控制的,由于对所有的隐层输出,wkj都是一视同仁的,这对于传统的DNN模型来讲是没有问题,因为DNN模型不会考虑历史信息,DNN可以理解为一个简单的函数,一个输入有对应的输出就可以了,没有必要使用gate加以限制。 
但是对于RNN来讲,这种一视同仁则是不合理的,因为它需要存储历史信息,而且该历史信息会对当前的输出产生影响(有些时候是至关重要的影响),比如说”I grew up in France… I speak fluent French”,此时的France对French的影响将会是决定性的。所以lstm引入了gate来改善这种一视同仁的不良现状,为什么gate会改善这种不良现状呢? 
因为此时的输出结果不再只由wkj来控制了,还会受到output gate开门或者关门的影响,而output gate开门或者关门的控制权是由woutji参数以及输入x等参数控制的,所以此时的输出多了一条watchdog,参数增多了控制的将会更精确。

第二步:lstm + forget gate

参考文献[3]

问题

传统的lstm存在一个问题:随着时间序列的增多,lstm网络没有重置的机制(比如两句话合成一句话作为输入的话,希望是在第一句话结束的时候进行reset),从而导致cell state容易发生饱和,进一步会导致cell state的输出h(趋近于1)的梯度很小(sigmoid函数在x值很大的时候梯度趋向于0),阻碍了error的传入;另一方面输出h趋近于1,导致cell的输出近似等于output gate的输出,意味着网络丧失了memory的功能。

解决


在传统lstm的基础之上,引入了forget gate。使用这种结构可以让网络自动学习什么时候应该reset。具体做法即为使用yφ替换原来的CEC的常量1.0,定义如下;

netφj(t)=∑mwφjmym(t−1)
yφj(t)=fφj(netφj(t))

forget gate的引入可以解决需要内部切割(hierarchical decomposition)但又不知道切割位置的序列问题。

第三步:lstm+peephole

参考文献[3]

问题

lstm的gate的输入包含两个部分,网络输入和上一时刻(t-1)网络的输出。 
此时如果output gate关闭(值接近0)的话,网络的输出(t时刻)将为0,下一时刻(t+1)网络gate将完全跟网络输入有关,就会丢失历史信息。

解决


增加CEC到各个gate之间的连线,使得CEC(const error carrousels)和gate之间存在双向的关联,CEC收到当前时刻gate的限制,同时又会影响下一时刻的gate。 
- input gate和forget gate的输入增加一项s(t−1) 
- output gate的输入增加一项s(t)

peephole使得网络可以记录更多的时序上的关联性,有助于提取相关事件准确周期的相关信息,可以应用于音乐韵律的分析等工作。

第四步:CTC训练准则

ctc训练

参考

[1]《Untersuchungen zu dynamischen neuronalen Netzen》 Hochreiter(德文的,人家的硕士论文) 
[2]《Long Short-Term Memory》 Hochreiter, Sepp; Schmidhuber 
[3]《Long Short-Term Memory in Recurrent Neural Networks》 Felix Gers 
[4]《Supervised Sequence Labelling with Recurrent Neural Networks》 Alex Graves 
[5] http://colah.github.io/posts/2015-08-Understanding-LSTMs/

lstm(一) 演化之路的更多相关文章

  1. APP技术演化的路

    谈起APP,大家都太熟悉不过了,今天想谈谈这么多年技术演化的路. 早期一些大公司就开始做一些APP了,例如facebook.google等国外的公司就已经开发这个技术路线,那个时候的APP数量很少,基 ...

  2. Java应用架构的演化之路

    Java应用架构的演化之路 当我们架设一个系统的时候通常需要考虑到如何与其他系统交互,所以我们首先需要知道各种系统之间是如何交互的,使用何种技术实现. 1. 不同系统不同语言之间的交互 现 在我们常见 ...

  3. QPS从0到4000请求每秒,谈达达后台架构演化之路(转载)

    https://blog.csdn.net/czbing308722240/article/details/52350219 QPS从0到4000请求每秒,谈达达后台架构演化之路   达达是全国领先的 ...

  4. 大数据平台的技术演化之路 诸葛io平台设计实例

    如今,数据分析能力正逐渐成为企业发展的标配,企业通过数据分析的过程将数据中的信息提取出来,进行处理.识别.加工.呈现,最后成为指导企业业务发展的知识和智慧.而处理.识别.加工.呈现的过程从本质上来讲, ...

  5. 大型网站系统架构演化之路【mark】

    前言 一 个成熟的大型网站(如淘宝.天猫.腾讯等)的系统架构并不是一开始设计时就具备完整的高性能.高可用.高伸缩等特性的,它是随着用户量的增加,业务功能的 扩展逐渐演变完善的,在这个过程中,开发模式. ...

  6. QPS从0到4000请求每秒,谈达达后台架构演化之路

    达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含 ...

  7. ArchSummit分享 | 高德地图App架构演化与实践

    讲师介绍 郝仁杰,高德地图无线开发专家.在7月13日落幕的2019年ArchSummit峰会上就高德地图近几年的App架构演化和实践进行了分享. 背景概述 高德是国内领先的数字地图内容.导航和位置服务 ...

  8. HTML 5:你必须知道的data属性

    原文:All You Need to Know About the HTML5 Data Attribute 译文:你必须知道HTML 5 的Data属性 译者:dwqs HTML 5的Data属性可 ...

  9. 一段关于 Unix、Linux 和 Windows 的暗黑史

    “SCO 在言语上变得越来越好斗,而且还拒绝展示有关诉讼的任何证据,一切都似乎在表明,SCO只不过是在那里拉虎皮做大旗地狂言乱语.但是,微软 决不会轻易放弃这么可以一个利用这些狂言乱语的好机会.”20 ...

随机推荐

  1. HDU 3472 HS BDC (混合图的欧拉路径判断)

    HS BDC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  2. Go语言中查询SqlServer数据库

    一.Go语言中查询MsSQL数据库: // main.go package main import ( "database/sql" "fmt" "l ...

  3. 如何让PictureBox背景色透明

    winform程序中的PictureBox载入了一张带有透明度的PNG图片,悬浮于其他控件之上,但是它的背景不是透明的,即使把它的BackColor设置为Color.Transparent,或者是0x ...

  4. [廖雪峰] Git 分支管理(1):创建与合并分支(HEAD、master、dev、指针)

    每次提交,Git 都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在 Git 里,这个分支叫主分支,即 master 分支.HEAD 严格来说不是指向提交,而是指向 mas ...

  5. Linux驱动开发——指针和错误值

    参考: <Linux设备驱动程序>第三版 P294 许多内部的内核函数返回一个指针值给调用者,而这些函数中很多可能会失败.在大部分情况下,失败是通过返回一个NULL指针值来表示的.这种技巧 ...

  6. springboot中配置druid允许一次执行多条sql

    原文:https://blog.csdn.net/jiangjun0130/article/details/77868578 1:在配置文件中不需要指定wall防火墙filter. 配置如下: spr ...

  7. SQL:修复脚本的几点注意事项

    背景 系统上线之后一定会出现需求变动,某些需求变动要求会对系统数据产生影响,因此需要修复脚本,本文介绍修复脚本的几点事项. 注意事项 包含在事务中 使用事务,但是先rollback tran,在真实环 ...

  8. python笔记27-lxml.etree解析html

    前言 之前分享过一个python爬虫beautifulsoup框架可以解析html页面,最近看到lxml框架的语法更简洁,学过xpath定位的,可以立马上手. 使用环境: python 3.6 lxm ...

  9. 来自Google的TCP BBR拥塞控制算法解析

    转自:http://blog.csdn.net/dog250/article/details/52830576 写本文的初衷一部分来自于工作,更多的来自于发现国内几乎还没有中文版的关于TCP bbr算 ...

  10. Swift - 从字典(或者Alamofire)直接创建Model文件的工具

    Swift - 从字典(或者Alamofire)直接创建Model文件的工具 效果 1. 常规生成model的方式 2. 通过debug创建model的方式 特性 1. 可以处理JSON格式的字典数据 ...