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的更多相关文章

  1. Pixel Recurrent Neural Networks翻译

    Pixel Recurrent Neural Networks 目前主要在用的文档存放: https://www.yuque.com/lart/papers/prnn github存档: https: ...

  2. 循环神经网络(RNN, Recurrent Neural Networks)介绍(转载)

    循环神经网络(RNN, Recurrent Neural Networks)介绍    这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neur ...

  3. Attention and Augmented Recurrent Neural Networks

    Attention and Augmented Recurrent Neural Networks CHRIS OLAHGoogle Brain SHAN CARTERGoogle Brain Sep ...

  4. 第十四章——循环神经网络(Recurrent Neural Networks)(第二部分)

    本章共两部分,这是第二部分: 第十四章--循环神经网络(Recurrent Neural Networks)(第一部分) 第十四章--循环神经网络(Recurrent Neural Networks) ...

  5. 循环神经网络(Recurrent Neural Networks, RNN)介绍

    目录 1 什么是RNNs 2 RNNs能干什么 2.1 语言模型与文本生成Language Modeling and Generating Text 2.2 机器翻译Machine Translati ...

  6. 《转》循环神经网络(RNN, Recurrent Neural Networks)学习笔记:基础理论

    转自 http://blog.csdn.net/xingzhedai/article/details/53144126 更多参考:http://blog.csdn.net/mafeiyu80/arti ...

  7. 课程五(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 ...

  8. (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  ...

  9. 转:RNN(Recurrent Neural Networks)

    RNN(Recurrent Neural Networks)公式推导和实现 http://x-algo.cn/index.php/2016/04/25/rnn-recurrent-neural-net ...

随机推荐

  1. SurvivalShooter学习笔记(六.玩家生命)

    需求: 玩家有初始生命: 被敌人攻击后:掉血,播放受击音效,红屏(用UI图片做)闪烁提示,UI面板刷新生命 直至死亡:死亡播放死亡音效,游戏结束: 1.变量: 玩家生命 public int star ...

  2. kafka 并发数配置过程中踩到的坑 InstanceAlreadyExistsException

    ] WARN org.apache.kafka.common.utils.AppInfoParser- Error registering AppInfo mbean javax.management ...

  3. Delphi 中窗口文件与无窗口Pas文件的区别 (MTM)

    implementation {$R *.dfm}  ---- 带窗口的 dfm -- 一般的 windows 窗口 {$R *.fmx}  ---- 带窗口的 fmx -- 一般的 FireMonk ...

  4. 修改project任务的默认开始时间

    一般情况下,在project新建一个项目之后,在这个项目里每新添加一个任务,它的默认开始时间都是取的本项目的创建时间.但这可能并不是我们所需要的. 其实在这里,project取的默认开始时间都是整个项 ...

  5. 【BZOJ4676】Xor-Mul棋盘 拆位+状压DP

    [BZOJ4676]Xor-Mul棋盘 Description 一个n*m的棋盘,左上角为(1,1),右下角为(n,m).相邻的2点之间有连边(如下图中实线)特殊地,(1,i)与(n,i)也连有一条边 ...

  6. sql的case when then else end 的语法实现列转行

    SELECT * FROM test5 ; RESOURCES DATETIME CNT ID1 0 2018-01-22 4 12 0 2018-01-24 10 23 0 2018-01-25 2 ...

  7. 滚动插件 animatescroll(可以设置要滚动到位置)

     1. 引入   <script src="js/animatescroll.js"></script> 2.设置要滚动到的位置  $('目标位置').an ...

  8. 并发编程5 操作系统&进程

    一.今日大纲 1.multiprocessing模块简单应用 2.for循环创建进程 3.进程传参方式和创建方式2 4.join方法 5.操作系统基础 二.今日内容 (1)操作系统简单介绍 多道技术: ...

  9. 《挑战程序设计竞赛》2.5 最短路 AOJ0189 2249 2200 POJ3255 2139 3259 3268(5)

    AOJ0189 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0189 题意 求某一办公室到其他办公室的最短距离. 多组输入,n表示 ...

  10. [NSUserDefaults]的使用:登陆后不再显示登录界面。

    简介: NSUserDefaults是IOS应用用来存储用户偏好和配置信息的途径,就像是一个数据库,但是它通过键值对(key-value)的方式存储. 比如["Thematrix" ...