![281f221a86a773cf85ead5550bb14807.png](https://i-blog.csdnimg.cn/blog_migrate/710a074fa09615d0e690947ab00cd6e7.png)
符号定义和解释
首先说明这里的推导采用的符号如下图所示:
![39713599ec1e5ce08721504ec9a1a85f.png](https://i-blog.csdnimg.cn/blog_migrate/561901b36f0d662c7181a8dec78aa668.png)
其中:
-
是第 t 个时刻的输入
-
是第 t 个时刻隐藏层的状态
-
是第 t 个时刻的输出,比如如果我们想要预测下一个词是什么,那么可以认为
-
计算方式为
,其中的函数 f 代表一个非线性函数,比如 tanh 或者 ReLU
- 第 1 个时刻对应的输入
通常初始化为零向量
-
是循环神经网络的参数,所有时刻共享,这在很大程度上减少了参数数量
如何理解
如何理解
BPTT 算法
由于循环神经网络是一种基于时序数据的网络模型,因此传统的 BP 算法并不适用于该模型的优化,循环神经网络中最常用的优化算法为 BPTT(Backpropagation Through Time) 算法。 首先我们有:
接着我们可以用交叉熵来计算每个时刻的 loss:
通常我们把每次输入的一个序列看成一个训练样本,所以就把每个时刻的交叉熵的和看成这个样本的总误差:
首先我们根据以上的定义,给出以下简化了的图片:
![451007bd43bc161c7bf4ee61ebd1d4e7.png](https://i-blog.csdnimg.cn/blog_migrate/324f99a8f483d0745de634ea074e7cf7.png)
接下来我们通过总误差计算
![175f4aea98936cdd1ddccce872805215.png](https://i-blog.csdnimg.cn/blog_migrate/1c3cbc3944ea2bcff30c2ddeb60e6b89.png)
在以上推导过程中
![637a3354bb4e598a0dfac78344380e92.png](https://i-blog.csdnimg.cn/blog_migrate/7c2906ab73b8b9b33c4f9296e93e510e.png)
形象化的图像如下图所示:
![fd4bb89fb9c351dc158d781b1958222e.png](https://i-blog.csdnimg.cn/blog_migrate/20e731abea4bd05ec2019a2189b56b2f.jpeg)
我们可以将参数 W 的表达式简化成以下形式:
![9293121e9503d50883cc11cc13e0bcd0.png](https://i-blog.csdnimg.cn/blog_migrate/09efb95ebc93af87202f285bbc9e1dfe.png)
梯度消失和梯度爆炸
首先我们从上式中可以看出,参数
我们可以发现每次向前传递误差(每次求导)都要经过(处理)一个 tanh 函数。tanh 函数的图像和 tanh 函数的导函数图像如下图所示:
![4dddaf5c01525fb3ec15629421d7a24c.png](https://i-blog.csdnimg.cn/blog_migrate/481a962ff9ad085b9f6bc756cda7bc43.png)
然后我们知道 tanh 函数的基本形式和其导数形式为:
下面展开
梯度消失
通过上图我们知道 tanh 函数的导数小于等于 1,同时如果参数 W 初始化的很小的话,那么
随着时刻向前推移(误差沿着时间向前传递),梯度是呈指数级下降的。这也就是梯度消失问题。
梯度爆炸
如果 W 初始的很大的话,那么我们可以类推出
随着时刻向前推移(误差沿着时间向前传递),梯度是呈指数级上升的。这也就是梯度爆炸的问题。
解决办法
梯度爆炸的问题可以用梯度裁剪的方式来缓解。梯度消失的问题则有以下缓解方式:
- 更换激活函数,比如可以选择 ReLU 函数。
- 更改 RNN 隐藏层的结构,比如采用 GRU 或者 LSTM 的隐藏层结构。
参考
- Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs
- Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradients
- 深度学习中的激活函数与梯度消失
欢迎关注公众号【算法小白学习笔记】,或添加个人微信 Longhao_Yi 交流~