RNN
基础
激活函数可以是tanh或relu函数(输出层的激活函数用sigmoid)
梯度消失与爆炸
- 梯度消失:在梯度反向传播过程中,后层的梯度会以连乘的方式叠加到前层导致梯度消失或者爆炸。并且无法通过加深网络改善,因为只有靠近输出的层才能有效学习。梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。
解决方法:
(1)LSTM 和GRU
两个算法在从t-1到t时间步更新时都采用了加法,加法的好处在于能防止梯度弥散,因此LSTM和GRU都比一般的RNN效果更好。
LSTM增加了更多回传梯度的路径,只要一条路径没有梯度消失,那么梯度消失的问题就得到了改善。
LSTM因为可以通过阀门记忆一些长期的信息,相应的也就保留了更多的梯度。而GRU也可通过重置和更新两个阀门保留长期的记忆,也相对解决了梯度消失的问题。
(2)残差
本质是跨层的网络连接结构,例如基础的网络结构是x—>f(x)—>loss,而梯度的传播是逆向的,如果梯度特别小,随着网络的后向传播就会出现梯度消失的问题。但现在的残差网络的结构是x—>f(x)+x—>loss,就算梯度后向传播到f(x)再到x时特别小也不用担心,因为还有一条路径是梯度值无损的传到x。
(3)Batch Normalization
相当于对每一层的输入做了一个规范化,强行把这个输入拉回标准正态分布N~(0,1)。这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数的大变化,进而梯度变大,避免产生梯度消失问题。而且梯度变化大 意味着学习收敛速度快,加快模型的训练速度。 
传统的循环神经网络梯度可以表示成连乘的形式
- 梯度爆炸:用梯度裁剪来实现,即通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比缩放。或者当梯度大于某个临界值,直接截断,用这个临界值作为梯度的大小。
RNN反向传播推导
RNN前向传播公式:
https://zhuanlan.zhihu.com/p/113109644
LSTM
激活函数选取
(1)为什么LSTM使用sigmoid和tanh作为激活函数,而不用relu函数?
遗忘门、输入门和输出门使用sigmoid函数作为激活函数;LSTM里使用的sigmoid的地方都是门,它的输出必须在[0,1]之间,所以Relu不行。
生产候选记忆时,使用双曲正切函数Tanh函数。 Tanh函数在输入为0附近相比sigmoid函数有更大的梯度,通常使模型收敛更快。
(2)对比ReLU与Sigmoid、Tanh的优缺点?
①优点
- 从计算的角度上,Sigmoid和Tanh激活函数均需要计算指数,复杂度高,而ReLU只需要一个阈值即可得到激活值;
- ReLU的非饱和性可以有效地解决梯度消失的问题,提供相对宽的激活边界。
- ReLU的单侧抑制提供了网络的稀疏表达能力。
- 修正线性单元(Rectified Linear Unit,ReLU):ReLU函数被认为有生物上的解释性,比如单侧抑制、宽兴奋边界(即兴奋程度 也可以非常高)。在生物神经网络中,同时处于兴奋状态的神经元非常稀疏。人 脑中在同一时刻大概只有1 ∼ 4%的神经元处于活跃状态。Sigmoid型激活函数会导致一个非稀疏的神经网络,而ReLU却具有很好的稀疏性,大约50%的神 经元会处于激活状态。
②缺点
- ReLU和Sigmoid一样,它们的输出是非零中心化的,给后一层的神经网络引入偏置偏移, 会影响梯度下降的效率。

- ReLU的局限性在于其训练过程中会导致神经元死亡的问题。
在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活。那么,这个神经元自身参数的梯度永远都会是 0,在以后的训练过程中永远不能被激活。这种现象称为死亡 ReLU 问题 (Dying ReLU Problem),并且也有可能会发生在其它隐藏层。
(3)为什么普通的前馈网络或 CNN 中采取ReLU不会出现梯度消失或梯度爆炸的问题呢?
因为他们每一层的权重W不同,且在初始化时是独立分布的,因此可以在一定程度上相互抵消梯度消失或爆炸问题,即使多层之后一般也不会出现数值问题。
结构
GRU

重置门
重置门决定了如何将新的输入信息与前面的记忆相结合:
使用重置门重置前一步的信息并生成候选隐藏状态信息:
更新门
更新门定义了前面记忆保存到当前时间步的量 :
更新表达式:
LSTM与GRU的区别:
- GRU和LSTM的性能在很多任务上不分伯仲。
- GRU 参数更少因此更容易收敛,但是数据集很大的情况下,LSTM表达性能更好。
- 从结构上来说,GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM则用memory cell 把hidden state 包装起来。
- GRU 并不会控制并保留内部记忆(
),且没有 LSTM 中的输出门。
- LSTM 中的输入与遗忘门对应于 GRU 的更新门,GRU的重置门直接作用于前面的隐藏状态。



