标准RNN的推导

1. RNN前向计算:对于如下结构,x是输入,s为隐层,o为输出,U,W,V为不同层的权值,同一类型的权连接权值相同


则 ot 可表示为


其中,g , f为输出层,隐层的激活函数,f 一般选择tanh函数,若RNN用于分类的话,g 选择softmax函数

2. RNN反向传播:BPTT算法,本质还是BP算法,因为RNN处理序列数据,所以在原有基础上增加了序列维度反向传播。BPTT的中心思想与BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。其中RNN损失为各个时间点的损失之和,故各个梯度的变化为各个时间点梯度变化之和



从上图可以看出,反向传播每计算一个隐层,都会与一个激活函数的导数相乘,而激活函数的累乘会导致梯度消失或梯度爆炸的现象发生

3. 常用的几个激活函数

(1)sigmoid函数


从图中可以看出,函数的导数取值范围为(0,0.025],反向传播时每多一个一层,梯度变化都会至少缩小四倍,传到神经网络前部很容易造成梯度消失。同时,sigmoid函数的输出不是中心对称,均大于0,称为偏移现象,这就导致后一层的神经元 将上一层输出的非0均值的信号也学习到作为此层的输入,易学习到噪声。

(2)tanh函数


从图中可以看出,tanh函数的输出关于零点中心对称,网络收敛性更好,同时,tanh函数的导数范围为(0,1],反向传播每经过一层,梯度变化较sigmoid函数慢,也就是梯度消失的速度更慢

(3)Relu函数


relu函数的导数左侧为0,右侧为1,在一定程度上避免了梯度消失的问题,但是与激活函数相乘的另一个因子在反向传播中呈现增长的趋势,则恒为1的导数容易引起梯度爆炸,而恒为0的导数有可能把神经元学死,设置合适的步长可有效避免这个问题的发生

解决梯度消失或梯度爆炸的方法主要有:
1. 选择更适合的激活函数
2. 改变传播结构

版权声明:本文为CSDN博主「杨晓茹」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42421001/article/details/81604398

最新文章