本博客适合那些BP网络很熟悉的读者

一 基本结构和前向传播

符号解释:

1. $c_{t}^{l}$:t时刻第l层的神经元的集合,因为$c_{t}^{l}$表示的是一层隐藏层,所以图中一个圆圈表示多个神经元。

2. $h_{t}^{l}$:第l层在t时刻的输出。因为$h_{t}^{l}$是一层隐藏层的输出,所以表示的是一个向量。

3. $L_{j}$:表示的是在j时刻,网络的输出的值和目标输出值的平方差,L表示的是所有时刻的平方差的和。

4. $W_{v}$:是一个矩阵,表示的是输入x到c的权值矩阵,那么他的大小是(c的维度)x(x的维度)。

5. $W_{h}$:是一个矩阵,表示的是输入同一层的上一个时刻h到c的权值矩阵,那么他的大小是(c的维度)x(h的维度)。

6. b:表示的是偏置。

(PS:个人感觉c,h和W这些符号表示的维度很重要,因为理解了维度,才能更好的理解网络的结构,才能更好的去实现这个结构。另外在这里我们要学习的参数是$W_{v}$和$W_{h}$)
图中左边的网络结构是一个RNN的时序上展开的结构,所有的列表示的是同一个神经网络,只是时间依次排开而已,紫色(横向)的箭头表示的是时序上的联系。蓝色(竖向)的箭头表示的是空间上的传播(也就是普通的前向传播),而紫色(横向)的箭头表示的上一个时刻隐藏层的输出和当前时刻上一层的输出共同组成当前隐藏层的的输入。例如:$c_{t+1}^{l+1}$表示的是t+1时刻第l+1层,那么这一层的输入是该层的上一个时刻的输出$h_{t}^{l+1}$和当前时刻的上一层的输出$h_{t+1}^{l}$共同作为$c_{t+1}^{l+1}$的输入。

图中右边的公式分别是$c_{t+1}{l}$的输入;$c_{t+1}{l}$的输入的输出,用$h_{t+1}{l}$表示;所有时刻的平方差的和。

二 梯度爆炸或梯度消失

2.1 Back-Propagation Through Time (BPTT)算法

上图左边的网络结构表示的反向传播的过程。其中绿色的表示的是时间上的反向传播的过程,红色的是同一个时刻空间上的传播的过程(其实也就是普通前馈神经网络的误差过程),

上图右边的公式表示的反向传播的计算,n个输入的误差平方和的关于每个神经元的偏导(也就是$\delta$),这个过程使用的是链式求导法则。而右边是关于$\delta_{t}^{l}$的偏导。

第一个公式:将与$\delta_{t}^{l}$同一个误差时刻(红色部分,也就是普通的前馈传播造成的误差)分离出来,其他时刻的误差(绿色部分)是时序上的,这个也是造成梯度消失或爆炸的原因。

第二个公式,$L_{t}$关于$c_{t}^{l}$的分解过程,这是BP网络的分解方式。

第三个公式,$\sum L_{j}$关于$c_{t}^{l}$的分解过程,这和BP网络的分解方式类似。

2.2 BPTT算法存在的问题

上图表示的是从$\sum L_{j}$中取出最后一个$L_{t+n}$求关于$c_{t}^{l}$,存在n个$||W_{h}||||\delta'(c_{\tau}^{l})||$相乘,一般来说$||\delta'(c_{\tau}^{l})||$小于等于0.25,如果$W_{h}$小于4,那么就会出现梯度消;如果大于4,那么就会出现梯度爆炸。

2.3 解决方法:Constant Error Carrousel (CEC)

三 基本LSTM网络的介绍

四 LSTM能解决梯度消失的原因

循环神经网络RNN的基本介绍的更多相关文章

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

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

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

    原文地址: http://blog.csdn.net/heyongluoyao8/article/details/48636251# 循环神经网络(RNN, Recurrent Neural Netw ...

  3. 通过keras例子理解LSTM 循环神经网络(RNN)

    博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...

  4. 循环神经网络RNN及LSTM

    一.循环神经网络RNN RNN综述 https://juejin.im/entry/5b97e36cf265da0aa81be239 RNN中为什么要采用tanh而不是ReLu作为激活函数?  htt ...

  5. 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别

    深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...

  6. 循环神经网络RNN模型和长短时记忆系统LSTM

    传统DNN或者CNN无法对时间序列上的变化进行建模,即当前的预测只跟当前的输入样本相关,无法建立在时间或者先后顺序上出现在当前样本之前或者之后的样本之间的联系.实际的很多场景中,样本出现的时间顺序非常 ...

  7. 从网络架构方面简析循环神经网络RNN

    一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...

  8. 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)

    Google TensorFlow程序员点赞的文章!   前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...

  9. 循环神经网络(RNN)模型与前向反向传播算法

    在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...

随机推荐

  1. ASP.NET MVC WebAPI 资源整理

    注:这是收集给公司同事学习的资料,入门级别的. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例 http://blog.csdn.net/mengzhengjie/article ...

  2. mysql 优化配置参数(my.cnf)

    max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000max_connect_errors:如果客户端尝试连接的错误数量超过这个参数设置的值, ...

  3. loadrunner 运行场景-运行时设置

    运行场景-运行时设置 by:授客 QQ:1033553122 A.   查看.修改单个脚本的运行时设置 a)   途径1: Scenario Groups.Scenario Groups Script ...

  4. 安卓开发_数据存储技术_sqlite

    一.SQLite SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了.SQLite已经被多种软件和产品使用 ...

  5. 怎么查找Jenkins的个人api token

    程序中可变部分解释:其中server.build_job方法传入的参数channel为分渠道构建参数,也即jenkins job的参数,这个参数随不同的日常job不同是不同的,实际编写脚本的过程中这个 ...

  6. JMeter—系统性能分析思路(十三)

    参考<全栈性能测试修炼宝典JMeter实战>第九章 性能监控诊断 第二节 系统性能分析思路和第三节 定位分析 系统在工作负载中的性能受到许多因素影响,处理器速度.内存容量.网络或磁盘I/O ...

  7. 使用iTextSharp导出PDF

    /// <summary> /// 导出至PDF /// </summary> /// <param name="dt">数据源</par ...

  8. Mongo学习---mongo入门1

    Docker安装以及设置mongo用户 docker pull mongo (拉取镜像 默认最新版本) docker images (查看镜像) docker run -p 27017:27017 - ...

  9. SQLite基本操作-----IOS(如有雷同,纯属巧合)

    一.常用方法 sqlite3          *db, 数据库句柄,跟文件句柄FILE很类似 sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象,用于保存编译好 ...

  10. WPF之托盘图标的设定

    首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Collections.Generic; using ...