Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AI_人工智能
激活函数
一文详解最常用的10个「激活函数」
发布于 2021-03-05 17:24:43 浏览:932
订阅该版
激活函数是神经网络模型重要的组成部分,本文作者Sukanya Bag从激活函数的数学原理出发,详解了十种激活函数的优缺点。 ![img](https://img-blog.csdnimg.cn/img_convert/b21a961c4e3e00b6d73d25f2ea178274.png) 激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。 在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。因此,激活函数是确定神经网络输出的数学方程式,本文概述了深度学习中常见的十种激活函数及其优缺点。 首先我们来了解一下人工神经元的工作原理,大致如下: ![img](https://img-blog.csdnimg.cn/img_convert/bcd247ca5bb1b2b04f07b6774c7ee99f.png) 上述过程的数学可视化过程如下图所示: ![img](https://img-blog.csdnimg.cn/img_convert/793fec32c23eb45dfd89d3001342301b.png) **1. Sigmoid 激活函数** ![img](https://img-blog.csdnimg.cn/img_convert/c73a134bc98aeb38dfb06469d24c11ff.png) Sigmoid 函数的图像看起来像一个 S 形曲线。 函数表达式如下: ![img](https://img-blog.csdnimg.cn/img_convert/9fe05214b43d25f4d74949ac9d57fdd8.png) 在什么情况下适合使用 Sigmoid 激活函数呢? - Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化; - 用于将预测概率作为输出的模型。由于概率的取值范围是 0 到 1,因此 Sigmoid 函数非常合适; - 梯度平滑,避免「跳跃」的输出值; - 函数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率; - 明确的预测,即非常接近 1 或 0。 Sigmoid 激活函数有哪些缺点? - 倾向于梯度消失; - 函数输出不是以 0 为中心的,这会降低权重更新的效率; - Sigmoid 函数执行指数运算,计算机运行得较慢。 **2. Tanh / 双曲正切激活函数** ![img](https://img-blog.csdnimg.cn/img_convert/871449dfd026b1d1f97ebb40c0a35651.png) tanh 激活函数的图像也是 S 形,表达式如下: ![img](https://img-blog.csdnimg.cn/img_convert/69740ff05a50f1ca1e56d318e404ef2d.png) tanh 是一个双曲正切函数。tanh 函数和 sigmoid 函数的曲线相对相似。但是它比 sigmoid 函数更有一些优势。 ![img](https://img-blog.csdnimg.cn/img_convert/05ac0905670338a6b36ed312941c7465.png) - 首先,当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。二者的区别在于输出间隔,tanh 的输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好; - 在 tanh 图中,负输入将被强映射为负,而零输入被映射为接近零。 注意:在一般的二元分类问题中,tanh 函数用于隐藏层,而 sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。 **3. ReLU 激活函数** ![img](https://img-blog.csdnimg.cn/img_convert/dc0ec801f56a1411987c8c18e320fa42.png) ReLU 激活函数图像如上图所示,函数表达式如下: ![img](https://img-blog.csdnimg.cn/img_convert/fe412148e2830d57fb91073272aa8805.png) ReLU 函数是深度学习中较为流行的一种激活函数,相比于 sigmoid 函数和 tanh 函数,它具有如下优点: - 当输入为正时,不存在梯度饱和问题。 - 计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快。 当然,它也有缺点: 1. Dead ReLU 问题。当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,sigmoid 函数和 tanh 函数也具有相同的问题; 2. 我们发现 ReLU 函数的输出为 0 或正数,这意味着 ReLU 函数不是以 0 为中心的函数。 **4. Leaky ReLU** 它是一种专门设计用于解决 Dead ReLU 问题的激活函数: ![img](https://img-blog.csdnimg.cn/img_convert/93d506bcbf9c4270d3ef7463c5002409.png) *ReLU vs Leaky ReLU* 为什么 Leaky ReLU 比 ReLU 更好? ![img](https://img-blog.csdnimg.cn/img_convert/19fea105ae3a3b46a6785d9b5901cc17.png) 1. Leaky ReLU 通过把 x 的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度(zero gradients)问题; 2. leak 有助于扩大 ReLU 函数的范围,通常 a 的值为 0.01 左右; 3. Leaky ReLU 的函数范围是(负无穷到正无穷)。 **注意:**从理论上讲,Leaky ReLU 具有 ReLU 的所有优点,而且 Dead ReLU 不会有任何问题,但在实际操作中,尚未完全证明 Leaky ReLU 总是比 ReLU 更好。 **5. ELU** ![img](https://img-blog.csdnimg.cn/img_convert/9fc6494de500a88e282d664a2412b4fc.png) *ELU vs Leaky ReLU vs ReLU* ELU 的提出也解决了 ReLU 的问题。与 ReLU 相比,ELU 有负值,这会使激活的平均值接近零。均值激活接近于零可以使学习更快,因为它们使梯度更接近自然梯度。 ![img](https://img-blog.csdnimg.cn/img_convert/52bedd2b81a8eeb8ff20458aac1cb52c.png) 显然,ELU 具有 ReLU 的所有优点,并且: - 没有 Dead ReLU 问题,输出的平均值接近 0,以 0 为中心; - ELU 通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习; - ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。 一个小问题是它的计算强度更高。与 Leaky ReLU 类似,尽管理论上比 ReLU 要好,但目前在实践中没有充分的证据表明 ELU 总是比 ReLU 好。 **6. PReLU(Parametric ReLU)** **![img](https://img-blog.csdnimg.cn/img_convert/a5ca763c45800a6f85073815c00fa4d4.png)** PReLU 也是 ReLU 的改进版本: ![img](https://img-blog.csdnimg.cn/img_convert/6d43f61a132a1710e41806ffaee91231.png) 看一下 PReLU 的公式:参数α通常为 0 到 1 之间的数字,并且通常相对较小。 - 如果 a_i= 0,则 f 变为 ReLU - 如果 a_i> 0,则 f 变为 leaky ReLU - 如果 a_i 是可学习的参数,则 f 变为 PReLU PReLU 的优点如下: 1. 在负值域,PReLU 的斜率较小,这也可以避免 Dead ReLU 问题。 2. 与 ELU 相比,PReLU 在负值域是线性运算。尽管斜率很小,但不会趋于 0。 **7. Softmax** ![img](https://img-blog.csdnimg.cn/img_convert/8dc62b4e3bdd8ad404455e579a748d21.png) Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax 可以将其压缩为长度为 K,值在(0,1)范围内,并且向量中元素的总和为 1 的实向量。 ![img](https://img-blog.csdnimg.cn/img_convert/61ae9b5dad61f44729d4d30539a91453.png) Softmax 与正常的 max 函数不同:max 函数仅输出最大值,但 Softmax 确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是 argmax 函数的概率版本或「soft」版本。 Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。 Softmax 激活函数的主要缺点是: 1. 在零点不可微; 2. 负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。 **8. Swish** ![img](https://img-blog.csdnimg.cn/img_convert/13b15a00782819790b465ec76e647fc4.png) 函数表达式:y = x * sigmoid (x) Swish 的设计受到了 LSTM 和高速网络中 gating 的 sigmoid 函数使用的启发。我们使用相同的 gating 值来简化 gating 机制,这称为 self-gating。 self-gating 的优点在于它只需要简单的标量输入,而普通的 gating 则需要多个标量输入。这使得诸如 Swish 之类的 self-gated 激活函数能够轻松替换以单个标量为输入的激活函数(例如 ReLU),而无需更改隐藏容量或参数数量。 Swish 激活函数的主要优点如下: - 「无界性」有助于防止慢速训练期间,梯度逐渐接近 0 并导致饱和;(同时,有界性也是有优势的,因为有界激活函数可以具有很强的正则化,并且较大的负输入问题也能解决); - 导数恒 > 0; - 平滑度在优化和泛化中起了重要作用。 **9. Maxout** ![img](https://img-blog.csdnimg.cn/img_convert/7264090df4e6a8bfc226a8b4a63ec02e.png) 在 Maxout 层,激活函数是输入的最大值,因此只有 2 个 maxout 节点的多层感知机就可以拟合任意的凸函数。 单个 Maxout 节点可以解释为对一个实值函数进行分段线性近似 (PWL) ,其中函数图上任意两点之间的线段位于图(凸函数)的上方。 ![img](https://img-blog.csdnimg.cn/img_convert/53c3312d861dbc0af11dc0136edcc7f7.png) Maxout 也可以对 d 维向量(V)实现: ![img](https://img-blog.csdnimg.cn/img_convert/40382c430e02aeb188fcbac2cc0fe4a9.png) 假设两个凸函数 h_1(x) 和 h_2(x),由两个 Maxout 节点近似化,函数 g(x) 是连续的 PWL 函数。 ![img](https://img-blog.csdnimg.cn/img_convert/a57666245461a284a067f6875921658d.png) 因此,由两个 Maxout 节点组成的 Maxout 层可以很好地近似任何连续函数。 ![img](https://img-blog.csdnimg.cn/img_convert/58fd36c71e46d259a639f8add8ce3640.png) **10. Softplus ** ![img](https://img-blog.csdnimg.cn/img_convert/38e4c890ec5711e1e120444dea0e6355.png) Softplus 函数:f(x)= ln(1 + exp x) Softplus 的导数为 f ′(x)=exp(x) / ( 1+exp x ) = 1/ (1 +exp(−x )) ,也称为 logistic / sigmoid 函数。 Softplus 函数类似于 ReLU 函数,但是相对较平滑,像 ReLU 一样是单侧抑制。它的接受范围很广:(0, + inf)。 *原文链接:https://sukanyabag.medium.com/activation-functions-all-you-need-to-know-355a850d025e*
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
lebhoryi
这家伙很懒,什么也没写!
文章
30
回答
6
被采纳
1
关注TA
发私信
相关文章
1
RT-Thread AI Kit 相关资料和教程在哪里?
2
20号的开发者大会上,人脸识别AI
3
2020 开发者大会演示的 AI 套件什么时候开源?
4
请问RT-AK有没有部署MobileNet的例子呢
5
请问RT-AK会支持paddlepaddle的模型吗
6
嵌入式比赛中要求的 RT-Thread ai toolkit 能介绍一下吗?
7
使用rt_ai_tools转换模型时报错
8
求一个识别人有没有带口罩的模型?
9
RT-AK的人物检测例子下载后编译失败
10
cube ai部署后报错
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部