我一直在阅读神经网络的一些东西,我理解单层神经网络的一般原理,我理解对传统层的需求,但为什么使用非线性激活函数?
这个问题后面跟着这个:What is a derivative of the activation function used for in backpropagation?

激活函数的目的是将非线性引入网络
反过来,这允许您对响应变量(又名目标变量,类标签或分数)进行建模,该变量随解释变量非线性变化
非线性意味着输出不能从输入的线性组合中再现(这与呈现直线的输出不同-这个词是仿射)。
另一种思考方式:在网络中没有非线性激活函数的情况下,一个 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:
如果我们只允许在神经网络中使用线性激活函数,则输出将只是输入的linear transformation,不足以形成universal function approximator。这样的网络只能表示为矩阵乘法,您将无法从这样的网络中获得非常有趣的行为。
对于所有神经元都具有仿射激活函数(即形式为f(x) = a*x + c
的激活函数,其中a
和c
是常数,这是线性激活函数的推广),这只会导致affine transformation从输入到输出,这也不是很令人兴奋。
神经网络可以很好地包含具有线性激活函数的神经元,例如在输出层中,但是这些需要在网络的其他部分中具有非线性激活函数的神经元。
注意:一个有趣的例外是 DeepMind 的synthetic gradients,他们使用一个小型神经网络来预测给定激活值的反向传播过程中的梯度,他们发现他们可以使用没有隐藏层并且只有线性激活的神经网络。
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
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
层。这表明添加层根本不会增加线性神经网络的逼近能力。我们需要非线性激活函数来近似非线性函数,并且大多数现实世界中的问题都是高度复杂和非线性的。实际上,当激活函数是非线性的时,可以证明具有足够多的隐藏单元的两层神经网络是近似的。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(68条)