Recurrent Neural Networks vs LSTM
Recurrent Neural Network
RNN擅长处理序列问题。下面我们就来看看RNN的原理。

可以这样描述:如上图所述,网络的每一个output都会对应一个memory单元用于存储这一时刻网络的输出值,
然后这个memory会作为下一时刻输入的一部分传入RNN,如此循环下去。
下面来看一个例子。

假设所有神经元的weight都为1,没有bias,所有激励函数都是linear,memory的初始值为0.
输入序列[1,1],[1,1],[2,2].....,来以此计算输出。
对输入[1,1],output为1×1+1×1 + 0×1 = 2->2*1+2*1 = 4,最后输出为[4,4],然后将[4,4]存入memory单元,作为下一时刻的部分输入。
最后得到的输出序列是这样的。

而如果每次输入的序列不同,最后的输出序列也会不一样。

在RNN中,每次都是使用相同的网络结构,只是每次的输入和memory会不同。
这样就使我们在句子分析中,能够辨别同一个词出现在不同位置的时候的不同意思。

当然RNN也可以是深层的网络。这里会有两种不同的RNN类型Elman和Jordan。

还有双向的RNN,可以兼顾句子的前后部分。

Long Short-term Memory (LSTM)

上面就是一个LSTM的cell的结构,每个cell有4个input, 和1个output。
其中3个input是3个gate。input gate 控制真的的input是否输入网络;
forget gate 控制memory是否要记得之前的时序信息;
output gate 控制是否输出当前的得到的output。

RNN cell的3个gate输入分别是zi,zf,zo,都是标量数据scalar,都需要通过一个激励函数f,f通常是sigmoid,可以将正负无穷的区间压缩到0~1,
模拟gate的开关。input z也是一个scalar,通过g(z)与f(zi)相乘,如果input gate关闭,就是f(zi)=0,那么输入g(z)就没有进入到cell中。
然后继续往下走,有c' = g(x)*f(zi) + c*f(zf), 如果forget gate的f(zf)为1,就相当于记得memory的值,可以加上c,然后将c‘存入到memory中。
真正的输出会是a = h(c')*f(zo),若f(zo)=0,则不输出当前值。

因为在RNN中需要处理4个input,所以参数会是传统前向传播网络的4倍。

假如上一时刻memory的值为ct-1,是一个vector,输入为xt,然后转化为4个input向量。

首先zi通过activation function与z相乘,zf通过activation function与memory中的ct-1相乘,然后把这两个结果相加,得到新的memory中的值ct,
zo通过activation function与刚刚的输出相乘得到最终的输出yt。

但是通常RNN还会将上一时刻的输出ht和memory中的值ct,再加上输入xt一起作为输入来操控RNN。如上图所示。
以上就是RNN和LSTM的基本原理。
RNN的训练
DNN和CNN都可以使用gradient decent 来训练,RNN也可以。

RNN是基于时间序列的Backpropagation through time(BPTT)。
但是训练结果通常是这样的:

RNN的total loss会发生剧烈的震荡,相当不稳定,无法收敛。

这是因为RNN的error surface 很崎岖,有平坦的地方,也有梯度很陡的地方。
这样就是梯度的变化很大,有时候参数w很小的更新就会造成很大的梯度变化,导致loss剧烈震荡。(clipping)
但是造成这种情况的原因并不是我们使用了sigmoid,而且在RNN上使用Relu往往会得到更坏的结果。

来看一个简单的例子,一个最简单的RNN。
参数w=1时,输出为1;参数w=1.01时,输出为20000.
w的变化对输出值有不同程度的影响,致使learning rate不好选择。
综上所述,RNN的训练很困难。
RNN很难训练,那有什么解决办法吗?那就是LSTM。

LSTM可以去掉error surface上“平坦”的地方,使梯度不至于特别小,这样可以解决梯度弥散的问题。
训练LSTM的时候,需要将learning rate 调整到很小。
简单的RNN每次训练后都会将memory中的信息覆盖,放入当前结果到memory中。
而LSTM是不一样的,它每次都将memory中的值乘上forget gate的值再加上input,放入cell,所以如果当前的w对memory有影响,那么这个影响将持续存在,在RNN中每个时刻的memory都会被覆盖,w的影响都不再存在。所以只要forget gate 一直打开,memory中的值都会被加到新的input中,而不会消失,这样就解决了gradient valish的问题。
Recurrent Neural Networks vs LSTM的更多相关文章
- Pixel Recurrent Neural Networks翻译
Pixel Recurrent Neural Networks 目前主要在用的文档存放: https://www.yuque.com/lart/papers/prnn github存档: https: ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)
循环神经网络(RNN, Recurrent Neural Networks)介绍 这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...
- Attention and Augmented Recurrent Neural Networks
Attention and Augmented Recurrent Neural Networks CHRIS OLAHGoogle Brain SHAN CARTERGoogle Brain Sep ...
- 第十四章——循环神经网络(Recurrent Neural Networks)(第二部分)
本章共两部分,这是第二部分: 第十四章--循环神经网络(Recurrent Neural Networks)(第一部分) 第十四章--循环神经网络(Recurrent Neural Networks) ...
- 循环神经网络(Recurrent Neural Networks, RNN)介绍
目录 1 什么是RNNs 2 RNNs能干什么 2.1 语言模型与文本生成Language Modeling and Generating Text 2.2 机器翻译Machine Translati ...
- 《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论
转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...
- 课程五(Sequence Models),第一 周(Recurrent Neural Networks) —— 1.Programming assignments:Building a recurrent neural network - step by step
Building your Recurrent Neural Network - Step by Step Welcome to Course 5's first assignment! In thi ...
- (zhuan) Attention in Long Short-Term Memory Recurrent Neural Networks
Attention in Long Short-Term Memory Recurrent Neural Networks by Jason Brownlee on June 30, 2017 in ...
- 转:RNN(Recurrent Neural Networks)
RNN(Recurrent Neural Networks)公式推导和实现 http://x-algo.cn/index.php/2016/04/25/rnn-recurrent-neural-net ...
随机推荐
- 【译】.Net 垃圾回收机制原理(转)
上一篇文章介绍了.Net 垃圾回收的基本原理和垃圾回收执行Finalize方法的内部机制:这一篇我们看下弱引用对象,代,多线程垃圾回收,大对象处理以及和垃圾回收相关的性能计数器. 让我们从弱引用对象说 ...
- elasticsearch.net search入门使用指南中文版
原文:http://edu.dmeiyang.com/book/nestusing.html elasticsearch.net为什么会有两个客户端? Elasticsearch.Net是一个非常底层 ...
- 64、具有过渡动画效果的布局Layout( 2 )
[ CoordinatorLayout-与手势完美结合的滑动视图 ] [ AppBarLayout-可以随手势滑动的AppBar ] <android.support.design.widget ...
- CNBlog客户端--第二阶段记录
开始 先给大家看一下我最近的进度,由于最近事比较多,所以这块的精力就相对较少了!但是还是有成绩的!!大家先看效果图吧! 这个优化之后的博客内容显示,还有增加了评论显示页面!! 这个是设置页面,还有一些 ...
- Windows按名称排序问题
偶然发现一个按名称排序的文件夹内,文件顺序是混乱的,例如: 在一个文件夹内建立如下三个文件: 0F.txt 1A.txt 02.txt 按名称/升序排列, 将得到上述结果,0F在最前,02在最后. 百 ...
- 【BZOJ3190】[JLOI2013]赛车 单调栈+几何
[BZOJ3190][JLOI2013]赛车 Description 这里有一辆赛车比赛正在进行,赛场上一共有N辆车,分别称为个g1,g2……gn.赛道是一条无限长的直线.最初,gi位于距离起跑线前进 ...
- [LintCode] 二叉树的后序遍历
The recursive solution is trivial and I omit it here. Iterative Solution using Stack (O(n) time and ...
- 动态获取selected的value值
两个select选项,第一个选项可以选1-9之间的数字,第二个选项可以选0到9之间的数字,要满足成人和儿童的总和不大于9,且一个成人最多带两名儿童 <div> <span>成人 ...
- wcf 开发 1
1.创建wcf应用程序 2.生成服务,启动 3.使用工具生成 文件如下: 4.新增加winform程序项目,并添加文件 service1.cs 修改app.config 5.代码调用 private ...
- Scrapy框架-scrapy框架快速入门
1.安装和文档 安装:通过pip install scrapy即可安装. Scrapy官方文档:http://doc.scrapy.org/en/latest Scrapy中文文档:http://sc ...