标准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.改变传播结构

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值