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

我一直在阅读神经网络的一些东西,我理解单层神经网络的一般原理,我理解对传统层的需求,但为什么使用非线性激活函数?

我一直在阅读神经网络的一些东西,我理解单层神经网络的一般原理,我理解对传统层的需求,但为什么使用非线性激活函数?

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

200

激活函数的目的是将非线性引入网络

反过来,这允许您对响应变量(又名目标变量,类标签或分数)进行建模,该变量随解释变量非线性变化

非线性意味着输出不能从输入的线性组合中再现(这与呈现直线的输出不同-这个词是仿射)。

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

在 backprop (双曲正切) 中使用的常用激活函数,其计算结果为-2 到 2:

enter image description here

67

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

enter image description here

激活函数不能是线性的,因为具有线性激活函数的神经网络只能在一层之间有效,因为它们的结构有多复杂。网络的输入通常是线性变换 (输入 * 权重),但现实世界和问题是非线性的。为了使输入数据非线性,我们使用称为激活函数的非线性映射。激活函数是一个决策函数,它确定一个特定神经特征的存在。

26

如果我们只允许在神经网络中使用线性激活函数,则输出将只是输入的linear transformation,不足以形成universal function approximator。这样的网络只能表示为矩阵乘法,您将无法从这样的网络中获得非常有趣的行为。

对于所有神经元都具有仿射激活函数(即形式为f(x) = a*x + c的激活函数,其中ac是常数,这是线性激活函数的推广),这只会导致affine transformation从输入到输出,这也不是很令人兴奋。

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

注意:一个有趣的例外是 DeepMind 的synthetic gradients,他们使用一个小型神经网络来预测给定激活值的反向传播过程中的梯度,他们发现他们可以使用没有隐藏层并且只有线性激活的神经网络。

22

A feed-forward neural network with linear activation and any number of hidden layers is equivalent to just a linear neural neural network with no hidden layer. For example lets consider the neural network in figure with two hidden layers and no activation 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'

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

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

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(895)
当需要在视图上执行invalidate()时
上一篇
如何在 drupal中记录错误消息
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(26条)