CS22N 学习笔记(七)Vanishing Gradients and Fancy RNNs

Vanishing Gradients

在一个普通的RNN网络中,求下列梯度:
在这里插入图片描述
根据链式法则,可以得到:
在这里插入图片描述
如果这些 ∂ h ( i + 1 ) ∂ h ( i ) \frac{\partial h^{(i+1)}}{\partial h^{(i)}} h(i)h(i+1)导数太小就会发生梯度消失问题。
可以经过计算得到:在这里插入图片描述
将其带入链式法则的公式,会得到 W h i − j {W_h^{i-j}} Whij
根据范数的计算规则,如果该矩阵的最大特征值小于1,就会越乘越小,发生梯度消失;如果最大特征值大于1,就会越乘越大,发生梯度爆炸。

Why is vanishing gradient a problem?

梯度消失使RNN在学习使更依赖于周围的步骤,远处的信号经过多个时间步的梯度传导会变得很小。
在这里插入图片描述
在RNN中,梯度可以解释为过去时间步对现在时间步的影响。
如果梯度消失了,无法区分下面两个问题:

  1. There’s no dependency between step t and t+n in the data
  2. We have wrong parameters to capture the true dependency between t and t+n

Effect of vanishing gradient on RNN-LM

课程中举了一些例子来说明梯度消失对RNN的影响。
比如普通的RNN语言模型无法预测除这个词使ticket,因为它离我们要预测的空格太远了。
在这里插入图片描述
或者普通的RNN倾向于预测下面这种:
在这里插入图片描述
由于梯度消息,普通的RNN网络倾向于预测序列正确性而不是语法正确性。

Why is exploding gradient a problem?

如果梯度太大的话,以梯度下降为例,那每次更新的时候就会特别的大。
在这里插入图片描述
就有可能直接更新过头了,就引起震荡或者发散。
或者梯度一直变大最后程序中显示NaN或者无限大。

Gradient clipping: solution for exploding gradient

解决梯度爆炸的方法就是,每次计算梯度后加一个限幅,限制梯度过大,思路如图;
在这里插入图片描述
加上clipping的效果如图所示:
在这里插入图片描述
普通的RNN网络由于隐藏状态 h ( t ) h^{(t)} h(t)每次都被更新,因此无法很久时间步之前的信息,为例解决这个问题,又提出了其余的RNN网络。
在这里插入图片描述

Long Short-Term Memory (LSTM)

lstm中不仅仅隐藏状态 h ( t ) h^{(t)} h(t)还有 c ( t ) c^{(t)} c(t),他们是等长的向量, c ( t ) c^{(t)} c(t)中储存又长时间的信息, h ( t ) h^{(t)} h(t) c ( t ) c^{(t)} c(t)读取信息。
lstm中erased/written/read是由门控制的,他们也都是等长的向量。
如图是lstm的三个门的计算公式,从上到下依次是遗忘门,输入门,输出门

在这里插入图片描述
遗忘门:控制之前的cell状态是遗忘还是保持。
输入门:控制输出是否写入新的cell状态里面。
输出门:控制cell状态是否写入隐藏状态。
在这里插入图片描述
可以用一张图来表示lstm:
在这里插入图片描述
lstm可以将数据储存到cell状态里,这样就可以保留很久之前的时间步的信息,在一定程度上解决了梯度消失的问题。

Gated Recurrent Units (GRU)

GRU也是一种普通RNN的改进,它只有 h ( t ) h^{(t)} h(t)。他又两个门,更新门和重置门。公式如下:
在这里插入图片描述
更新门:控制哪一部分 h ( t ) h^{(t)} h(t)是更新还是保留
重置门:控制生成新的 h ( t ) h^{(t)} h(t)
在这里插入图片描述
LSTM vs GRU
lstm效果更好,但是GRU运算更快,效率更高。
通常一开是采用lstm,如果追求高效率的话切成GRU
梯度消息和爆炸不只是RNN中,各种深度网络中都存在这个问题。所以各种各样的解决方法(见ppt)。

Bidirectional RNNs

考虑的序列可能有顺序,但是普通的RNN是单向的,所以它有可能只读取前半段,从而对语言产生片面的理解。这个时候就采用双向RNN。
它的原理就建立两个RNN,一个Forward一个Backward,然后将产生的隐藏层合并如图所示:
在这里插入图片描述
公式如图所示:
在这里插入图片描述
他的一个应用要求就是你必须已知完整的数据序列,因此无法用于语言模型,但他的功能是比较厉害的,因此默认采用双向RNN。

Multi-layer RNNs

普通的RNN是只有一个时间的维度的,在每个时间点上是只有一层的,如果将每个时间点有一层变成了多层,就是Multi-layer RNNs。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值