在神经网络中,我们都要在每一个神经元的最后添加一个非线性的激活函数,也就是activation function。然而为什么需要呢?
每一个神经元可以理解成y = w(input) + b –> output = activation function(y) 的过程。
如果没有非线性的激活函数,则一个神经元的输出就变成了 output = w_1(input) + b_1
将这个output当做input带入到下一个神经元时,情况是这样的: y = w_2(w_1(input) + b_1) + b_2
化简这个式子,就会得到:
y = w_2 w_1(input) + w_2b_1 + b_2
y = w_3(input) + b_3
好了,这下看出来在没有使用非线性的激活函数时,两层神经元计算后的结果仍然只是一个线性结果。推广到n层神经元,就算你弄了100层神经元用来计算,最后的结果和一层没什么两样。
既然需要使用,那我们要使用哪一种激活函数呢,这里就sigmoid、tanh、ReLU的选择进行一个简单的介绍。
这里就默认大家知道他们的公式和图像了,我就不再介绍了。
- 首先sigmoid,可以明确地说,除了作为二分类问题的输出层激活函数,其他的时候都不用它。
- tanh,比sigmoid全面占优的一个激活函数,因为它的图像穿过原点,可以使激活之后的输出值的mean为0,这对神经网络的计算很有好处。
- ReLU,修正线性单元的简称,一般我们都选择它作为激活函数,因为以上两种激活函数在输入值过大或过小时可以提供的梯度接近于0,很不利于梯度下降和神经网络的优化,而ReLU不存在这个问题,因为只要输入值大于0,它的导数永远是1。
梯度消失和爆炸相关:http://blog.csdn.net/qq_25737169/article/details/78847691