在生物学家研究大脑神经元工作机理时,发现如果一个神经元开始工作时,该神经元是一种被激活的状态,我想着大概就是为什么神经网络模型中有一个单元叫做激活函数。
那么什么是激活函数呢,我们可以从逻辑回归模型开始理解它,下图是一个Logistic回归分类器:
在上图中我们发现,Logistic回归分类器在对所有的输入做了线性相加(Net ipt function)之后,其结果经过了一个激活函数(Activation function),此时的输出:
而在Logistic回归分类器中去除误差的回传(Error)和单位阶跃函数(Unit step function)之后,其实剩下的东西就是一个神经元。 神经网络是由多个神经元在宽度和深度上链接而成的,通俗点理解,激活函数就是神经网络中每个神经元的输出后乘起来的那个函数。比如在下图中:
所有的隐层的神经元(a)和输出层的神经元(Y)后面其实都会经过一个激活函数,那么为什么输入层(x)没有呢,因为虽然在神经网络中,输入层,隐含层和输出层都用上图所示的“圆圈”表示,但是输入层不是神经元!!! 那么在神经网络中,激活函数(Activation function)一般选择什么样的函数呢:
除此之外,在深层神经网络中,比较常用的是ReLu(Rectified Linear Units)函数,这个我们会在最后一部分介绍它。
将其带入后可以得到Y与x的关系:
最终的输出:
可以看到,如果没有激活函数的话,无论我们如何训练神经网络的参数,得到都将是一个线性的模型,在二维空间下是一条线,在三维空间下是一个平面。而线性模型是有非常大的局限性的,比如下面的问题:
我们永远不可能用一个线性的模型取区分橙色和蓝色的点,而当我们加入激活函数后,用上面的网络结构是可以解决线性不可分问题的。(注意下图中的网络与上图公式推导的网络只是输入不同而已)
所以,最后总结一下:激活函数在神经网络中的功能即通过对加权的输入进行非线性组合产生非线性决策边界(non-linear decision boundary)。
最后一个部分,在说明一下深层神经网络中的激活函数,它的作用与浅层网络是相同的—增加非线性,但是使用的是ReLu(Rectified Linear Units)函数,主要是为了解决Sigmoid函数带来的梯度消失问题(这个不是本文的重点,我们不详细说明它)。下面这张图就是ReLu函数:
可以看到它是一个分段线性函数,对于所有小于等于0的数,f(x)=0;对于所有大于0的数,f(x)=x。这个函数可以作为神经网络的激活函数关在在于,在多维空间下任何一个曲面都可以分解为多段平面,这个曲面就是最后的决策面,而深层神经网络依靠复杂的网络结果和深度取用多个平面拟合决策面,最后达到满意的效果。
参考: 《Machine Learning》Tom M.Mitchell 《TensorFlow 实战Google深度学习框架》 《神经网络中激活函数的作用》 《 通俗理解神经网络之激励函数(Activation Function)》