选自medium
作者:Sukanya Bag
转自:机器之心
激活函数是神经网络模型重要的组成部分,本文作者Sukanya Bag从激活函数的数学原理出发,详解了十种激活函数的优缺点。
![](https://filescdn.proginn.com/e6a58f6422307f1e11cc3749263badb6/bd5ca4aac7ddc6346e80ef9e148d0618.webp)
激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。因此,激活函数是确定神经网络输出的数学方程式,本文概述了深度学习中常见的十种激活函数及其优缺点。首先我们来了解一下人工神经元的工作原理,大致如下:![](https://filescdn.proginn.com/ba1c5d6aff3fda5c85fdae094a27f69b/172a24c4d2c0f4a885cfa44aad743a1a.webp)
![](https://filescdn.proginn.com/845f79ada55ed31954921bdea316f8db/d9067d5c35d807a5ab97feb4b3c404b2.webp)
![](https://filescdn.proginn.com/ac939382aa03cc821ecfeb7dceac1404/07dbaf42d0d90034a35349f54b3c884a.webp)
Sigmoid 函数的图像看起来像一个 S 形曲线。![](https://filescdn.proginn.com/47b5fc00fea771c67a1ee61aa5cf5900/b37b21dfa53c4a5570004ba274786855.webp)
在什么情况下适合使用 Sigmoid 激活函数呢?Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化;
用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适;
梯度平滑,避免「跳跃」的输出值;
函数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率;
明确的预测,即非常接近 1 或 0。
![](https://filescdn.proginn.com/66f85651bc31e18e9a2a8988134df1aa/b9ed80f0f852fd71891f04119adf7e22.webp)
tanh 激活函数的图像也是 S 形,表达式如下:![](https://filescdn.proginn.com/c580b31708bbea615d324279f3cf899e/28bb9372b379aea5e892380fbcc69dae.webp)
tanh 是一个双曲正切函数。tanh 函数和 sigmoid 函数的曲线相对相似。但是它比 sigmoid 函数更有一些优势。![](https://filescdn.proginn.com/8ad5874ca8ebbb2f43dfae7af2cc3b1e/7c088aea2bd97928e41987fdba8c991a.webp)
注意:在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。![](https://filescdn.proginn.com/f2c8a619e974ed941ba1f96052ceef34/16ea6fc59448c142734550df9876f1fd.webp)
ReLU 激活函数图像如上图所示,函数表达式如下:![](https://filescdn.proginn.com/94836cca2e96d2f80588fa5692b50a1e/36e6ff3070a77e97131b13a0c269749b.webp)
ReLU 函数是深度学习中较为流行的一种激活函数,相比于 sigmoid 函数和 tanh 函数,它具有如下优点:Dead ReLU 问题。当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,sigmoid 函数和 tanh 函数也具有相同的问题;
我们发现 ReLU 函数的输出为 0 或正数,这意味着 ReLU 函数不是以 0 为中心的函数。
它是一种专门设计用于解决 Dead ReLU 问题的激活函数:![](https://filescdn.proginn.com/29d5fdacc21e830216f447d81052b82b/45e5c0f961737783aa6e675f1e23c2ef.webp)
为什么 Leaky ReLU 比 ReLU 更好?![](https://filescdn.proginn.com/f1f8d0ac6303f1ff7de9d0ba3d81bf7f/f2f54550a642c4eea26ff24f086e01cc.webp)
Leaky ReLU 通过把 x 的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度(zero gradients)问题;
leak 有助于扩大 ReLU 函数的范围,通常 a 的值为 0.01 左右;
Leaky ReLU 的函数范围是(负无穷到正无穷)。
注意:从理论上讲,Leaky ReLU 具有 ReLU 的所有优点,而且 Dead ReLU 不会有任何问题,但在实际操作中,尚未完全证明 Leaky ReLU 总是比 ReLU 更好。![](https://filescdn.proginn.com/18d1fd24649cf972c13fca6519306afc/431704390e939b0c64e492f64d464df1.webp)
ELU vs Leaky ReLU vs ReLUELU 的提出也解决了 ReLU 的问题。与 ReLU 相比,ELU 有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。![](https://filescdn.proginn.com/0b203a154cd23c6606c6c7982e2dff66/e4e09c6d2075b49a7cdf539c72174c23.webp)
没有 Dead ReLU 问题,输出的平均值接近 0,以 0 为中心;
ELU 通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习;
ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。
一个小问题是它的计算强度更高。与 Leaky ReLU 类似,尽管理论上比 ReLU 要好,但目前在实践中没有充分的证据表明 ELU 总是比 ReLU 好。6. PReLU(Parametric ReLU)![](https://filescdn.proginn.com/517390a202259663fade75549193297b/ddbc7ccc576edcff80edae824221443a.webp)
看一下 PReLU 的公式:参数α通常为 0 到 1 之间的数字,并且通常相对较小。在负值域,PReLU 的斜率较小,这也可以避免 Dead ReLU 问题。
与 ELU 相比,PReLU 在负值域是线性运算。尽管斜率很小,但不会趋于 0。
![](https://filescdn.proginn.com/c9acdc8f2c0ecd9cee4ad911e5c2ab1b/e4e529dbfa8f2a23f579d9e667ede451.webp)
Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。![](https://filescdn.proginn.com/1b2e21f722260ca3a1750bfdde9c96b7/c53f9815a2f07dadae954a9613155dec.webp)
Softmax 与正常的 max 函数不同:max 函数仅输出最大值,但 Softmax 确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是 argmax 函数的概率版本或「soft」版本。Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。在零点不可微;
负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。
![](https://filescdn.proginn.com/ffa6ad04b86e63f7f9cb28ae7874ce2c/7fa47533cbc0aefa6b1486b8a3a1e257.webp)
函数表达式:y = x * sigmoid (x)Swish 的设计受到了 LSTM 和高速网络中 gating 的 sigmoid 函数使用的启发。我们使用相同的 gating 值来简化 gating 机制,这称为 self-gating。self-gating 的优点在于它只需要简单的标量输入,而普通的 gating 则需要多个标量输入。这使得诸如 Swish 之类的 self-gated 激活函数能够轻松替换以单个标量为输入的激活函数(例如 ReLU),而无需更改隐藏容量或参数数量。![](https://filescdn.proginn.com/d51c7efd0f7db555ddefb3ab226c85e6/2e8932c1625a63f59ed8c2563d1387c4.webp)
在 Maxout 层,激活函数是输入的最大值,因此只有 2 个 maxout 节点的多层感知机就可以拟合任意的凸函数。
单个 Maxout 节点可以解释为对一个实值函数进行分段线性近似 (PWL) ,其中函数图上任意两点之间的线段位于图(凸函数)的上方。![](https://filescdn.proginn.com/d0bc7aa696d75ca1a2d2acd6dcb98f5f/1c9ad8a3a3ad074c02fc5851bc1e738b.webp)
![](https://filescdn.proginn.com/e48085a456360e787e0a9bd6f5128ddd/f42f1965ee9e05a67a16999ef66ad287.webp)
假设两个凸函数 h_1(x) 和 h_2(x),由两个 Maxout 节点近似化,函数 g(x) 是连续的 PWL 函数。![](https://filescdn.proginn.com/32ec01b100385e70dd7f8c607574b230/76aaf228356656f402f758135a5ab3e9.webp)
因此,由两个 Maxout 节点组成的 Maxout 层可以很好地近似任何连续函数。![](https://filescdn.proginn.com/05584b784c48b4cb706c9cbc864c100d/688805202cc6a69eb74885dca17fba78.webp)
![](https://filescdn.proginn.com/ddc7741d807a67f2c7c6923516ae454f/411b1458a92b74d434d8adfd4159810c.webp)
Softplus 函数:f(x)= ln(1 + exp x)f ′(x)=exp(x) / ( 1+exp x ),也称为 logistic / sigmoid 函数。Softplus 函数类似于 ReLU 函数,但是相对较平滑,像 ReLU 一样是单侧抑制。它的接受范围很广:(0, + inf)。原文链接:https://sukanyabag.medium.com/activation-functions-all-you-need-to-know-355a850d025e往期精彩:
【原创首发】机器学习公式推导与代码实现30讲.pdf
【原创首发】深度学习语义分割理论与实战指南.pdf
谈中小企业算法岗面试
算法工程师研发技能表
真正想做算法的,不要害怕内卷
技术学习不能眼高手低
技术人要学会自我营销
做人不能过拟合
点个在看