# RNN-BPTT
###### tags: `學習紀錄`
[toc]
---
## Before Meeting
:::success
:::
[refer](https://github.com/carefree0910/MachineLearning/blob/master/h_RNN/Playground.py)
[refer](https://zhuanlan.zhihu.com/p/26892413)
[refer]()
---
## Recent Paper
---
### RNN-BPTT
:::success
#### Abstracion
:::
:::info
#### Detail
- RNN 的“前向传导算法”
- 在说明如何进行训练之前,我们先来回顾一下 RNN 的“前向传导算法。在上一章中曾经给过一个没有激活函数和变换函数的公式:
- 
- 可以用上一章说过的那个小栗子来测试一下:
- 假设现在U, V是单位阵,W是单位阵的两倍
- 假设输入序列为:
- 
- RNN 的“反向传播算法”
- 
- 
- 
- 
- 
- 
:::
:::warning
#### Conclusion
- 指数级梯度所带来的问题
- 注意到由于 RNN 需要沿时间通道进行反向传播,其相应的“局部梯度”为:
- 
- 第二点是 LSTMs 等特殊 RNN 的做法,这里就主要说说第一点——如何选用更好的激活函数。由 NN、CNN 处的讨论不难想到,用 ReLU 作为激活函数很有可能是个不错的选择;不过由于梯度是指数级的这一点不会改变,此时我们可能就会面临另一个问题:“梯度爆炸(The Exploding Gradient)”(注:不是说 Sigmoid 系函数就不会引发梯度爆炸、因为当矩阵[公式]的元素很大时同样会爆炸,只是相对而言更容易引发梯度消失而已)。不过相比起梯度消失问题来讲,梯度爆炸相对而言要显得更“友好”一些,这是因为:
- 梯度爆炸一旦发生,是会迅速反映到结果上来的(比如一堆数变成了 NaN)
- 梯度爆炸可以通过简单的设定阈值来得到改善
- 而梯度消失相比之下,既难以直接从结果看出、又没有特别平凡的解决方案。现有的较常用的方法为调整参数的初值、进行适当的正则化、使用 ReLU(需要小心梯度爆炸)等等
- 关于为何 LSTMs 能够解决梯度消失,直观上来说就是上方时间通道是简单的线性组合、从而使得梯度不再是指数级的。详细的推导可以参见各种论文(比如说这篇),我就不在这里献丑了 ( σ'ω')σ
- 以上就大致地说了说 RNN 的 BPTT 算法,主要要注意的其实就是时间通道上的 BP 算法。如果把时间通道看成一个神经网络的话,运用局部梯度来反向传播其实相当自然
:::
[refer]()
---
:::success
#### Abstracion
:::
:::info
#### Detail
:::
:::warning
#### Conclusion
:::
[refer]()
---