RNN与LSTM原理
Posted lookfor404
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RNN与LSTM原理相关的知识,希望对你有一定的参考价值。
下面只是我个人的理解,最近在做关于LSTM的项目,看看还能不能理解的更深入,之后还会根据项目进行更新。如果有错误还请多多指教
1. 传统神经网络
介绍递归神经网络之前我们可以先看一下传统神经网络
传统神经网络所作的这一系列的组合是对一个数据一个数据进行操作的。假设我们有100个图像数据,第一个图像被
opencv后,来到这里做一系列操作,第二个图像数据也是如此,后面以此类推。我们发现第一次输入的图像数据并不
会对第二次输入的数据造成影响,每次输入的数据都是独立地去组合参数,参数更新之间互不影响。
但在实际任务中,每个数据之间是有关系的,我们希望这个网络不仅仅是把每个数据走一遍,它还可以考虑之前的信息,
把数据之间的联系突出出来。这时候RNN(递归神经网络)派上用场了,它可以把前一层的信息利用上去。
2.RNN
input层与W1组合后得到一个中间的信息(特征)——当前输入。那么之后的输入要把前面的信息利用上,所以要指定一个W2,
W2是对中间信息的保留,在下次流程就可以利用上了。——即下一次输入时会结合保留的特征一起作为总特征。
展开来看我们发现网络有两个输入,一个是上层保留的信息,一个是当前输入输出也有两个,一个作为下次的输入信息,另一个
可以直接输出为结果,不过我们一般都是把最后一个输出作为结果。
这样一看感觉RNN很厉害,可以把之前的所有信息全部记住。但是这只是从理论上来看,实际上它并记不了那么多信息。和传统
神经网络一样,它也要反向传播优化参数,反向传播就是梯度累乘,这累乘容易出事啊,随着梯度变小,这可是越乘越小,最后发生
梯度消失现象,那么参数就无法继续更新,也就是再往后得到的梯度对整个梯度值几乎没有影响。比如说当前时刻为t,在t-4时刻发
生梯度消失,那么t-4之前也就是t-5,t-6。。。这些状态都被忽略掉了,也就是说RNN根本没有及那么多信息。这个时候我们的LSTM
(长短时记忆网络)登场了。
3.LSTM
LSTM可以说是RNN的升级版本。
RNN只有一个状态,也就是保存短期的状态(原因就是梯度消失),LSTM有两个状态,一个是保存短期的状态,另一个是cell state,
这两个组合在一起就是保存长期的状态
这两个都是LSTM的结构图,我个人是看了下面的那幅结构图才明白了Ct 很多
我们先来看LSTM结构里都有哪些东西
1. 激活函数
我们先理解激活函数,在整个网路结构里有两种激活函数,一个是sigmoid,一个是tanh。sigmoid函数是把信息压缩为0到1之间的数,
这样就可以对输入的信息进行筛选,表示门被打开的程度。tanh函数是把得到的信息进行压缩处理,起到稳定数值的作用,把值压缩在
-1到1之间,仅此而已。
2. ft ,it 是过滤器 Ct-1 ,~ct ,Ct 是长期信息,是记忆 ht-1 , ht 是短期信息
Ct-1 * ft 决定了过去记忆Ct-1有多少保留到当前记忆时刻Ct ——遗忘门——更新后的过去记忆
~ct * it 决定了当前时刻网络输入Xt 有多少保留到Ct ——输入门——更新后的当前记忆
LSTM就是在不断地更新cell state,不断地更新记忆
以上是关于RNN与LSTM原理的主要内容,如果未能解决你的问题,请参考以下文章
深度学习原理与框架-递归神经网络-RNN网络基本框架(代码?) 1.rnn.LSTMCell(生成单层LSTM) 2.rnn.DropoutWrapper(对rnn进行dropout操作) 3.tf.