循环神经网络

基本循环神经网络

下图是一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:

如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:

这个网络在t时刻接收到输入x_{t}之后,隐藏层的值是s_{t},输出值是o_{t}。关键一点是s_{t}的值不仅仅取决于x_{t},还取决于x_{t-1}。我们可以用下面的公式来表示循环神经网络的计算方法:

        

式1输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的权重矩阵,g是激活函数。式2是隐藏层的计算公式,它是循环层。U是输入x的权重矩阵,W是上一次的值作为这一次的输入的权重矩阵,f是激活函数

从上面的公式我们可以看出,循环层全连接层的区别就是循环层多了一个权重矩阵 W。

如果反复把式2带入到式1,我们将得到:

从上面可以看出,循环神经网络的输出值o_{t},是受前面历次输入值x_{t},x_{t-1},x_{t-2},x_{t-3},...影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。

 

双向循环神经网络

从上图可以看出,双向卷积神经网络的隐藏层要保存两个值,一个A参与正向计算,另一个值A'参与反向计算。最终的输出值y_{2}取决于A_{2}A{_{2}}^{'}。其计算方法为:

                     

A_{2}A{_{2}}^{'}则分别计算:

                        

双向循环神经网络的通用计算方法:

                          

从上面三个公式我们可以看到,正向计算和反向计算不共享权重,也就是说U和U'、W和W'、V和V'都是不同的权重矩阵

 

深度循环神经网络

前面我们介绍的循环神经网络只有一个隐藏层,我们当然也可以堆叠两个以上的隐藏层,这样就得到了深度循环神经网络。如下图所示:

 

循环神经网络的训练

循环层如下图所示:

使用前面的式2对循环层进行前向计算:

注意,上面的x_{t}s_{t}s_{t-1}都是向量,用黑体字母表示;而U、V是矩阵,用大写字母表示。向量的下标表示时刻,例如,s_{t}表示在t时刻向量s的值。

我们假设输入向量x的维度是m,输出向量s的维度是n,则矩阵U的维度是,矩阵W的维度是。下面是上式展开成矩阵的样子,看起来更直观一些:

误差项的计算

用向量net_{t}表示神经元在t时刻的加权输入,因为:

因此:

我们用a表示列向量,a^{T}用表示行向量。上式的第一项是向量函数对向量求导,其结果为Jacobian矩阵:

同理,上式第二项也是一个Jacobian矩阵:

最后,将两项合在一起,可得:

 

上式\delta描述了将沿时间往前传递一个时刻的规律,有了这个规律,我们就可以求得任意时刻\delta _{k}误差项

\delta _{k}^{T}=\left (\frac{\partial E}{\partial net_{k}} \right )^{T}

      = \delta _{t}^{T}\prod_{i=k}^{t-1}Wdiag\left [ f^{'}\left ( net_{i} \right ) \right ]      (式3)

式3就是将误差项沿时间反向传播的算法。

权重梯度的计算

现在,我们终于来到了BPTT算法的最后一步:计算每个权重的梯度。

首先,我们计算误差函数E对权重矩阵W的梯度\frac{\partial E}{\partial W}

只要知道了任意一个时刻的误差项\delta _{t},以及上一个时刻循环层的输出值s_{t-1},就可以按照下面的公式求出权重矩阵在t时刻的梯度:

我们下面可以简单推导一下式5

我们知道:

因为对W求导Ux_{t}与无关,我们不再考虑。现在,我们考虑对权重项w_{ji}求导。通过观察上式我们可以看到w_{ji}只与net_{j}^{t}有关,所以

按照上面的规律就可以生成式5里面的矩阵。

式6就是计算循环层权重矩阵W的梯度的公式。

 

式6详细推导:

                                                                

因为Ux_{t}与W完全无关,我们把它看做常量。现在,考虑第一个式子加号右边的部分,因为W和f\left ( net_{t-1}\right )都是W的函数,因此我们要用到大学里面都学过的导数乘法运算:

                                                                    

因此,上面第一个式子写成:

                                                                  

所以:

                                                        

我们先计算式7加号左边的部分。\frac{\partial W}{\partial W}矩阵对矩阵求导,其结果是一个四维张量(tensor),如下所示:

                                                       

接下来,我们知道s_{t-1} = f\left ( net_{t-1} \right ),它是一个列向量。我们让上面的四维张量与这个向量相乘,得到了一个三维张量,再左乘行向量\delta _{t}^{T},最终得到一个矩阵:

                               

接下来,我们计算式7加号右边的部分:

                              

于是,我们得到了如下递推公式:

                               

 

同权重矩阵W类似,我们可以得到权重矩阵U的计算方法。

                              

式8是误差函数在t时刻对权重矩阵U的梯度。和权重矩阵W一样,最终的梯度也是各个时刻的梯度之和:

                                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值