为什么神经网络需要激活功能?当第一次看到神经网络的架构时,您会注意到的是神经网络有很多互连的层,其中每一层都有激活功能,但是为什么这样一个结构会有如此神奇的作用呢?为什么加一个激活层就能让神经网络能够拟合任意的函数呢?希望我们简短的介绍清楚。
神经网络是一种机器学习模型,在给定某些输入和输出向量的情况下,尝试拟合出输入和输出间的关系函数。给定一组具有我们希望预测的某些值的观察示例,以及每个示例上的一些数据,神经网络将尝试”拟合“这些数据,以便可以正确地得到新数据的预测值。
作为示例,我们可能正在设计图像分类器(通常使用卷积神经网络)。这里,输入是像素矢量。输出可以是数字类标签(例如,狗为1,猫为0)。
这将训练神经网络以预测图像是否包含猫或狗。训练完成后给定一组像素,如果它们对应于狗的图像,则返回1,对于猫的图像,返回0。下图是一个神经网络的基本形式:
虽然你可能已经多次看过这张照片,认识它是神经网络,但我仍然介绍一下每个圆圈代表神经网络中的神经元,垂直对齐的神经元代表每个层。
神经元只是一个数学函数,它接受输入(指向它的神经元的输出)并返回输出。这些输出用作下一层的输入,依此类推,直到我们到达最终的输出层,输出最后的预测值。对于每组输入,神经网络的目标是使其每个输出尽可能接近实际预期值。例如猫狗图像分类,如果我们将100x100的动物图片作为输入,那么我们的输入层将有30000个神经元。然后我们将通过每一层计算输入并作为一个新的向量为下一图层的输出,依此类推。
神经元主要有三个功能:乘以权重向量、添加偏差并将输出应用于激活函数。终于到了神经网络的的核心:激活功能的作用。我们通常使用非线性函数作为激活函数。这是因为线性部件已经由先前应用的神经元权重和偏差部分计算,而激活函数就是为整个神经网络加入非线性功能。
假设我们的偏差值为-b。添加偏差后,任何低于b的输入值都将变为负值。将ReLU应用于此后,它变为0。
为什么神经网络需要激活功能?
为什么我们的神经网络需要激活功能呢?如果我们不使用它们会发生什么?我在Yoshua Bengio的令人敬畏的深度学习书中找到了这个问题的解释。
我们可以不用使用非线性函数来构造线性变换,而是让每个神经元简单地返回它们的结果。但是这样的话,我们所有的层都会简单地将一组输入线性的进行矢量乘积和矢量加法。实际上,线性变换无法解决许多问题,所以激活函数是对矢量乘积和偏差的一个补充。激活函数将有效地缩小模型可以估计的函数数量。
下面举一个非常简单但很直观的例子,考虑XOR运算符。
下面你尝试找到一个双元素向量,加上偏差,并将它们转换为x1 XOR x2。没错,你做不到,没人能。但是,考虑一下
如果你使用数学运算,你会发现每个可能的1和0组合都有所需的输出。
恭喜!你刚刚训练了你的第一个神经网络!
它学到了线性模型永远无法学到的问题。
参考
https://towardsdatascience.com/why-do-neural-networks-need-an-activation-function-3a5f6a5f00a