循环神经网络中,如果将激活函数更改为 relu 可以避免梯度消失么?为什么?

回答·14
最热
最新
  • 不能,因为 rnn 的反向传播过程中在循环部分的权值矩阵将被多次连乘,就算 relu 的梯度都是 1 也无法避免大权值连乘造成的梯度爆炸。可以通过对 rnn 的权值矩阵初始化为单位阵,偏置项初始化为零向量的方式降低梯度爆炸的概率。
  • 结论:不可以完全避免“梯度消失”但可以一部分避免;      首先,rnn(循环神经网络)为什么会出现梯度消失呢。并不是和 dnn(深度神经网络)一样(dnn“唯一的梯度”经过多次激活函数的连乘被“极大概率压缩到极小或极大”),而是多个时间上梯度通过多个激活函数传导到当前状态上,表现为“长时间的梯度”在当前运算中“所占比重极低”,因此消失的是长时间的梯度     其次,relu 怎么避免梯度消失呢。梯度通过梯度时变成负数为零正数为一的形式,这样梯度在正数时不会增加也不会减少自然不会消失或爆炸,但在负数时会出现梯度消失    此时答案出来了,relu 可以部分改变避免 rnn 的梯度消失(在正数且长时间的梯度上),但有可能导致梯度爆炸,毕竟长时间梯度没减少,短时间梯度不变,这不是总梯度大了很多嘛?     而在负数梯度时,可以采用 leaky relu;最好当然使用 lstm 和 gru 等变形的网络 >  见识浅薄,欢迎拍砖
  • 首先,此处定义的循环神经网络是简单的 RNN(Elman )。梯度消失是什么?答:随着网络层次的加深反向传播经过连续矩阵乘积运算,梯度越来越小趋近于 0,导致权重参数无法更新,模型训练实效。当然,RNN 训练过程中时间步 time-step=20 可能更长,每一个时间步中得 RNN 块共享一个统一的权重,权重初始化的时候我们希望权重越小越好但不为 0。定义激活函数 f,权重 w,偏置 b,某一时间步的输入为 x,输出为 y,则 y=f(xw+b)。[此处省略 RNN 的隐藏状态,仅为说明梯度消失]那么,反向传播过程中某一时刻的梯度 dL/dy,关于 x 和 w 的链式法则有 dy/dx=w,dy/dw=x,回传的梯度就变成了 dL/dx=dL/df·w。relu 是什么?答 f=Max(0,X),小于 0 的部分梯度为 0,大于 0 的部分导数为 1,大于 0 的部分即梯度可以无损失传播,能一定程度的减低梯度消失风险。可以参考 Talathi 2015 年的论文:improving performance of recurrent neural network with relu nonlinearity。
  • 不能避免,只能缓解。
  • 不能,Relu,当梯度为负数时候,直接把参数置 0,导致梯度消失,leaky relu 就是为了解决这个而诞生的
  • 先从问题根本入手,为什么梯度会消失?本质上是数据量和神经网络的深度之间的比例不匹配引起。在训练数据量不足而却采用大型深度模型的情况下,采用任何激活函数都只能是杯水车薪。
  • 不一定 原因:是否容易梯度消失不仅与激活函数有关,还后其他因素:权重初始化策略,是否加入调整激活值数据分布策略等 1. 权重初始化策略:  relu 的负值区域值为零,在网络层数加深后,激活值的偏向会逐渐偏大,为了使其更有广度,需要在权重初始值时需要使用专用的初始值策略如:He 初始值,这样保持各层中分布的广度相同,即时层数加深,数据广度保持不变,逆向传播,也会传递合适的值 2. 调整激活值分布策略: 使用 batch normalization 等策略可以调整各层的激活值分布使激活值拥有适当的广度,当然这样做也一定程度上缓解了对 1 中权重初始化策略的依赖
  • 无法完全避免,自然有梯度是 0 的点
  • rnn 梯度消失的原因是什么?先搞清楚这个。
  • 不会,影响非相关的件作用不大