神经网络中的“垂死的ReLU”问题是什么?


118

参阅有关视觉识别的卷积神经网络的斯坦福课程笔记,一段内容如下:

“不幸的是,ReLU单元在训练过程中可能很脆弱,并且可能“死亡”。例如,流过ReLU神经元的大梯度可能导致权重更新,从而使神经元再也不会在任何数据点上激活。如果发生这种情况,那么从该点开始流过该单元的梯度将永远为零,也就是说,ReLU单元在训练过程中可能会不可逆地死亡,因为它们可能会从数据流形上脱落下来。例如,您可能会发现多达40个如果学习率设置得太高,您的网络中的%可能是“死亡”的(即永远不会在整个训练数据集中激活的神经元)。通过适当设置学习率,这通常不会成为问题。

这里的神经元死亡意味着什么?

您能否以更简单的方式提供直观的说明。


2
有人可以找到有关“死亡神经元”的科学文章的参考吗?由于这是google尝试的第一个结果,如果通过参考文献对这个问题进行编辑,那就太好了。
MarekŽidek'17

我们可以通过正则化来解决这个问题吗?
莱恩

3
Dudes我已经设法通过在每个时期为权重<= 0提供新的随机(正态分布)值来使死去的relu神经元恢复活力。随着训练持续到更高的时期,我仅将此方法与冻结不同深度的权重一起使用(I'我不确定这是否就是我们所说的相变。这真的很容易实现。
玻利

1
@boli,您可以在这里分享您的实现吗?
阿努

Answers:


120

对于任何输入,“死” ReLU始终输出相同的值(发生时为零,但这并不重要)。可能是通过为其权重学习一个较大的负偏差项来实现的。

反过来,这意味着它在区分输入之间不起作用。为了进行分类,您可以将其可视化为所有可能输入数据之外的决策平面。

一旦ReLU以这种状态结束,就不太可能恢复,因为0处的函数梯度也为0,因此梯度下降学习不会改变权重。对于负输入(y=0.01x当x <0时说)具有小的正斜率的“漏” ReLU 是解决此问题并提供恢复机会的一种尝试。

乙状结肠和tanh神经元的值饱和时可能会遇到类似的问题,但始终至少存在一个小的梯度,可以使它们长期恢复。


7
好的评论,也值得一提的是指数线性单位(ELU),它可以帮助更好地解决问题:arxiv.org/abs/1511.07289
padura

14
@alex:因为偏差对于准确性非常重要。消除偏差与说所有决策平面都必须通过原点几乎相同-除了少数例外,这是一个错误的选择。实际上,摆脱神经网络或相关模型(如线性回归或逻辑回归)中的偏差项通常将意味着您的模型将遭受偏差!这是最终导致同时欠拟合和过度拟合的模型的几种方法之一,,
尼尔·斯拉特

1
@Alex:我认为向ReLU添加一个小的正偏差是很常见的。我不知道这是否对“垂死的ReLU问题”有所帮助-它可能不会在数值上很大地改变梯度值(因为ReLU的梯度是1或0,并且当它是1时它可能会过冲,较小的起始偏差似乎几乎没有什么不同)。大多数情况下,我认为这只是对初始学习进行少量改进的一种技巧-但这可能会有所帮助,因为它有一个更好的开始,并且通常会更快地降低梯度。
尼尔·斯莱特

1
@max:您缺少我回答的“任何输入”部分。没有梯度会流到前馈网络中与“死”神经元相关的任何权重,因为到这些权重的所有路径都被切掉-梯度没有其他路径流向向ReLU单元提供权重的子集。您可能会在例如CNN中查看ReLU或将其视为共享权重,在这种情况下,特征图中的所有位置都需要立即设为零。但是,我认为这是“对于任何输入”的另一个实例。
尼尔·斯莱特

1
@anu:通过梯度下降。由较大的误差值引起的较大的正梯度会依次导致偏差项的单个步骤足够大,以至于“杀死”神经元,从而使其达到将来输入的状态(权重和偏差)到RELU功能向来都在0
尼尔·斯莱特

102

让我们回顾一下ReLU(整流线性单位)的样子:

对于某些输入,整流器的输入为 (权重为,并且对于该特定输入从上一层进行激活。整流神经元函数为xn

zn=i=0kwiain
wiainxnReLU=max(0,zn)

假设一个非常简单的错误度量

error=ReLUy

对于反向传播算法的增量,整流器只有2个可能的梯度值: (如果我们使用适当的错误度量,则1会变成其他东西,但0会保持不变),因此对于一定权重:

errorzn=δn={1zn00zn<0
wj
error=errorwj=errorzn×znwj=δn×ajn={ajnzn00zn<0

我想到的一个问题是,在左侧渐变 0的情况下,ReLU实际上是如何“完全”起作用的。如果对于输入,当前权重将ReLU放在左侧平坦的一侧,而对于此特定输入而言,它应该在右侧最好是右侧?梯度为0,因此权重将不会更新,甚至不会更新,因此“学习”在哪里?=xn

答案的实质在于以下事实:随机梯度下降不仅将考虑单个输入,而且还将考虑其中的许多输入,并且希望并非所有输入都将ReLU放在平坦的一面,因此梯度将不对于某些输入为-零(尽管可能为+ ve或-ve)。如果至少一个输入有我们RELU在陡峭的一侧,则RELU仍然活着 ,因为有还在学习怎么回事和权重获取此神经元更新。如果所有输入都将ReLU放在平坦的一侧,则根本没有希望权重发生变化并且神经元已死的希望。xnx

ReLU可能还活着,然后由于某些输入批次的梯度步骤而死亡,从而将权重驱动为较小的值,从而使所有输入的。学习率高会放大此问题。zn<0

正如@Neil Slater所提到的,解决方法是将平坦边修改为具有较小的渐变,以使其变为,如下所示,称为LeakyReLU。 ReLU=max(0.1x,x)在此处输入图片说明


您是否忘记了公式中用于输入整流器的偏置项?
汤姆·黑尔

我认为我遵循某些教科书的表示法,即假定所有层的a_0 = 1,而w_0是偏差。偏见并不重要,因此最好还是将其省略
MohamedEzz 18-3-20

@MohamedEzz,我不明白您的观点What if, for the input 𝑥𝑛, the current weights put the ReLU on the left flat side while it optimally should be on the right side for this particular input ?,如果输入为负,则梯度将为0?在这种情况下最适合什么?您能帮助您理解吗?
阿努

1
最佳的意思是,如果网络要对该输入进行更好的预测,则需要调整权重,以使ReLU给出正值,由于其0梯度,它将无法进行此调整在平坦的一面。
MohamedEzz

惊人的答案。谢谢
David Refaeli

13

ReLU神经元输出零,并且所有负输入的零导数都为零。因此,如果网络中的权重始终导致ReLU神经元的负输入,则该神经元实际上无助于网络的训练。在数学上,来自该神经元的权重更新对梯度的贡献始终为零(有关详细信息,请参见数学附录)。

在给定神经元的所有输入中,您的体重最终会产生负数的机会是什么?通常很难回答这个问题,但是一种可能发生的方法是对权重进行太大的更新。回想一下,通常通过使用梯度下降法将权重的损失函数最小化来训练神经网络。也就是说,神经网络的权重是函数的“变量” (损失取决于数据集,但仅是隐式的:通常是每个训练示例的总和,每个示例实际上是一个常数)。由于任何函数的梯度始终指向最陡峭的增加方向,因此我们要做的就是计算的梯度L(W)LL相对于重物并沿相反的方向移动一点,然后冲洗并重复。这样,我们最终得到的(局部)最小值。因此,如果输入的大小大致相同,则在梯度方向上的较大步幅可能会给您带来权重,而权重却给出相似的输入,最终可能为负数。WL

通常,发生什么情况取决于信息如何通过网络流动。您可以想象,随着训练的进行,神经元产生的值可能会漂移,并使权重杀死通过它们的所有数据流成为可能。(尽管有时,由于网络中较早的权重更新,它们可能会留下这些不利的配置!)。我在有关权重初始化博客文章中探讨了这个想法,权重初始化也可能导致此问题及其与数据流的关系。我认为我的观点可以通过那篇文章的情节加以说明:

使用不同的初始化策略在ReLU MLP中激活

在以不同的初始化策略通过网络后,该图在带有ReLU激活的5层多层感知器中显示了激活。您会看到,根据重量配置,网络的输出可能会被阻塞。

数学附录

从数学上讲,如果是网络的损失函数,则是第层中第个神经元的输出,是ReLU神经元,并且是 -st层的线性输入,然后通过链式法则,损失的导数相对于连接第 -th和 -的权重st层是Lxj(i)jif(s)=max(0,s)sj(i)(i+1)i(i+1)

Lwjk(i)=Lxk(i+1)xk(i+1)wjk(i).

右边的第一项可以递归计算。右边的第二项是唯一直接涉及权重,可以分解为wjk(i)

xk(i+1)wjk(i)=f(sj(i))sj(i)sj(i)wjk(i)=f(sj(i))xj(i).

从中可以看出,如果输出始终为负,则不会更新进入神经元的权重,并且神经元也不会有助于学习。


很好的解释!,请您帮助我理解Therefore, if your inputs are on roughly the same scale, a large step in the direction of the gradient can leave you with weights that give similar inputs which can end up being negative.如果对输入进行标准化,权重将如何变为负数?
阿努

@anu权重更新为,因此,如果您迈出较大的一步,则在这种情况下,选择一个大的,并且如果是正数,则可以看到可能变为负。如果我们将偏差更新为较大的负值,则尤其不利。wλdwλdww
约翰逊

@JohnsonJia,太好了,我明白了:),还需要澄清一下,为什么在偏重情况下与体重相比特别糟糕,因为对体重和偏见都有负面影响,如果我错了,请纠正我。
阿努

因为没有通过输入修改偏差:,所以如果非常负,则对于所有值可以保持负值。b ž Xz=wx+bbzx
约翰逊

5

为了更具体地说明语言,尽管ReLU的局部梯度(为)乘以由于反向传播而回流的梯度,但更新后的梯度的结果可能是一个较大的负数(如果该梯度流向-后面是一个很大的负数)。1

当学习率相对较高时,如此大的负更新梯度会产生较大的负,因此将抑制此神经元中将发生的更新,因为几乎不可能设置一个大正数来抵消由该神经元带来的大负数。损坏”。W¯¯ wiwi


4

“ Ding ReLU”是指在训练集中为您的数据输出0的神经元。发生这种情况是因为对于所有输入模式,神经元中输入权重 *的总和(也称为激活)变为<= 0。这导致ReLU输出0。在这种情况下,由于ReLU的导数为0,因此不会进行权重更新,并且神经元会停留在输出0处。

注意事项:

  1. 垂死的ReLU并不意味着神经元的输出在测试时也将保持零。根据分布差异,情况可能会也可能并非如此。
  2. 垂死的ReLU并非永久死亡。如果您添加新的训练数据或使用预先训练的模型进行新的训练,这些神经元可能会反冲!
  3. 从技术上讲,即将死亡的ReLU不必为所有训练数据输出0。对于某些数据,它确实可能会输出非零值,但时期数不足以显着移动权重。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.