Recurrent Neural Network(RNN) - 循环神经网络(part 2)

1 训练 RNN

1.1 定义 Loss

李宏毅机器学习笔记-12.2 循环神经网络(Recurrent Neural Network-RNN)- part 2

  • 如上图中,每一个单词对应一个 Slot,将句子按顺序丢进 Network 中,产生一个输出 y,将每个 y 与预期的正确输出做 cross entropy,然后累加起来,就是最终的 Loss。(注意,顺序不能打乱)。

1.2 学习(learning)

  • 定义完 Loss funtion 以后,就可以开始训练了,这次我们用的仍然是 Backpropagation ,但是做了一点改动,所以就叫做 Backpropagetion through time(BPTT),因为我们输入的是一个时间序列,所以 BPTT 考虑了时间的影响。

  • 好的,那这个所谓的 BPTT 是怎么工作的呢?emmmm……….我也不知道,因为老师说这个不讲。反正就只要知道 RNN 是可以用 Gradient Descent 来训练就行了。

    李宏毅机器学习笔记-12.2 循环神经网络(Recurrent Neural Network-RNN)- part 2

  • 言归正传,我们开始去让 RNN 去学习,但是不幸的是,这个过程可能不会那么顺利。通常我们希望我们的学习 Loss 曲线是下面蓝色的那一条,即随着 Epoch 的增多,Total Loss 逐渐下降。然而事实是,我们现实中遇到的很有可能是绿色的那一条。

    李宏毅机器学习笔记-12.2 循环神经网络(Recurrent Neural Network-RNN)- part 2

  • 那为什么会产生上图的现象呢? 因为 RNN 某些地方的 error surface 非常的陡峭。所谓的 error surface 就是指 Total Loss 对参数变化的敏感程度。error sufface 过大就会导致在某些点上参数非常小的变化就会引起 Total Loss 的剧烈抖动。

  • 下图就代表着参数 w1,w2 对 Total Loss 的影响,在大部分地方都是平坦的,但是一旦到了某些地方,影响就变得非常陡峭,这样子就很容易导致Loss 的剧烈抖动。

    李宏毅机器学习笔记-12.2 循环神经网络(Recurrent Neural Network-RNN)- part 2

  • clipping: 用来解决上述问题的方法,非常简单粗暴。就是当 gradient 超过一定的阈值的时候,就令 gradient 等于阈值。结束。

  • 出现这一切的根源是什么? 如下图,同一个weight 在不同的时间点会被反复利用 ,所以会出现爆炸。

    李宏毅机器学习笔记-12.2 循环神经网络(Recurrent Neural Network-RNN)- part 2

1.3 解决方法

  • 使用 LSTM: 可以解决 gradient vanishing 的问题。因为 LSTM 的内存和输入是 相加 的,每个输入产生的影响会一直存在,不会突然消失 。

    李宏毅机器学习笔记-12.2 循环神经网络(Recurrent Neural Network-RNN)- part 2

  • 还有很多其他的方法,这里就不一一赘述。