终其一生,我们只不过在寻找自己

0%

CS224n-7 梯度消失,LSTM,GRU,BLSTM

这一节因为RNN梯度消失引入了LSTM,GRU。LSTM和GRU的构造思想都是在RNN的主线内,并行一条线,传递其他信息。解决梯度问题,也可以在cell外加一条线,比如双向RNN,多层RNN。


RNN的梯度消失与爆炸:
原因:由于Wh的权值共享,当Wh的最大特征值大于大于小于1 就会造成$W_h^n$的指数,所以造成梯度消失或者爆炸

  • 梯度消失的问题:
    远处的信息(梯度)会消失,会对之后的输入没有影响

  • 梯度爆炸的问题:
    每次迈出的步太大,导致无法收敛

  • Gradient clipping:解决梯度爆炸,idea: 如果梯度大于v,那就除以v

lstm

斯坦福的课好就好在,他会告诉你每一个模型为什么诞生,解决了什么问题。
对于lstm来说,就是解决了rnn单线传输的问题,防止长期信息丢失。以及梯度消失和爆炸。
单线传输就只能杂糅之前的所有信息,而lstm就可以有两条线C和H。

这张图包含了所有信息。

  • 三个门:forget,input,output只是抽象出来的概念,通过各自共享的参数W,U,b来输入一个0-1的数值,辅助向下。
  • 其中c是用来更新“记忆”
  • h用来作为隐藏层,和rnn的单线传播一样

为何门控要用sigmoid,传播要用tanh?

Sigmoid的输出在0-1之同,符合门控的物理定义,且当输入较大或较小时,其输出会非常接近1或0,从而保证该门开或关,在生成候选记亿时,使用tanh函数,是因为其输出在-1-1之间,这与大多数场景下特征分布是0中心的吻合。此外,tanh函数在输入为0近相比 Sigmoid函数有更大的梯度,通常使模型收敛更快。

GRU

GRU是lstm的简化,只有两个门,减少了参数。也没有了cell state。
rt用来控制上一轮的h在这轮的输入大小,ut控制新旧的比例。
这里巧妙的地方在于ut。新的和旧的权重和为1。

LSTM vs GRU

两个差不多,效果上没有明显差别。
一般先尝试LSTM。

其他思路解决梯度消失/爆炸问题:

首先,要明确,梯度的消失爆炸不仅仅是rnn,任何deepmodel在深度方面都会面临,而简单rnn是长度上的梯度问题。

解决思路1 Residual connections

skip connection 跨越隐藏层链接。

思路2 Dence Connect

也就是中间层相互链接一下。连得越多,梯度问题就越复杂,越稳定。

其他两种网络

Bidirectional RNNs 双向rnn

双向rnn可以解决语言中单向歧义的问题。比如下图的“terrible”

terrible 如果单向很容易理解为负向词,但是双向,就增加了exciting的作用,似的模型更稳定。

多层rnn

rnn也可以在深度上做文章,不仅仅是长度上。但是一般来说“3-5”合适。训练一般来说是一层一层训练。

-------------    你的留言  是我更新的动力😊    -------------