为什么在反向传播神经网络中必须使用非线性激活函数?


Answers:


167

激活功能的目的是将非线性引入网络

反过来,这使您可以对响应变量(又称目标变量,类标签或分数)建模,该变量随其解释变量非线性变化

非线性表示不能从输入的线性组合中复制输出(这与呈现为直线的输出不同-表示仿射)。

另一种思考方式:在网络中没有非线性激活函数的情况下,NN不管其具有多少层,其行为都将像单层感知器一样,因为将这些层加起来只会得到另一个线性函数(请参见上面的定义)。

>>> in_vec = NP.random.rand(10)
>>> in_vec
  array([ 0.94,  0.61,  0.65,  0.  ,  0.77,  0.99,  0.35,  0.81,  0.46,  0.59])

>>> # common activation function, hyperbolic tangent
>>> out_vec = NP.tanh(in_vec)
>>> out_vec
 array([ 0.74,  0.54,  0.57,  0.  ,  0.65,  0.76,  0.34,  0.67,  0.43,  0.53])

在反向传播(双曲正切)中使用的常见激活函数的值从-2到2:

在此处输入图片说明


15
为什么我们要消除线性度?
corazza 2012年

17
如果我们希望建模的数据是非线性的,那么我们需要在模型中加以考虑。
doug 2012年

38
用一句话回答:<<无论有多少层将表现就像一个感知器(因为线性函数加在一起,只是给你一个线性函数)>>。 。真好!
自治区

12
这有点令人误解-正如eski所提到的,整流线性激活函数非常成功,如果我们的目标只是建模/近似函数,则消除所有步骤的非线性不一定是正确的答案。有了足够的线性块,您就可以以高精度接近几乎所有非线性函数。我发现这很好地说明了整流线性单元为何起作用的原因:stats.stackexchange.com/questions/141960/…–
tegan

11
@tegan 整流线性活化函数是非线性的。我不确定您的评论与答案有何关系。
endolith '18

49

可以使用线性激活函数,但是在非常有限的情况下。实际上,要更好地理解激活函数,重要的是要看普通的最小二乘或简单的线性回归。线性回归的目的是找到最佳权重,当与输入值结合使用时,该权重将在解释变量和目标变量之间产生最小的垂直影响。简而言之,如果预期输出反映了如下所示的线性回归,则可以使用线性激活函数:(上图)。但是如下面的第二个图所示,线性函数将无法产生预期的结果:(中间图)。但是,如下所示的非线性函数将产生所需的结果:

在此处输入图片说明

激活函数不能是线性的,因为具有线性激活函数的神经网络仅在一层深度有效,而无论其结构多么复杂。网络输入通常是线性变换(输入*权重),但现实世界和问题是非线性的。为了使输入数据非线性,我们使用称为激活函数的非线性映射。激活功能是一种决策功能,可确定特定神经功能的存在。它映射在0和1之间,其中零表示不存在特征,而一个表示不存在特征。不幸的是,权重中发生的细微变化不能反映在激活值中,因为它只能取0或1。因此,非线性函数必须是连续的并且在此范围之间是可微的。神经网络必须能够接受从-infinity到+ infinite的任何输入,但是在某些情况下,它应该能够将其映射到介于{0,1}或{-1,1}之间的输出-因此,需要激活功能。激活函数需要非线性,因为其在神经网络中的目的是通过权重和输入的非线性组合产生非线性决策边界。


1
+一,那么可以推论出非线性函数是用来建立理想边界的吗?
SIslam

1
对,就是这样。仅产生0或1的稳定值就可以产生0.4或0.78,使其在边界范围内连续。
chibole

3
神经网络必须能够接受从-infinity到+ infinite的任何输入,但是它应该能够将其映射到介于{0,1}或{-1,1}之间的输出...这提醒我ReLU的限制是只能在神经网络模型的隐藏层内使用。
Cloud Cho

21

如果我们仅允许神经网络中的线性激活函数,则输出将只是输入的线性变换,这不足以形成通用函数逼近器。这样的网络只能表示为矩阵乘法,您将无法从这样的网络获得非常有趣的行为。

对于所有神经元都具有仿射激活函数(即形式上的激活函数f(x) = a*x + c,其中ac是常数,这是线性激活函数的泛化)的情况也是如此,这只会导致从输入到输出的仿射变换,这也不是很令人兴奋。

神经网络可能很好地包含具有线性激活功能的神经元,例如在输出层中,但是这些神经网络需要在网络的其他部分具有非线性激活功能的神经元。

注意: DeepMind的合成梯度是一个有趣的例外,对于合成梯度,他们使用一个小型神经网络来预测在给定激活值的情况下反向传播过程中的梯度,并且他们发现使用无隐藏层的神经网络可以避免这种情况。仅线性激活。


1
高阶函数可以使用多个隐藏层的线性激活函数来近似。通用逼近定理特定于仅具有一个隐藏层的MLP。
eski

实际上,我相信您在关于仿射激活函数会导致仿射变换的陈述中是正确的,但是通过反向传播(或任何其他方式)获悉该变换的事实,就原始问题而言,它并不是完全没有用处的。
eski

4
@eski不,您不能仅使用线性激活函数来近似高阶函数,无论您有多少层,都只能对线性(或仿射,如果除了最后一层以外的每个常数节点都具有仿射)建模和转换有。
HelloGoodbye

说激活函数的主要目的是让神经网络产生非线性决策边界,这是正确的说法吗?
stackoverflowuser2010

@ stackoverflowuser2010这将是一种查看方式。但是激活功能还不止如此。维基百科关于激活函数的文章列出了几个激活函数,所有激活函数(除了一个)都是非线性的,并比较了激活函数可以具有的不同质量。
HelloGoodbye

9

具有线性激活和任意数量的隐藏层的前馈神经网络等效于没有隐藏层的线性神经网络。例如,让我们考虑图中的神经网络,它具有两个隐藏层并且没有激活 在此处输入图片说明

y = h2 * W3 + b3 
  = (h1 * W2 + b2) * W3 + b3
  = h1 * W2 * W3 + b2 * W3 + b3 
  = (x * W1 + b1) * W2 * W3 + b2 * W3 + b3 
  = x * W1 * W2 * W3 + b1 * W2 * W3 + b2 * W3 + b3 
  = x * W' + b'

我们可以做最后一步,因为可以将多个线性变换的组合替换为一个变换,并且多个偏置项的组合只是一个偏置。即使我们添加一些线性激活,结果也是一样的。

所以我们可以用单层神经网络代替这个神经网络,可以扩展到n各层。这表明增加层根本不会增加线性神经网络的近似能力。我们需要非线性激活函数来近似非线性函数,而大多数现实世界中的问题都是高度复杂和非线性的。实际上,当激活函数是非线性的时,具有足够大量隐藏单元的两层神经网络可以证明是通用函数逼近器。


5

“本文利用Stone-Weierstrass定理和Gallant和White的余弦压扁器,建立了使用简单压扁功能的标准多层前馈网络体系结构,几乎可以将任何感兴趣的函数近似化为任何所需的精度,但前提是有足够多的隐藏单位可用。” (Hornik等,1989,神经网络

挤压函数例如是类似于S形激活函数的映射到[0,1]的非线性激活函数。


3

有时纯线性网络可以提供有用的结果。假设我们有一个三层形状为(3,2,3)的网络。通过将中间层限制为仅二维,我们得到的结果是原始三维空间中的“最佳拟合平面”。

但是,有更简单的方法可以找到这种形式的线性变换,例如NMF,PCA等。但是,在这种情况下,多层网络的行为与单层感知器的行为不同。


2

要首先了解非线性激活函数背后的逻辑,您应该了解为什么使用激活函数。通常,现实世界中的问题需要非平凡的非线性解决方案。因此,我们需要一些函数来生成非线性。激活函数的基本作用是在将输入值映射到所需范围内时生成此非线性。

但是,在不需要隐藏层(例如线性回归)的情况非常有限的情况下,可以使用线性激活函数。通常,针对此类问题生成神经网络是没有意义的,因为与隐藏层的数量无关,该网络将生成输入的线性组合,只需一步即可完成。换句话说,它的行为就像一个单层。

激活函数还有一些更理想的属性,例如连续可微性。由于我们使用反向传播,因此我们生成的函数在任何时候都必须是可微的。我强烈建议您从此处检查维基百科页面的激活功能,以更好地理解该主题。


2

这里有几个好的答案。最好指出克里斯托弗·毕晓普(Christopher M. Bishop)的著作《模式识别与机器学习》。对于深入了解与ML相关的几个概念,这是一本值得参考的书。摘自第229页(第5.1节):

如果将网络中所有隐藏单元的激活函数都视为线性,那么对于任何这样的网络,我们总能找到一个没有隐藏单元的等效网络。这是基于以下事实:连续线性变换的组成本身就是线性变换。但是,如果隐藏单元的数量小于输入或输出单元的数量,则网络可以生成的变换不是从输入到输出的最一般的线性变换,因为信息在降维时丢失了。隐藏的单位。在第12.4.2节中,我们表明线性单位网络引起了主成分分析。然而,通常,对线性单元的多层网络几乎没有兴趣。


1

我记得-使用sigmoid函数是因为它们的适合BP算法的导数易于计算,就像f(x)(1-f(x))这样简单。我不完全记得数学。实际上,任何带导数的函数都可以使用。


7
我记得,该功能仍希望单调增加。因此,没有任何功能。
Novak 2012年

1

几个神经元的分层NN可用于学习线性不可分割的问题。例如,可以通过具有阶跃激活功能的两层来获得XOR功能。


0

让我尽可能简单地向您解释一下:

神经网络用于模式识别正确吗?模式查找是一种非常非线性的技术。

假设出于争论的目的,我们对每个神经元使用线性激活函数y = wX + b,并设置类似y> 0-> class 1 else class 0的值。

现在,我们可以使用平方误差损失来计算损失,并将其反向传播,以便模型可以很好地学习,对吗?

错误。

  • 对于最后一个隐藏层,更新后的值将为w {l} = w {l}-α* X。

  • 对于倒数第二个隐藏层,更新后的值将为w {l-1} = w {l-1}-α* w {l} * X。

  • 对于第i个最后一个隐藏层,更新后的值将为w {i} = w {i}-α* w {l} ... * w {i + 1} * X。

这导致我们将所有权重矩阵相乘,从而得出以下可能性:A)w {i}由于梯度消失而几乎没有变化B)w {i}由于爆炸梯度C)w {i}急剧变化而变化不大足以给我们一个很好的得分

如果发生C,这意味着我们的分类/预测问题很可能是基于线性/逻辑回归的简单回归模型,并且一开始就不需要神经网络!

无论您的神经网络有多健壮或超调,如果您使用线性激活函数,您将永远无法解决非线性要求的模式识别问题


-3

完全不是必需的。实际上,整流的线性激活函数在大型神经网络中非常有用。计算梯度要快得多,并且通过将最小范围设置为0会引起稀疏性。

有关更多详细信息,请参见以下内容:https : //www.academia.edu/7826776/Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks


编辑:

关于整流线性激活函数是否可以称为线性函数已经进行了一些讨论。

是的,它在技术上是非线性函数,因为它在点x = 0处不是线性的,但是,说它在所有其他点上都是线性的仍然是正确的,所以我认为在这里nitpick没什么用,

我本可以选择身份函数,但它仍然是正确的,但是由于ReLU最近很流行,所以我选择了ReLU作为示例。


8
整流后的线性激活函数也是非线性的(尽管其名称)。这仅仅是线性的正面的价值观
Plankalkül

4
您在技术上是正确的,它在整个域中不是线性的,特别是在x = 0时(实际上,对于x <0来说是线性的,因为f(x)= 0是线性函数)。它也是不可微分的,因此梯度函数也不是完全可计算的,但是在实践中这些技术很容易克服。
eski 2015年

4
他不仅在技术上是正确的,而且在实践中也是对的(或类似的东西)。正是ReLU的非线性使其有用。如果他们本来线性的,他们将不得不在表单上激活功能f(x) = a*x(因为这是唯一一种线性激活函数的有),这是无用的激活功能(除非你具有非线性激活功能结合起来)。
HelloGoodbye

10
整流线性单位(ReLU)不是线性的,而且不仅仅是人们在挑剔的“次要细节”,这也是开始使用它的重要原因。具有单位矩阵或规则线性单位作为激活函数的神经网络将无法对非线性函数进行建模。仅仅因为它在0之上是线性的,并不意味着它实际上是一个线性函数。泄漏的ReLU也是“线性”的,也低于0,但是它仍然不是线性函数,并且绝对不能仅由恒等函数代替。非线性绝对是必不可少的。
Essam Al-Mansouri'3

3
实际上是一个称为分段线性函数的概念。
eski
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.