针对有着前后序列关系的数据,比如说随着时间变化的数据,显然使用rnn的效果会更好。

循环神经网络的简单结构如下图:简单表示是左边这幅图,展开来看就是右边对每个时刻的数据的处理。单层的RNN网络只有一个单元,前一时刻的数据输入之后得到输出结果然后再传给自己,与下一个时序的数据一块输入。

RNN的前向传播就是一个一个时序的数据输入

RNN的计算公式如下:

其中x<t>是当前时序的数据,W为权重,b为偏置,g是一个激活函数,a<t>是激活状态(相当于输出的初步结果),y<t>是最终输出

因此对于每个时序,RNN都是输入当前时序的输入x<t> 和来自之前时序的状态a<t-1>x<t>可以理解为当前的信息,而a<t-1>可以理解为对之前信息的总结。

RNN存在的问题:

随着时序长度边长,rnn的深度也就变深,这样就会产生深度学习的共同问题梯度爆炸和梯度消失,梯度爆炸可以通过剪枝来解决,而梯度消失一直是很难处理的问题,这里

出现两种RNN的改进,GRU以及LSTM,这两种改进都是加入了门结构来控制信息的更新。

首先是简单的GRU,1.在GRU中,引入了记忆细胞,以提供记忆能力,能够在当前时刻联想到之前的。

       2.在GRU中,a<t>和c<t>是相同的,但是在lstm中表达的含义是不同的,a<t>是激活值,c<t>是记忆细胞的值

       3.在GRU中,还引入了门结构,公式中的第二个就是为了给出如何更新记忆细胞的值。

       4.第三个公式可以看出,当前时刻的记忆细胞值的输入有:c-<t>以及c<t-1>和门结构

接下来是Full GRU

相比简单GRU又加入了一个门结构来控制记忆细胞的输出,r代表相关性,γr门告诉你计算出的c~<t>与c<t−1>有多大的相关性。

最后是LSTM,长短期记忆模型

经典的LSTM结构如下:

LSTM相对于GRU加入了其他的门结构,

忘记门,更新门,输出门。

计算公式如下:

LSTM加入了三个新的门结构,使模型更加完备;

遗忘门代替上面几个模型中的(1-yu),更鲜明,但是引入了更多参数,其中每个门的输入都是a<t-1>,x<t>,每个门都是一个权值偏置后再经过一个激活函数得到输出值。

为什么LSTM能够预防梯度消失?

因为我们可以清晰地看到,在LSTM的上部长期记忆c从头到尾贯穿,每次只有更新的时候才会对它进行修改。而又因为门函数是sigmoid函数的原因,所以可以对信息进行很好的保留。

RNN的深入理解的更多相关文章

  1. 【Deep Learning】RNN的直觉理解

    https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

  2. github上虽然已经有实现好的Char RNN

    前言 学习RNN的时候很多人应该都有看过Andrej Karpathy写的The Unreasonable Effectiveness of Recurrent Neural Networks,使用基 ...

  3. RNN及其变体框架

    RNN及其变体框架  含RNN推导 LSTM理解 理解LSTM网络  算法细节理解及参考文献  

  4. 机器学习- RNN以及LSTM的原理分析

    概述 RNN是递归神经网络,它提供了一种解决深度学习的另一个思路,那就是每一步的输出不仅仅跟当前这一步的输入有关,而且还跟前面和后面的输入输出有关,尤其是在一些NLP的应用中,经常会用到,例如在NLP ...

  5. [论文阅读] RNN 在阿里DIEN中的应用

    [论文阅读] RNN 在阿里DIEN中的应用 0x00 摘要 本文基于阿里推荐DIEN代码,梳理了下RNN一些概念,以及TensorFlow中的部分源码.本博客旨在帮助小伙伴们详细了解每一步骤以及为什 ...

  6. 如何简单的理解LSTM——其实没有那么复杂(转载)

    转载地址:https://www.jianshu.com/p/4b4701beba92 1.循环神经网络 人类针对每个问题的思考,一般不会是完全的从头开始思考.正如当你阅读这篇译文的时候,你会根据已经 ...

  7. 用LSTM分类 MNIST

    LSTM是RNN的一种算法, 在序列分类中比较有用.常用于语音识别,文字处理(NLP)等领域. 等同于VGG等CNN模型在在图像识别领域的位置.  本篇文章是叙述LSTM 在MNIST 手写图中的使用 ...

  8. Tensorflow应用之LSTM

    学习RNN时原理理解起来不难,但是用TensorFlow去实现时被它各种数据的shape弄得晕头转向.现在就结合一个情感分析的案例来了解一下LSTM的操作流程. 一.深度学习在自然语言处理中的应用 自 ...

  9. 使用TensorFlow动手实现一个Char-RNN

    https://blog.csdn.net/thriving_fcl/article/details/72565455 前言 学习RNN的时候很多人应该都有看过Andrej Karpathy写的The ...

随机推荐

  1. Codeforces 1132C - Painting the Fence - [前缀和优化]

    题目链接:https://codeforces.com/contest/1132/problem/C 题意: 栅栏有 $n$ 个节,有 $q$ 个人可以雇佣来涂栅栏,第 $i$ 个人可以涂第 $l_i ...

  2. tensorflow一些常用函数的使用注意

    tf.abs() 求tensor中数据的绝对值 tf.sign() 每一个数据都执行sigmod函数,得到对应的数值 tf.reduce_sum() 对不同维度数据求和.注意:1:求和每一行 0:求和 ...

  3. JSP+Servlet+JavaBean实现数据库的增删改查

    基本思想:JSP文件显示页面,使用form或href超链接传值到Servlet中方法,在Servlet方法中调用Dao层的类对象,实现对数据库里的数据的增删改查,之后重新返回到JSP输出操作完的结果. ...

  4. MySQL8.0安装连接Navicat的坑

    刚在官网装好MySQL8.0后,我的cmd识别不了启动数据库的指令 需要cd到MySQL的bin目录配置mysql mysqld --install mysqld --remove mysql -u ...

  5. Dotnetbar中如何让LabelX自动换行

    把LableX标签控件的WordWrap属性设置为true. https://zhidao.baidu.com/question/207858423.html 另外lable控件可以设置AutoSiz ...

  6. Chap4:区块链的应用技术[《区块链中文词典》维京&甲子]

  7. oracle查表技巧

    查每张表中有多少条记录 SELECT table_name,num_rows FROM user_tables order by num_rows desc; https://www.cnblogs. ...

  8. python中dict的fromkeys用法

    fromkeys是创造一个新的字典.就是事先造好一个空字典和一个列表,fromkeys会接收两个参数,第一个参数为从外部传入的可迭代对象,会将循环取出元素作为字典的key值,另外一个参数是字典的val ...

  9. kmeans笔记

    1.算法过程 a.随机选取k个初始点作为中心点 b.依次计算剩余所有点分别与哪个初始点距离较近,则该点属于哪个簇 c.移动中心点到现在的簇的中心 d.重复b,c两步,直到中心点不再变化算法结束 2.优 ...

  10. Too many connections解决方法

    在工作中,大家或许常常遇到Too many connections这个错误,这时作为DBA想进数据库管理都进不去,是非常尴尬的一件事情.当然有同学说可以修改配置文件,但是修改配置文件是需要重启mysq ...