为什么一定要一个非线性激活函数的BP神经网络中使用?

问题描述 投票:114回答:10

我一直在阅读神经网络的一些事情,我知道一个单层神经网络的一般原则。我理解aditional的层的需求,但为什么使用非线性激活功能呢?

这个问题是后面这一个:What is a derivative of the activation function used for in backpropagation?

math machine-learning neural-network deep-learning
10个回答
153
投票

激活函数的目的是介绍非线性到网络

反过来,这可以让你的响应变量模型(又名目标变量,类别标签,或得分),其非线性地变化,其解释变量

非线性意味着输出不能从输入的线性组合(这是不一样的输出呈现为直线 - 该字是仿射)被再现。

另一种方式来设想一下:没有网络,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评价backprop(双曲正切)使用的常见的激活函数:


0
投票

让我给你解释尽​​可能简单:

神经网络模式识别使用正确的吗?和图案的发现是一个非常非线性技术。

假设为参数的缘故,我们使用线性活化函数y = WX + B为每一个神经元,并设置像如果y> 0 - >类1,否则类0。

现在我们可以使用方误差损失计算我们的损失和背部,使模型好好学习,正确的传播呢?

错误。

  • 在过去的隐藏层,更新的值将是瓦特{1} = W {1} - (阿尔法)* X。
  • 对于倒数第二个隐藏层,更新的值将是W {L-1} = W {L-1} - (阿尔法)* W {L} * X。
  • 对于第i个最后隐藏层,更新的值将是瓦特{I} = W {I} - (阿尔法)* W {L} ... * W {I + 1} * X。

这导致我们乘以所有的权重矩阵一起以致引起的可能性:A)W {I}几乎没有变化,由于消失梯度B)瓦特{I}急剧和不准确的变化,由于爆炸梯度C)瓦特{I}改变以及足以给我们一个很好的拟合度打分

在情况C发生这意味着,我们的分类/预测的问题是最有可能基于一个简单的线性/后勤回归,决不首先需要一个神经网络!

无论多么强大的或超好调整了NN是,如果你使用线性激活功能,你将永远无法应对非线性需要模式识别问题


-2
投票

这不是在所有的要求。事实上,rectified linear activation function在大型神经网络是非常有用的。计算梯度的速度要快得多,它通过设置在0结合的最小诱导稀疏性。

详情请参见以下内容:https://www.academia.edu/7826776/Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks


编辑:

已经有超过整流线性激活功能是否可以被称为线性函数的一些讨论。

是的,这在技术上是一个非线性函数,因为它不是在点x = 0直线,但是,它仍然是正确的说,它是线性的所有其他点,所以我不认为这是有益的在这里鸡蛋里挑骨头,

我可以选择的标识功能,它仍然是真实的,但我选择了RELU作为例子,因为其最近的人气。


40
投票

线性活化函数可以被使用,但是非常有限的场合。事实上,了解激活功能越好看普通最小二乘法或简单线性回归是很重要的。线性回归旨在发现导致解释性的目标变量,当与输入组合之间的最小垂直作用的最佳权重。总之,如果预期的输出反映了线性回归如下所示然后线性活化函数可用于:(顶图)。但如在下面线性函数的第二图形不会产生所期望的结果:(中图)。然而,如下所示将产生所期望的结果的非线性函数:(底部图)enter image description here

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


20
投票

如果我们只允许在一个神经网络线性激活功能,输出将只是输入,这是不够的,形成linear transformationuniversal function approximator。这样的网络可以只表示为矩阵乘法,而你将不能够从这样的网络获得非常有趣的行为。

同样的事情也适用于其中所有神经元有仿射激活功能的情况下(即,在形式f(x) = a*x + c,其中ac是常数,这是线性活化函数的一般化的激活功能),这将只导致从输入的affine transformation输出,这是不是很令人兴奋无论是。

神经网络很可能包含具有线性激活函数,诸如在输出层的神经元,但这些要求公司神经元与网络的其它部分的非线性激活函数。

注:一个有趣的例外是DeepMind的synthetic gradients,为此,他们用一个小神经网络预测中给出的激活值反传通的梯度,他们发现,他们可以利用神经网络,没有隐藏的层和只逃脱线性激活。


4
投票

“本文件利用了石维尔斯特拉斯定理和Gallant和白色的余弦敲碎的使用abritrary挤压功能可以几乎近似于感兴趣的准确性的任何所需程度的任何函数来建立标准多层前的网络架构,提供配备充分许多隐藏单位可供选择。” (Hornik et al., 1989, Neural Networks

甲挤压功能是例如映射到[0,1]像S形的激活函数非线性激活函数。


3
投票

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

但也有发现这种形式的线性变换,如NMF,PCA等更简单的方法。然而,这就是一个多层次的网络不行为的方式为单层感知器相同的情况。


2
投票

具有线性激活和任何数量的隐藏层的前馈神经网络等同于用没有隐藏层只是一个线性神经的神经网络。例如让我们考虑在图中有两个隐藏层的神经网络,并没有激活enter image description here

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'

我们可以做的最后一步,因为几个线性变换的组合可以与一些偏差项的一个转变和组合来代替仅仅是一个单一的偏见。结果是相同的,即使我们增加一些线性激活。

因此,我们可以用单层神经net.This可以扩展到n层代替这个神经网络。这表明添加的层不增加一个线性神经网络的近似功率的。我们需要非线性激活函数逼近非线性函数,最现实的问题是非常复杂的和非线性的。事实上,当激活函数是非线性的,然后用足够大数量的隐藏单元的两层神经网络可以被证明是一个通用的函数逼近。


2
投票

要理解其背后的非线性activation functions逻辑首先你应该明白为什么被用来激活功能。在一般情况下,现实世界中的问题,需要哪些不是微不足道的非线性的解决方案。因此,我们需要一些功能来产生非线性。基本上是什么的激活函数的作用是同时映射输入值到一个期望的范围内,以产生这种非线性。

然而,线性激活功能可以在非常有限的,你不需要隐藏层,如线性回归的情况下被使用。通常,它是没有意义的,以产生这种问题,因为独立于隐藏层的数目,该网络将产生的其可仅在一个步骤中进行输入的线性组合神经网络。换句话说,它的行为就像一个单层。

也有几个所需的性质,活化功能,例如连续可微性。由于我们使用反向传播,我们必须产生在任何时候可微的功能。我强烈建议你从here检查维基百科页面激活功能有更好的了解的话题。


1
投票

我记得 - 乙状结肠功能的使用,因为适合在BP算法及其衍生容易计算,一些简单的像F(X)(1-F(X))。我不记得确切的数学。实际上可以使用具有衍生物的任何功能。


1
投票

几个神经元的分层NN可以用来学习线性不可的问题。例如XOR函数可以用两层步骤激活函数来获得。

© www.soinside.com 2019 - 2024. All rights reserved.