激活函数:
神经网络神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。
为什么要使用激活函数?
神经网络中激活函数的主要作用是提供网络的非线性建模能力,如不特别说明,激活函数一般而言是非线性函数。假设一个示例神经网络中仅包含线性卷积和全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。
常用的激活函数详解:
1.sigmoid函数/Logistic 函数
sigmoid函数图像
sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0。将具有这类性质的激活函数定义为软饱和激活函数。如果Z的值很大或者很小的时候,那么函数的梯度(函数的斜率)会非常小,在反向传播的过程中,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象。
sigmoid函数一般只用于二分类的输出层。
2.tanh函数(双曲正切函数)
anh也是一种非常常见的激活函数。与sigmoid相比,它的输出均值是0,有类似于数据中心化的效果,使得其收敛速度要比sigmoid快,减少迭代次数。然而,从途中可以看出,tanh一样具有软饱和性,从而造成梯度消失。
使用时可在隐层使用tanh函数,在输出层使用sigmoid函数。
3.ReLU函数(修正线性单元)
ReLU的全称是Rectified Linear Units,是一种后来才出现的激活函数,也是目前最常用的默认选择激活函数。 可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。
然而,随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。与sigmoid类似,ReLU的输出均值也大于0,偏移现象和 神经元死亡会共同影响网络的收敛性。
针对在x<0的硬饱和问题,我们对ReLU做出相应的改进,使得
这就是Leaky-ReLU,
α也可以作为一个参数来学习,原文献建议初始化a为0.25,不采用正则。
作者:你要好好学习呀