科技匠|为什么我们的神经网络需要激活函数


如果你正在读这篇文章 , 那么很可能你已经知道什么是神经网络 , 什么是激活函数 , 但是 , 一些关于机器学习的入门课程并不能很清楚地说明 , 为什么我们需要这些激活函数 。 我们需要它们吗?没有它们 , 神经网络还能工作吗?
科技匠|为什么我们的神经网络需要激活函数
首先让我们回顾一下关于神经网络的一些事情 。 它们通常被可视化地表示为一个类似图表的结构 , 如下图所示:
科技匠|为什么我们的神经网络需要激活函数
如上图所示 , 神经网络有3层:输入层、隐藏层、输出层 , 共3、4、2个神经元 。 输入层的节点数量与数据集的特性数量相同 。 对于隐藏层 , 您可以自由选择需要多少节点 , 并且可以使用多个隐藏层 。
网络中的每个神经元 , 除了那些在输入层的神经元 , 可以被认为是一个线性分类器 , 它将前一层神经元的所有输出作为输入 , 并计算这些输出加上一个偏置项的加权和 。 然后 , 下一层的神经元将前一层线性分类器计算的值作为输入 , 然后计算这些值的加权和 , 依此类推 。 我们希望 , 通过以这种方式结合线性分类器 , 我们可以构建更复杂的分类器 , 可以代表我们的数据中的非线性模式 。
让我们看看下面的例子数据集:
科技匠|为什么我们的神经网络需要激活函数
这个数据集不是线性可分的 , 我们不能将一个类从另一个通过一条线分开 。 但我们可以通过使用两条线作为决策边界来实现这种分离 。
科技匠|为什么我们的神经网络需要激活函数
所以 , 我们可能认为两个中间神经元可以完成这个工作 。 这两个神经元将学习上图中的两条分离线 。 然后我们需要一个输出神经元它将之前的两个神经元作为输入 , 这样它就能正确地进行分类 。
科技匠|为什么我们的神经网络需要激活函数
对于最后一个做正确分类的神经元 , 它需要n1和n2隐藏神经元的输出是线性可分的 , 如果我们把它们画在一个二维平面上 。 上面画的两条线有方程:
科技匠|为什么我们的神经网络需要激活函数
这意味着这两个隐藏的神经元正在计算输入x1和x2的如下线性组合:
科技匠|为什么我们的神经网络需要激活函数
我们画出n1和n2看看它们是否有用 。
科技匠|为什么我们的神经网络需要激活函数
我们对我们的小神经网络感到失望 。 n1和n2的输出仍然不是线性可分的 , 因此输出神经元不能正确分类 。 那么 , 问题是什么呢?
问题是 , 任何线性函数的线性组合仍然是线性的 , 在一张纸上证明它是正确的并不难 。 这一事实的证据在本文的结尾 。 所以 , 不管我们用了多少层或多少神经元 , 按照我们目前的方式 , 我们的神经网络仍然只是一个线性分类器 。