沃卡logo

深度学习必知十大激活函数

2022-06-27来源:尤而小屋

  最近在reddit上刷到一张非常形象mó xìng的图。图形表达的是深度学习中常用的激活函数。

  那就让我们来整理一下深度学习中离不开的激活函数!

  激活函数

  激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。

  在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。因此,激活函数是确定神经网络输出的数学方程式,本文概述了深度学习中常见的十种激活函数及其优缺点。

  首先我们来了解一下人工神经元的工作原理,大致如下:

  上述过程的数学可视化过程如下图所示:

  Sigmoid激活函数

  Sigmoid函数的图像看起来像一个S形曲线。函数表达式如下:

  在什么情况下适合使用Sigmoid激活函数呢?

  Sigmoid函数的输出范围是0到1。由于输出值限定在0到1,因此它对每个神经元的输出进行了归一化;

  用于将预测概率作为输出的模型。由于概率的取值范围是0到1,因此Sigmoid函数非常合适;

  梯度平滑,避免「跳跃」的输出值;

  函数是可微的。这意味着可以找到任意两个点的sigmoid曲线的斜率;

  明确的预测,即非常接近1或0。

  Sigmoid激活函数有哪些缺点?

  倾向于梯度消失;

  函数输出不是以0为中心的,这会降低权重更新的效率;

  Sigmoid函数执行指数运算,计算机运行得较慢。

  Tanh/双曲正切激活函数

  tanh激活函数的图像也是S形,表达式如下:

  tanh是一个双曲正切函数。tanh函数和sigmoid函数的曲线相对相似。但是它比sigmoid函数更有一些优势。

  首先,当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。二者的区别在于输出间隔,tanh的输出间隔为1,并且整个函数以0为中心,比sigmoid函数更好;

  在tanh图中,负输入将被强映射为负,而零输入被映射为接近零。

  注意:在一般的二元分类问题中,tanh函数用于隐藏层,而sigmoid函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。

  ReLU激活函数

  ReLU激活函数图像如上图所示,函数表达式如下:

  ReLU函数是深度学习中较为流行的一种激活函数,相比于sigmoid函数和tanh函数,它具有如下优点:

  当输入为正时,不存在梯度饱和问题。

  计算速度快得多。ReLU函数中只存在线性关系,因此它的计算速度比sigmoid和tanh更快。

  当然,它也有缺点:

  Dead ReLU问题。当输入为负时,ReLU完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,sigmoid函数和tanh函数也具有相同的问题;

  我们发现ReLU函数的输出为0或正数,这意味着ReLU函数不是以0为中心的函数。

  Leaky ReLU

  它是一种专门设计用于解决Dead ReLU问题的激活函数:

  ReLU vs Leaky ReLU

  为什么Leaky ReLU比ReLU更好?

  Leaky ReLU通过把x的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度(zero gradients)问题;

  leak有助于扩大ReLU函数的范围,通常a的值为0.01左右;

  Leaky ReLU的函数范围是(负无穷到正无穷)。

  注意:从理论上讲,Leaky ReLU具有ReLU的所有优点,而且Dead ReLU不会有任何问题,但在实际操作中,尚未完全证明Leaky ReLU总是比ReLU更好。

  ELU

  ELU vs Leaky ReLU vs ReLU

  ELU的提出也解决了ReLU的问题。与ReLU相比,ELU有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。

  显然,ELU具有ReLU的所有优点,并且:

  没有Dead ReLU问题,输出的平均值接近0,以0为中心;

  ELU通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习;

  ELU在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。

  一个小问题是它的计算强度更高。与Leaky ReLU类似,尽管理论上比ReLU要好,但目前在实践中没有充分的证据表明ELU总是比ReLU好。

  PReLU(Parametric ReLU)

  PReLU也是ReLU的改进版本:

  看一下PReLU的公式:参数α通常为0到1之间的数字,并且通常相对较小。

  如果a_i=0,则f变为ReLU

  如果a_i>0,则f变为leaky ReLU

  如果a_i是可学习的参数,则f变为PReLU

  PReLU的优点如下:

  在负值域,PReLU的斜率较小,这也可以避免Dead ReLU问题。

  与ELU相比,PReLU在负值域是线性运算。尽管斜率很小,但不会趋于0。

  Softmax

  Softmax是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为K的任意实向量,Softmax可以将其压缩为长度为K,值在(0,1)范围内,并且向量中元素的总和为1的实向量。

  Softmax与正常的max函数不同:max函数仅输出最大值,但Softmax确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是argmax函数的概率版本或「soft」版本。

  Softmax函数的分母结合了原始输出值的所有因子,这意味着Softmax函数获得的各种概率彼此相关。

  Softmax激活函数的主要缺点是:

  在零点不可微;

  负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

  Swish

  函数表达式:

  Swish的设计受到了LSTM和高速网络中gating的sigmoid函数使用的启发。我们使用相同的gating值来简化gating机制,这称为self-gating。

  self-gating的优点在于它只需要简单的标量输入,而普通的gating则需要多个标量输入。这使得诸如Swish之类的self-gated激活函数能够轻松替换以单个标量为输入的激活函数(例如ReLU),而无需更改隐藏容量或参数数量。

  Swish激活函数的主要优点如下:

  「无界性」有助于防止慢速训练期间,梯度逐渐接近0并导致饱和;(同时,有界性也是有优势的,因为有界激活函数可以具有很强的正则化,并且较大的负输入问题也能解决);

  导数恒>0;

  平滑度在优化和泛化中起了重要作用。

  Maxout

  在Maxout层,激活函数是输入的最大值,因此只有2个maxout节点的多层感知机就可以拟合任意的凸函数。

  单个Maxout节点可以解释为对一个实值函数进行分段线性近似(PWL),其中函数图上任意两点之间的线段位于图(凸函数)的上方。

  Maxout也可以对d维向量(V)实现:

  假设两个凸函数h_1(x)和h_2(x),由两个Maxout节点近似化,函数g(x)是连续的PWL函数。

  因此,由两个Maxout节点组成的Maxout层可以很好地近似任何连续函数。

  Softplus

  Softplus函数:

  Softplus的导数为:

  也称为logistic/sigmoid函数。

  Softplus函数类似于ReLU函数,但是相对较平滑,像ReLU一样是单侧抑制。它的接受范围很广:(0,+inf)。

  图片使用申明:原创文章图片源自‘Canva可画’平台免费版权图片素材;引用文章源自引用平台文章中所使用的原图。