dead ReLU的发生原因和复活问题

dead ReLU的发生原因和复活问题

先做一个假设:
假设有一个神经网络,其输入X服从某一个分布。我们看看某一个特定的ReLU激活单元R。
这个单元有一个已经固定的参数集,X的分布就关联着R的输入的分布。为了方便观察,我们假 R的输入服从一个低方差均值为+1的高斯分布。
在这个假设下:

  • 大部分R的输入为正的。

  • 大多数输入会导致ReLU函数激活。

  • 大多数输入会使反向传播回来的梯度通过R。

  • R的输入大多数情况会通过随机梯度下降反向传播更新。

现在假设在一某一次反向传播中,有一个十分巨大的梯度通过反向传播传递到了R。因为R是激活的,所以他会借助这个巨大的梯度通过反向传播算法到R得输出。这个将会导致R的前一层的给R提供输入的函数发生巨大的变化。这就意味着R的输入的分布会发生变化—我们又假设R的输入现在服从一个地方插均值为-0.1的高斯分布。
现在这个函数的情况是这样的:

  • 大多数R的输入是负值。

  • 大多数输入会导致ReLU关闭。

  • 大多数多数输入会大致梯度无法通过R反向往回传播。

  • R的输入很难再通过随机梯度下降反向传播更新了。

现在发生了什么?R的输出的分布发生一个相对比较小的改变(-0.2的一个均值改变)导致了R的行为生的巨大改变。我们跨过了零点,现在R已经几乎总是关闭的了。现在的问题是这个关闭的ReLU无法再更新他的输入参数w,所以死亡(总是关闭的)的ReLU会保持死亡。
数学上,这是因为ReLU函数长这样:

r(X) = MAX(X,0)

他的梯度长这样:

Δxr(X) = 1{X>0}

所以这个ReLU在当且仅当他在前向传播的时候没有被激活(死亡)的时候,他也会在反向传播的时候无法激活,导致其无法更新和传递梯度。这个死亡的ReLU大可能会保持死亡。

(补充:Liu Hu(不知道是哪位老师,不敢瞎翻译)提到过,是有一个办法让ReLU复活的。我们回忆一下,R的上游还有很多影响R的输入分布的参数仍然会通过网络中其他路径获得更新。例如,R的同层的其他ReLU还处于激活状态同时也还在通过反向传播正常传递梯度。这些对R的上游参数的更新可能会使R的输入分布发生重要改变,让其回到正向区间(positive regime)内。其中的细节稍微有点复杂:在一个映射层(affine layer),那些直接为R提供输入的行向量会完全不会更新知道其被激。所以一个完全死亡的ReLU只能通过前一层的线性转换层(nolinear transformation layer)来复活。但是,如果线性转换层是一个没有参数共享的特定映射,第一个隐藏层(hiden layer)的死亡ReLU是一定无法复活的。在很多情况下,这种问题需要一些实证研究)
我不确定ReLU在实际使用时死亡的频率有多高,但是显然他已经到了一个我们不得不注意他的程度了。希望你能够看见为什么相对较大的学习率最终会容易导致这个问题,从SGD步长获得的更新越大,就会有更大的风险R的输入分布会跨过零点到达负区间(negative regime)。)
最后 ,大多数情况下,ReLU死亡不会像我的例子这样清晰地分阶段完成,先是SGD步长导致一部分输入分布落入负区间,然后随后的SGD步长会把剩下的分布也打入负区间。通常情况下,你可以把R的输入分布变化看成是一种随机的事件。如果迈了一个相对大的步子,随后可能一部分ReLU会死到最后。
有一些避免非线性部分的方法可以避免这种情况(比如leaky ReLU),因为它没有导数为零的情况,但是我不完全确定我们是不是该用它。还有一种试图检测到这些死亡ReLU然后对他的输入参数进行随机的再初始化(reinitializing)–这可能会降低学习的效率但是可能会让参数的使用更有效率。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值