为什么在反向传播神经网络中必须使用非线性激活函数?
deep-learning
machine-learning
neural-network
8
0

我已经阅读了有关神经网络的一些知识,并且了解了单层神经网络的一般原理。我知道需要附加层,但是为什么要使用非线性激活函数?

这个问题之后是这个问题: 用于反向传播的激活函数的导数是什么?

参考资料:
Stack Overflow
收藏
评论
共 10 个回答
高赞 时间 活跃

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

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

收藏
评论

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

收藏
评论

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

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

收藏
评论

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

收藏
评论

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

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

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

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

收藏
评论

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

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层。这表明增加层根本不会增加线性神经网络的近似能力。我们需要非线性激活函数来近似非线性函数,并且大多数现实世界中的问题都是高度复杂和非线性的。实际上,当激活函数是非线性的时,具有足够大量隐藏单元的两层神经网络可以证明是通用函数逼近器。

收藏
评论

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

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

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

另一种思考方式:在网络中没有非线性激活函数的情况下,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:

在此处输入图片说明

收藏
评论

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

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

收藏
评论

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

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

收藏
评论

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

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号