激活函数,神经网络中的非线性变换,它可以使得神经网络几乎可以任意逼近任何非线性函数。如果没有激活函数,只剩下线性变换,那么,无论叠加多少层,神经网络还是一个线性变换模型。
S型激活函数
比较典型为Sigmoid和Tanh,这种激活函数的特点是有界。性状如S,数值越接近无穷,梯度越小,趋近于0.
Sigmoid:
常作为最后一层的激活函数,用于二分类。可以将任意数值转换为概率。值域为(0,1)。
Tanh:
值域为(-1,1)
ReLu和变种
ReLu:
这种分开处理的方式称为单侧抑制。在隐层中,这种特性会带来一定的稀疏性。又由于输入为正值时,梯度为1,可以缓解梯度消失的问题(随着神经网络层数增加,迭代乘,梯度会越乘越小,直至为0,没有梯度)。而且,ReLu的计算很高效。
但是,单侧抑制也会导致某个神经元死亡,就是,如果神经元的输出一直为负,那么在进行反向传播时,梯度一直为0,这个神经元不起作用,无法进行有效的更新。
为了解决这个问题,还与其他的ReLu的变种:
LeakyReLu:
不同于ReLu的,对于负值的绝对抑制, LeakyReLu对于负值允许一定量的信息通过。其中,λ>0是一个超参数,通常为0.2.这样就可以避免神经元死亡的现象发生。当然这样做,会慢下来。
PReLu:
更进一步,λ改为可以训练的参数α,每一个神经元可以有不用的参数, 更高维的时候,也可以共享参数。
ELU:
前面的对于负值的输入都是进行的线性压缩,还可以进行非线性压缩。它具有调节激活值的均值为0的功能,可以加速神经网络的收敛。