1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
1.8 带有神经网络的梯度消失 Vanishing gradients with RNNs
你已经了解了RNN时如何工作的了,并且知道如何应用到具体问题上,比如命名实体识别,比如语言模型,你也看到了怎么把反向传播用于RNN。其实,基本的RNN算法还有一个很大的问题,就是梯度消失的问题。这节课我们会讨论,在下几节课我们会讨论一些方法用来解决这个问题。
如上图,你已经知道RNN就像这个样子,现在我们举个语言模型的例子。
假设你看到这个句子,
- “The cat, which already ate ……, was full.”,语法上前后应该保持一致,因为cat是单数,所以应该用was。
- “The cats, which ate ……, were full.”,cats是复数,所以用were。
这个例子中的句子有长期的依赖,最前面的单词对句子后面的单词有影响。但是我们目前见到的基本的RNN模型(如上图),不擅长捕获这种长期依赖效应,解释一下为什么。
长期的依赖:最前面的单词对句子后面的单词有影响。
你应该还记得之前讨论的训练很深的网络,我们讨论了梯度消失的问题。
梯度消失:很深的网络,反向传播,后面的输出很难影响前面的层
比如说如上图,一个很深很深的网络,100层,甚至更深。对这个网络从左到右做前向传播(蓝色线)然后再反向传播(红色线)。我们知道如果这是个很深的NN,从输出得到的梯度很难传播回去,很难影响靠前层的权重(上图左边红色圆圈),很难影响前面层的计算。
如上图,对于有同样问题的RNN,首先从左到右前向传播(蓝色线),然后反向传播(红色线)。但是反向传播会很困难,因为同样的梯度消失的问题,后面层的输出误差( y ^ < T y > \hat y^{<T_y>} y^<