DL-RNN循环神经网络原理


前言

人类的大脑可以记住之前发生的事情,并以此为基础预测之后会发生的事情。 传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题——使用电影中先前的事件推断后续的事件。 RNN 解决了这个问题。RNN 是包含循环的网络,允许信息的持久化。RNN本质上是一种变形的神经网络。

ps:阅读本文需要你已经掌握了BP神经网络的相关知识,如果还没有,请到这里了解一下

RNN模型

递归神经网络(recurrent neural network,RNN)是一种具有反馈结构的神经网络,其输出不但与当前输入和网络的权值有关,而且也与之前网络的输入有关;RNN通过添加跨越时间点的自连接隐藏层,对时间进行建模;换句话说,隐藏层的反馈,不仅仅进入输出端,而且还进入了下一时间的隐藏层,网络结构如下:
为了方便表达,我们通常也能见到如下的表达方式:
递归网络有时被描述为深度网络,其深度不仅仅发生在输入和输出之间,而且还发生在跨时间步,每个时间步可以被认为是一个层。所谓时间步就是这一时刻,下一时刻...,放在第一幅图中左右两个小神经网就可以分别理解成时间步1的时候和时间步2的时候。
那么为了方便描述整个大的RNN网络,我们使用下图所示的结构来表示RNN网络,需要注意的是在RNN中每一个时间步骤用到的参数都是一样的,但是每一个时间步的输入和输出一般情况下是不一样的。

学习方法BPTT

BPTT方法其实和神经网络的训练方法是一样的,前FP一次再BP一次,然后用梯度下降求解。先来看看FP。

前向传播算法


其中下标 i , h ,k 分别表示输入层,隐藏层,输出层,a表示未激活值,b表示激活值,b中的括号表示sigmoid函数。 可以看到输出层和普通的NN是完全一样的,接收隐藏层传入的数据并乘以参数求和,只是每一个计算出来的值都有个时间上标t,表示它是t时刻的那个节点。而隐藏层的计算就是和NN不同的地方,从之前的拓扑图也看到了,隐藏层会接受来自上一时间隐藏层传入的数据,在公式里也体现出来了:第一个求和是和NN一致的,接收来自输入层的数据,第二个是接收来自上一隐藏层的数据。上图求和函数上的I表示每个时间步输入层的神经元个数(以第一幅图为例就是2),上图求和函数上的H表示的就是每个时间步隐藏层的神经元个数(以第一幅图为例也是2)

后向传播算法


这是计算隐藏层的累积残差的公式,因为输出层和经典的NN是一回事,可以看到第一个公式括号中的两个部分,一个是接收当前时间输出层传回的残差,第二个是接收下一时间隐藏层传回的残差,看着上面的图其实非常好理解。实在不行请到这里看一下Bp相关的知识,很容易对号入座,推导过程十分相似。之后要做的任务就是使用梯度下降求解这个梯度就好了。


分享博文


评论博文


Last one :   ML-训练自己的Word2Vec模型

Next article :   ML-Softmax分类器的数学原理与统计原理