深度神经网络中的激活函数

简介

  • 线性模型是机器学习领域中最基本也是最重要的工具,以逻辑回归和线性回归为例;在真实情况中,我们往往会遇到线性不可分问题(例如XOR异或函数),需要非线性变换对数据的分布进行重新映射。
  • 对于深度神经网络,我们在每一层线性变换后叠加一个非线性激活函数,以避免多层网络等效于单层线性函数,从而获得更强大的学习与拟合能力。

常用激活函数及其导数

(1)sigmoid 激活函数

,sigmoid激活函数导数:

sigmoid激活函数及其导数.png
(2)tanh 激活函数

,tanh激活函数导数:

tanh激活函数及其导数.png
(3)relu 激活函数

,relu激活函数导数:

relu激活函数及其导数.png

为什么sigmoid和tanh激活函数会导致梯度消失的现象?

  • 由sigmoid函数图像可知,它将输入映射到区间;当很大时,趋近于1,当很小时,趋近于0。其导数在很大或很小时都会趋近于0,造成梯度消失的现象;
  • 有tanh函数图像可知,当很大趋近于1,当很小趋近于-1;其导数在很大或很小时都会趋近于0,同样会出现“梯度消失”现象;

Relu系列的激活函数相对于sigmoid和tanh激活函数的优点是什么?它们有什么局限性以及如何改进?

  • 优点:
    (1)从计算角度上,sigmoid和tanh激活函数均需要计算指数,复杂度高;而relu只需要一个阈值即可得到激活值;
    (2)relu的非饱和性可以有效解决梯度消失的问题,提供相对宽的激活边界;
    (3)relu的单侧抑制提供了网络的稀疏表达能力;

  • 局限性
    (1)relu的局限性在于其训练过程中会导致神经元死亡的问题。 这是由于函数导致梯度在经过该relu单元时被置为0,且在之后也不被任何数据激活,即流经该神经元的梯度永远为0,不对任何数据产生响应。
    (2)在实际训练中,如果学习率设置较大,会导致超过一定比例的神经元不可逆死亡,进而参数梯度无法更新,整个训练过程失败。

Relu激活函数的改进

  • 为了解决上述问题,人们设计了relu的变种 Leaky Relu 其形式表示为:

    Leaky Relu与relu的区别在于,当的时候其值不为0,而是一个斜率为的线性函数,一般为一个很小的正常数。这样既实现了单侧抑制,又保留了部分负梯度信息以至于不完全丢失。但是另一方面,值的选择增加了问题难度,需要较强的人工先验或多次重复训练以确定合适的参数值。
  • 基于此,参数化的 PRelu(Parametric Relu) 应运而生。它与 Leaky Relu 的主要区别是将负轴部分斜率作为网络的一个可学习的参数,进行反向传播训练,与其他含参数网络层联合优化。
  • 另一种改进 Random Relu 增加了“随机化”机制,具体地在训练过程中,斜率作为一个满足某种分布的随机采样,测试时再固定下来。Random relu在一定程度上能起到正则化的作用。

参考资料

  • 《百面机器学习》- 诸葛越
  • Empirical Evaluation of Rectified Activations in Convolutional Network
    https://arxiv.org/abs/1505.00853
  • 聊一聊深度学习的activation function
    https://zhuanlan.zhihu.com/p/25110450

你可能感兴趣的:(深度神经网络中的激活函数)