我一直试图找出非线性激活函数在神经网络中实现时的确切作用。
我知道它们会改变神经元的输出,但是如何以及出于什么目的呢?
我知道他们给线性神经网络增加了非线性,但是目的是什么?
他们到底对每一层的输出做了什么?是某种形式的分类吗?
我想知道他们在神经网络中的确切目的是什么。
维基百科上说,“给定一个输入或一组输入,节点的激活函数定义了该节点的输出。”这篇文章指出,激活函数检查神经元是否“触发”。我也看了一堆关于Stack Overflow的文章和其他问题,但没有一篇文章对正在发生的事情给出令人满意的答案。
使用非线性激活函数的主要原因是能够学习非线性目标函数,即学习输入和输出之间的非线性关系。如果一个网络只由线性激活函数组成,它只能对输入和输出之间的线性关系进行建模,这在几乎所有应用中都没有用处。
我绝不是ML专家,所以也许这个视频能更好地解释它:https://www.coursera.org/lecture/neural-networks-deep-learning/why-do-you-need-non-linear-activation-functions-OASKH
希望这有帮助!
首先,最好清楚我们为什么使用激活函数。
我们使用激活函数将一层节点的输出传播到下一层。激活函数是标量到标量的函数,我们使用神经网络中隐藏神经元的激活函数将非线性引入网络模型。因此在更简单的层面上,激活函数用于将非线性引入网络。
那么引入非线性有什么用呢?在此之前,非线性意味着输出不能从输入的线性组合中再现。因此,如果神经网络中没有非线性激活函数,即使它可能有数百个隐藏层,它仍然会表现得像单层感知器。原因是无论你用哪种方式对它们求和,它只会产生线性输出。
无论如何,为了更深层次的理解,我建议你看看这篇媒体文章以及吴恩达本人的视频。
从吴恩达的视频中,让我重新表述下面的一些重要部分。
…如果你没有激活函数,那么无论你的神经网络有多少层,它所做的只是计算一个线性激活函数。所以你还不如没有任何隐藏层。
…事实证明,如果你这里有一个线性激活函数,这里有一个sigmoid函数,那么这个模型并不比没有任何隐藏层的标准逻辑回归更具表现力。
…所以除非你在那里抛出一个非线性,否则即使你在网络中深入,你也不会计算更有趣的函数。