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 ...
随机推荐
- sql实际应用-递归查询
1.既然要谈到sql,数据库表是必须的 2.数据结构 3.获取某个节点的所有子节点 传统的写法(sql2000) 很麻烦,暂且就不写了 来看看CTE的写法 CREATE PRO ...
- PatternSyntaxException:Syntax error in regexp pattern
Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1: ...
- Android中自动跳转到系统设置界面
// 转到手机设置界面,用户设置GPS Intent intent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActi ...
- LINQPad_批量修改图片名称
用到这个工具是在后台批量修改图片名称的时候 下载并安装LINQPad. 这里要注意:在复制path路径的时候C:\xampp\htdocs\day01\angularjs_day01_am\angul ...
- Phonetic Symbols:2个半元音:[w] ,[j]
2个半元音音标发音技巧与单词举例 原文地址:http://www.hlyy.in/1243.html 2个半元音音标发音技巧与半元音单词举例 [w] 发音技巧: 嘴唇张开到刚好可以含住一根吸管的程度 ...
- MFC写入.ini文件的策略
在使用WritePrivateProfileString的时候, 如果前两个参数已经在INI文件中存在,那该函数的作用就是修改键值,即楼主说的覆盖 如果第一个参数存在,第二个参数不存在,那作用是在IN ...
- Qunit 和 jsCoverage使用方法(js单元测试)
Qunit 和 jsCoverage使用方法(js单元测试) 近日在网上浏览过很多有关js单元测试相关的文档,工具,但是,针对Qunit 和 jsCoverage使用方法,缺少详细说明,对于初入前端的 ...
- 【转】spring和springMVC的面试问题总结
1.Spring中AOP的应用场景.Aop原理.好处? 答:AOP--Aspect Oriented Programming面向切面编程:用来封装横切关注点,具体可以在下面的场景中使用: Authen ...
- Milking Time---poj3616(简单dp)
题目链接:http://poj.org/problem?id=3616 题意:人从奶牛身上挤奶有m个时间段(1----n),每个时间段包含 s e f 表示从 s 到 e 的这段时间可以获得 f 单位 ...
- Vue(3)- 安装脚手架、过滤器、生命周期的钩子函数、vue-router基本使用
一.安装脚手架 1.下载node.js,本文下载版本为node-v8.12.0-x64.msi,一键式安装. 2.安装完成后,打开终端,输入node,可进入node环境(两次ctrl+c退出),如下图 ...