直线激活函数如何解决神经网络中消失的梯度问题?


40

我发现整流线性单位(ReLU)在许多地方被赞誉为神经网络消失梯度问题的一种解决方案。即,使用max(0,x)作为激活函数。当激活为正时,很明显它比S型激活函数好,因为它的推导始终为1,而不是大x的任意小值。另一方面,当x小于0时,导数恰好为0。在最坏的情况下,当一个单位从未被激活时,该单位的权重也将不再变化,并且该单位将永远无用-这似乎甚至比消失得很小的渐变还要差。学习算法在使用ReLU时如何处理该问题?


2
您所说的最坏情况称为垂死的ReLU
Martin Thoma

我认为,对于逻辑函数,由于梯度可以任意变小,因此可以通过组合几种“可忽略的”物流来获得数字消失的梯度(对于较深的体系结构,问题将会恶化)。对于斜坡函数,作为所述梯度是分段常数,可以仅当存在,实际上是0的成分发生消失复合梯度
GeoMatt22

(我不确定这是否是“永远的”吗?经过更多的训练后,它是否会变为非零?是由于对其他节点的依赖和/或当前的数据小批量生产?(对于随机梯度下降)
GeoMatt22

Answers:


33

这是一篇说明问题的论文。我引用其中的一部分以明确问题。

整流器激活功能使网络可以轻松获得稀疏表示。例如,在权重的均匀初始化之后,大约50%的隐藏单位连续输出值是实零,并且该分数可以随稀疏性导致的正则化轻松增加。

因此,整流器激活功能会在网络上引入稀疏效应。这是同一篇论文中稀疏的一些优点;

  • 信息解开。深度学习算法的要求保护的目标之一(Bengio,2009)是弄清解释数据差异的因素。密集表示很容易纠缠,因为输入中的几乎任何更改都会修改表示向量中的大多数条目。相反,如果表示对于较小的输入更改既稀疏又健壮,则几乎总是通过输入的较小更改来保留一组非零特征。

  • 有效的可变大小表示。不同的输入可能包含不同数量的信息,并且使用可变大小的数据结构(在信息的计算机表示中很常见)可以更方便地表示出来。改变活动神经元的数量可以使模型针对给定的输入和所需的精度控制表示的有效尺寸。

  • 线性可分离性。稀疏表示也更可能是线性可分离的,或者使用较少的非线性机器更容易分离,这仅仅是因为信息是在高维空间中表示的。此外,这可以反映原始数据格式。例如,在与文本相关的应用程序中,原始原始数据已经非常稀疏。

  • 分散但稀疏。密集的分布式表示形式是最丰富的表示形式,其效率可能比纯本地表示形式成倍提高(Bengio,2009年)。稀疏表示的效率仍然是指数级的,指数的功效是非零特征的数量。就上述标准而言,它们可能是一个很好的权衡。

它还可以回答您提出的问题:

一个可能的假设是,在0处的硬饱和度可能会通过阻止梯度反向传播而损害优化。为了评估此效果的潜在影响,我们还研究了softplus激活:softplus(x)=log(1+ex)(Dugas et al。,2001),整流非线性的平滑形式。我们失去了确切的稀疏性,但可能希望获得更轻松的培训。但是,实验结果倾向于与该假设相矛盾,表明硬零实际上可以帮助监督训练。我们假设,只要梯度可以沿着某些路径传播,硬非线性就不会受到损害,即,每一层中的某些隐藏单位都是非零的,并且功劳和责任归咎于这些ON单位而不是分布更均匀地说,我们认为优化更容易。

您可以阅读本文以获取更多详细信息。


18

这就是为什么使用PReLU,ELU或其他类似ReLU的泄漏激活更好的主意的原因,这些激活不仅会消失为0,而且当x变为负值以继续学习时会下降到0.1 * x。在我看来很长一段时间以来,ReLU都是像乙状结肠一样的历史,尽管出于某些原因人们仍在发表有关这些的论文。为什么?我不知道。

Dmytro Mishkin和其他人实际上测试了具有许多不同激活类型的网络,您应该研究他们对不同激活功能和其他功能的性能的发现。。但是,使用纯ReLU可以更好地学习某些功能,例如XOR。不要用教条来考虑任何神经系统的东西,因为神经网络正在开发中。实际上,世界上没有人足够了解和理解它们,无法说出神圣的真理。没有人。尝试一下,发现自己的发现。请记住,使用ReLU本身是一个非常新的发展,几十年来,该领域中所有不同的博士生都使用了过于复杂的激活功能,而现在我们只能嘲笑它们。经常“知道”太多会导致糟糕的结果。了解神经网络并不是一门精确的科学,这一点很重要。数学上没有什么能说神经网络实际上会像它们一样好。它是启发式的。因此,它具有很好的延展性。

FYI甚至绝对值激活在某些问题(例如类似XOR的问题)上也能获得良好的结果。不同的激活功能更适合于不同的目的。我用abs()尝试了Cifar-10,它的表现似乎更差。但是,我不能说“它对于视觉识别来说是一个更差的激活功能”,因为例如,我不确定我的预初始化是否对它最佳,等等。这是相对学习的事实令我惊讶。

同样,在现实生活中,传递给反向道具的“导数”不一定必须与实际的数学导数匹配。

我什至要说我们应该禁止称它们为“衍生物”,而开始称其为其他名称,例如, error activation functions不要使我们对修补它们的可能性不感兴趣。例如,实际上,您可以使用ReLU激活,但提供0.1或类似的值(而不是0)作为x <0的导数。在某种程度上,您将拥有普通的ReLU,但神经元无法“因适应性而死亡”。我称其为NecroRelu,因为它是不会死的ReLU。并且在某些情况下(虽然绝对不是大多数情况下)比普通LeakyReLU更好,后者在x <0时实际上具有0.1导数,并且比通常的ReLU好。我认为没有太多的人研究过这种功能,或者类似的东西实际上可能是一个很酷的激活函数,没有人考虑过,只是因为他们过于专注于数学。

至于常用的函数,对于tanH(x)激活函数,通常将1-x²而不是1-tanH(x)²作为导数来传递,以便更快地进行计算。

另外,请注意,ReLU并没有比TanH那样“明显更好”。在某些情况下,TanH可能更好。看起来似乎只是视觉识别中的问题。但是,例如ELU有点S形的柔软性,它是目前最知名的视觉识别激活功能之一。我还没有真正尝试过,但是我敢打赌,可以在同一层级别上将具有不同激活功能的多个组设置为一个优势。因为,使用不同的激活功能可以更好地描述不同的逻辑。有时您可能需要几种评估类型。

请注意,与您的激活函数类型相对应的初始化非常重要。例如,泄漏的ReLU需要其他与​​普通ReLU相同的初始化。

编辑:实际上,标准ReLU与现代体系结构相比,似乎不容易过度拟合。至少在图像识别方面。看来,如果要使用带有大量参数的非常高精度的网络,则最好坚持使用普通ReLU与泄漏选项。但是,当然,请自己测试所有这些。也许,如果给出更多的正则化,一些泄漏的东西会更好地工作。


我对您的NecroReLU感兴趣,但是无法从您写的内容中得知它与LeakyReLU有何不同。你能澄清一下吗?
汤姆·黑尔'18

不同在于,所述激活是RELU,但衍生物是LReLU
的IhorMé

@ÍhorMé,正如你提到的initialization that corresponds to a type of activation function one is using一个NOTE在您的文章,请您提供您的建议,在同一行,我不完全相信,使用RELU激活了乙状结肠/ TANH是消失/爆炸梯度问题的解决方案。
anu

16

这是一个启发式的解释:

  • 反向传播中的每个梯度更新均由多个乘数组成。
  • 您越接近网络的起点,这些因素就会被更多地相乘以获得梯度更新。
  • 这些因素中有许多是神经元激活功能的导数-其余是权重,偏差等。
  • 在这些因素中,直观上重要的因素是权重,偏差等。激活函数导数更多地是一种调整参数,旨在使梯度下降以正确的速度沿正确的方向进行。
  • 如果您将一堆小于1的项相乘,那么您拥有的项越多,它们趋向于零。因此,如果您具有斜率<1的激活函数,则随着距输出层越来越远,梯度将消失。
  • 如果将一堆大于1的项相乘,则它们越趋于无穷大,因此,如果激活函数的斜率> 1,则随着距输出层越远,梯度将爆炸。
  • 如果我们能以某种方式神奇地使激活函数的导数贡献的这些项为1,这直观地意味着,对梯度更新的所有贡献都来自问题的输入和模型-权重,输入,偏差-而不是所选激活函数的某些伪像。
  • 当输出> 0时,RELU的梯度为1,否则为零。
  • 因此,在反向传播方程中将一堆RELU导数相乘会具有1或0的不错的特性-更新要么为零,要么完全由其他权重和偏差产生。

您可能会认为,具有线性函数比在x <0时展平要好。这里的想法是RELU生成的稀疏网络具有相对较少的有用链接,其生物学上的可信度更高,因此丢失一堆重量实际上是有帮助的。同样,只有在激活函数具有某些非线性的情况下,才能使用神经网络对有趣的函数进行仿真。线性激活函数会导致线性输出,这根本不是很有趣。


很好的解释,您能否在第六点上做更多的说明?另外,您是否可以在同一行上提供有关此问题的建议,我不完全相信在S型/ tanH上使用ReLu激活是消失/爆炸梯度问题的解决方案。
阿努

1
合理的重量初始化也很重要;但是激活功能的选择也是如此。举一个简单的例子,如果您所有的权重默认都为零,并且您使用RELU,那么神经元的所有输出将为零并保持为零...单独使用RELU或单独使用初始化技术都无法完全解决消失/爆炸梯度,但它们都可以帮助您。不知道您在第6点重新阐述的意思是什么?
Tom Walker

1

让我们考虑定义误差信号反向传播的主要递归关系。

令 和为层的权重矩阵和偏差矢量,而为激活函数。Wibiif

层的激活向量计算如下:hii

si=Wi(hi1)+bi

hi=f(si)

层的错误信号由以下方式定义:δi

δi=Wi+1(δi+1f(si))

其中是两个向量的元素相乘。

该递归关系是针对网络中的每一层计算的,并表示错误信号从输出层向后传输的方式。现在,如果我们以作为tanh函数,则有。除非恰好是1或-1,否则此表达式是0到1之间的一个分数。因此,每一层误差信号都乘以一个分数,并且变得越来越小:消失的梯度。fhif(si)=(1hi2)hi

但是,如果我们取,则对于发射某物的每个神经元,即激活非零的神经元,以为1(以numpy表示)将是)。在这种情况下,错误信号将完全传播到下一层(乘以1)。因此,即使对于具有多层的网络,我们也不会遇到消失的梯度。˚Ff=Relu=max(0,x) ˚Fff=numpy.where(hi>0,1,0)

该方程式还证明了relu激活的另一个问题特征-死神经元:如果给定的神经元碰巧被初始化为对于任何输入都不激发(其激活为零),则其梯度也将为零,并且因此它将永远不会被激活。

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.