交叉熵损失函数(RNN为什么会梯度消失)
梯度消失/梯度爆炸的问题不仅仅是RNN有,而是深度神经网络所面临的问题。 这里简单地介绍一下RNN和RNN梯度消失的原因。
RNN
RNN是循环神经网络的英文缩写(也是递归神经网络的英文缩写)。
RNN模型如下图所示
展开后就是
RNN的损失
贯穿一个序列中每一个元素,Wa,ba,Wy,by都是被共享的,所以交叉熵损失是
RNN的梯度消失
当RNN处理长序列的时候,通常会出现梯度消失的问题。
让我们来借助一个例子处理这个问题。假设我们正在处理语言建模问题,尝试学习两个系列:
"The cat, which already ate ........................, was full"
"The cats, which already ate ........................, were full"
这里我们需要学习的是,"was"搭配"cat","were"搭配"cats"。
普通的RNN会很难获得它们的关系。要计算单词"was",我们需要计算之后所有单词的梯度。
乘以分数往往会使梯度消失,而乘以大的数目会导致梯度爆炸。这时候有一些的权重可能没有被更新。 正如深度网络一样,很容易发生梯度消失问题。
在深层网络(反向传播)中,想要计算前面(某一层)的权重,需要计算在它之后所有层的权重,这会导致梯度消失。处理长序列的RNN也会发生类似的问题。
RNN梯度消失/梯度爆炸的对策
梯度爆炸的解决方案
- 截断反向传播。在反向的途中不更新所有权重, 不是最佳的,所有权重都不更新。
- 梯度裁剪。
梯度消失问题的解决方案
- 权重初始化,比如HE初始化。
- 回声状态网络(ECS)。
- 使用LSTM/GRU网络。
参考
个人网站博客:https://www.soaringroad.com/result/category/DeepLearning.ai
最后
根据所学的DeepLearning.ai发表一下见解,抛砖引玉,欢迎大家讨论。
