RNN结构及反BPTT向传播算法
写在前面
传统的人工神经网络(Artificial Neural Network,ANN)存在很多局限性,在不断发展中,出现了真对图像数据的卷积神经网络(Convolutional Neural Network,CNN),解决了图像数据大,权重参数过多难以训练的问题。以及针对有序序列数据的循环神经网络(Recurrent neural Network,RNN),不谋而合的是在这两种网络中都采用了权重共享,这样大大减少了网络参数过多而难以训练的问题。
循环神经网络(RNN)
传统的神经网络结构采用的是平行结构,所以无法应用于有序数据。举个例子,好比你要参加考试了,考试的内容是你这一阶段学习的内容,但是,和以前的学到的知识有没有关系?明显是有的,不然怎么说夯实基础。如果没有的话,倒是好了,直接上高中,参加高考啊!省钱省时,何乐而不为呢?而RNN的结构改变就在于除了在输入上是有先后顺序(有序序列)外,还能够用到以前的信息,从而对现在和以后的结果产生影响。(所以说基础还是很重要的,不然就输在起跑线上了)
RNN的网络结构
典型的RNN网络结构如下:
是不是有点晕?反正我一开始是晕的。上图右边是简化的结构,同样包括输入层(Input Layer)、隐藏层(Hidden Layer)和输出层(Output Layer),当然可以有多层的隐藏层。上图确实不好分析,那换种方式来看看:
清楚多了吧!
这是一个比较清楚好看清结构的图了,像不像电线桩?隐层之间的连接就是电线,时序便是电流的方向。怎么感觉跟上面的图不一样呢?其实是一样的,上面的图每个节点是一个向量,而这个图的每一个节点是向量的每一个元素。例如最底下那一层
RNN前向传播
首先我们规定一些符号:
则RNN的前向传播过程是:
(1). 隐层节点
(2). 输出节点
RNN方向传播——BPTT
有了前向传播算法,下一步则需要更新权重
L是损失函数,可以是均方损失也可以是交叉熵损失函数,
由于RNN的残差是来自己所有时刻的残差和,在进行求参数梯度的时候同样需要计算参数个时刻导数和,这是很好理解的。