RNN介绍

     1.RNN

       RNN的英文全称是Recurrent Neural Networks,即循环神经网络,它是一种对序列数据进行建模的深度模型。序列的数据不太好用原始的神经网络处理。为了解决处理序列建模的问题,RNN引入了隐态hh可以对序列数据提取特征,通过一定的转换作为输出。常见的结构如下:

其中是h隐态,X输入,Y是输出,h_{0}为初始隐态,计算如下:

                        (1)

                           (2)

其中,式1中U是输入x的权重矩阵,W是上一次的值作为这一次的输入的权重矩阵,f是激活函数。y_{t}输出层,是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连,V是输出层的权重矩阵.

当然还有一些其他的结构:

  • 多个输入一个输出:

该表示的公式表达为:

                

                

其中T代表左后一个隐态单元

  • 一个输入多个输出

  • 共同一个输入多个输出:

该表示的公式表达为:

               

                

这种一个输入对应多个输出,常用在图像生成文字(image caption)或者类别生成语音或音乐。

上面的介绍的单层RNN结构,还有一些其他结构:

  • 多层RNN

  • Bidirectional RNN(双向卷积神经网络

  双向卷积神经网络的隐藏层要保存两个值,一个参与正向计算,另一个值参与反向计算,最终的输出值取决于这两个值得和。

      

  这里需要说明一点,上面所有的RNN中,那些隐层的权重都是共享的。

    2.RNN的反向求导

  由上面知道,前向过程中:

     

 假设输入向量x的维度是m,输出向量s的维度是n,则矩阵U的维度是n*m,矩阵W的维度是n*n,具体表述:

    

   s_{j}^{t}表示向量s的第j个元素在t时刻的值。表示输入层第i个神经元到循环层第j个神经元的权重。表示循环层第t-1时刻的第i个神经元到循环层第t个时刻的第j个神经元的权重.

 由于RNN前向过程有:

    

因此有:

    

对向量与向量的求导可以得到:

以及:

将两项合在一起,可得:

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

求得了权重矩阵W在t时刻的梯度,最终的梯度是各个时刻的梯度之和:

上面的过程只是对W进行求导得到的结果,对U求导同样能得到类似的结果:

3.RNN的梯度爆炸和消失问题

 在上式中,可以得到下面的梯度:

其中为矩阵的模,如果t-k很大的话(也就是向前看很远的时候),会导致对应的误差项的值增长或缩小的非常快,这样就会导致相应的梯度爆炸梯度消失问题(取决于大于1还是小于1)。

在处理梯度爆炸时,一般设置一个阈值,当梯度超过这个阈值,就截取为阈值的大小。

在解决梯度消失时,可进行调节的为,对应:a.对W设置好的初始化;b.式中的f一般使用的是sigmod函数,设置更好的激活函数。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值