问题:为什么需要激励函数?
现实没有那么美好!激励函数就是解决不能用线性方程来描述的问题。
如上图所示:y=wx能够很好的描绘第一个图像,但是很难描绘第二个非线性图像,这里就需要激活函数来掰弯它:
激励函数AF套在原函数上,原来的函数就被掰弯了。使得原函数也有了非线性的特征。激励函数的例子:
激励函数自己也可以创造,但是一定要是可以微分的,因为在误差反向传递时,这些可微分的函数才能把误差反向传播回去。
激励函数的使用:
层数较少时,如左图,隐藏层只有两三层,则使用任何一个都可以,但是层数变多时,就不能随便用了。这会涉及到梯度爆炸,梯度消失的问题。
还有一些默认选择:
在CNN中一般用relu,在RNN中一般用relu或tanh
三种激活函数的特点:
Sigmoid函数的特点是会把输出限定在0~1之间,如果是非常大的负数,输出就是0,如果是非常大的正数,输出就是1,这样使得数据在传递过程中不容易发散。
Sigmod有两个主要缺点,一是Sigmoid容易过饱和,丢失梯度。从Sigmoid的示意图上可以看到,神经元的活跃度在0和1处饱和,梯度接近于0,这样在反向传播时,很容易出现梯度消失的情况,导致训练无法完整;二是Sigmoid的输出均值不是0,基于这两个缺点,SIgmoid使用越来越少了。
tanh是Sigmoid函数的变形,tanh的均值是0,在实际应用中有比Sigmoid更好的效果。
ReLU是近来比较流行的激活函数,当输入信号小于0时,输出为0;当输入信号大于0时,输出等于输入。
ReLU的优点:
1. ReLU是部分线性的,并且不会出现过饱和的现象,使用ReLU得到的随机梯度下降法(SGD)的收敛速度比Sigmodi和tanh都快。
2. ReLU只需要一个阈值就可以得到激活值,不需要像Sigmoid一样需要复杂的指数运算。
ReLU的缺点:
在训练的过程中,ReLU神经元比价脆弱容易失去作用。例如当ReLU神经元接收到一个非常大的的梯度数据流之后,这个神经元有可能再也不会对任何输入的数据有反映了,所以在训练的时候要设置一个较小的合适的学习率参数。