RNN的参数共享

RNN简介

循环神经网络是一类用于处理序列数据的神经网络。就像卷积网络是专门处理网格化数据X(如一个图像)的神经网络,循环神经网络是专门用于处理序列x(1),...,x(τ)的神经网络。正如卷积网络可以很容易地扩展到具有很大宽度和高度的图像,以及处理大小可变的图像,循环网络可以扩展到更长的序列,且大多数循环网络可以处理可变长度的序列。

 

从多层网络出发到循环网络,我们需要利用20世纪80年代机器学习和统计模型早期思想的优点:在模型的不同部分共享参数。参数共享使得模型能够扩展到不同形式的样本(这里指不同长度的样本)并进行泛华。如果我们在每个时间点都有一个单独的参数,不但不能泛化到训练时没有见过的序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。

 

为了简单起见,我们说的RNN是指在序列上的操作,并且该序列在时刻t(从1到τ)包含向量x(t)。在实际情况中,循环网络通常在序列上的小批量上操作,并且小批量的每项具有不同序列长度τ。此外,RNN可以应用于跨越两个维度的空间数据(如图像)。当应用于涉及时间的数据,并且将整个序列提供给网络之前就能观察到整个序列时,网络可具有关于时间向后的连接。

 

参考链接:https://blog.csdn.net/u011974639/article/details/77377784

 

需要注意的是,那对每一个词做处理的 cell 来说,他并不是只有 1 个神经元的,而是 n 个 hidden units,这个在 tensorflow 中是可以设置的,可以看成是神经网络的宽度!

RNN 的训练

对于RNN的训练和对传统的 ANN 训练一样。同样使用 BP 误差反向传播算法,不过有一点区别。如果将 RNN 进行网络展开,那么参数 W,U,V 是共享的,而传统神经网络却不是的。并且在使用梯度下降算法中,每一步的输出不仅依赖当前步的网络,并且还用前面若干步网络的状态。比如,在 t=4 时,我们还需要向后传递三步,以及后面的三步都需要加上各种的梯度。该学习算法称为 Backpropagation Through Time (BPTT)。需要注意的是,在普通 RNN 训练中,BPTT 无法解决长时依赖问题(即当前的输出与前面很长的一段序列有关,一般超过十步就无能为力了),因为 BPTT 会带来所谓的梯度消失或梯度爆炸问题(the vanishing/exploding gradient problem)。当然,有很多方法去解决这个问题,如 LSTM 便是专门应对这种问题的。

参考链接:https://www.sohu.com/a/225389155_651893

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值