功能性模块:(8)一文理解常用激活函数(Sigmoid,ReLU,ELU,GELU...)

article/2025/9/21 17:27:15

一文理解常用激活函数

1. Sigmoid

公式:

Sigmoid ( x ) = 1 1 + exp ⁡ ( − x ) \text{Sigmoid}(x) = \frac{1}{1 + \exp(-x)} Sigmoid(x)=1+exp(x)1

Sigmoid的函数形状如下图所示:
在这里插入图片描述
对应的导数形式如下图所示:
在这里插入图片描述
Sigmoid函数的优点:

  • 便于求导,可以看到Sigmoid的梯度是平滑的函数
  • 能够压缩数据,数据会压缩在0-1之间
  • 适合用于前向传播

Sigmoid函数的缺点:

  • 容易出现梯度消失
  • Sigmoid的输出不是0均值
  • 幂函数计算相对比较耗时

2. Tanh

公式:
Tanh ( x ) = tanh ⁡ ( x ) = exp ⁡ ( x ) − exp ⁡ ( − x ) exp ⁡ ( x ) + exp ⁡ ( − x ) \text{Tanh}(x) = \tanh(x) = \frac{\exp(x) - \exp(-x)}{\exp(x) + \exp(-x)} Tanh(x)=tanh(x)=exp(x)+exp(x)exp(x)exp(x)

Tanh的函数形状如下图所示:
在这里插入图片描述

对应的导数形式如下图所示:
在这里插入图片描述

tanh函数的优点:

  • 将数据收敛到-1~+1之间,并且输出是0均值
  • 收敛速度比Sigmoid函数更快

tanh函数的缺点:

  • 仍然存在梯度消失的问题
  • 仍然存在幂指數运算,计算成本很高

3. ReLU

公式:
f ( x ) = max ⁡ ( 0 , x ) f(x)=\max(0, x) f(x)=max(0,x)

ReLU的函数形状如下图所示:

在这里插入图片描述

对应的导数形式如下图所示:
在这里插入图片描述

ReLU函数的优点:

  • 收敛速度更快
  • 解决了一部分梯度消失的问题

ReLU函数的缺点:

  • 没有完全解决梯度消失的问题,在x轴为负的部分神经元的梯度始终为0,相当于神经元一旦失活后,就不会被激活

4. LeakyReLU

公式:

LeakyReLU ( x ) = max ⁡ ( 0 , x ) + negative_slope ∗ min ⁡ ( 0 , x ) \text{LeakyReLU}(x) = \max(0, x) + \text{negative\_slope} * \min(0, x) LeakyReLU(x)=max(0,x)+negative_slopemin(0,x)

LeakyReLU的函数形状如下图所示:
在这里插入图片描述

对应的导数形式如下图所示:

在这里插入图片描述

LeakyReLU函数的优点:

  • 解决了ReLU中神经一旦失活,就无法再次激活的问题

LeakyReLU函数的缺点:

  • 无法为正负输入值提供一致的关系预测,可以看到不同区间的函数是不一致的

5. ELU

公式:
ELU ( x ) = max ⁡ ( 0 , x ) + min ⁡ ( 0 , α ∗ ( exp ⁡ ( x ) − 1 ) ) \text{ELU}(x) = \max(0,x) + \min(0, \alpha * (\exp(x) - 1)) ELU(x)=max(0,x)+min(0,α(exp(x)1))

ELU的函数形状如下图所示:
在这里插入图片描述

对应的导数形式如下图所示:

在这里插入图片描述

ELU函数的优点:

  • 有ReLU所有的优点

ELU函数的缺点:

  • 计算相较ReLU来说会比较复杂,效果也不一定比ELU好

6. GELU

公式:

GELU ( x ) = x ∗ Φ ( x ) \text{GELU}(x) = x * \Phi(x) GELU(x)=xΦ(x)

Φ ( x ) \Phi(x) Φ(x) is the Cumulative Distribution Function for Gaussian Distribution

GELU的函数形状如下图所示:

在这里插入图片描述

对应的导数形式如下图所示:

在这里插入图片描述
GELU函数的优点:

  • 之前描述的所有的激活函数正则化和激活函数是分开进行的,GELU是同时进行正则化和激活函数

GELU函数的缺点:

  • 暂无,等待补充

PS: 上述图例代码

import torch
import matplotlib.pylab as plt
import torch.nn.functional as F
import osfunc_pic_res = "./func_pic_res/"
if not os.path.exists(func_pic_res):os.makedirs(func_pic_res)def xyplot(x_vals, y_vals, name):plt.figure()plt.rcParams['figure.figsize'] = (5, 3.5)plt.plot(x_vals.detach().numpy(), y_vals.detach().numpy(), label=name, linewidth=1.5, color='#FF0000')plt.grid(True, linestyle=':')plt.legend(loc='upper left')# dark_background, seaborn, ggplotplt.style.use("seaborn")ax = plt.gca()ax.spines['right'].set_color("none")ax.spines['top'].set_color("none")ax.spines['bottom'].set_position(("data", 0))ax.spines['left'].set_position(("data", 0))ax.spines['bottom'].set_linewidth(0.5)ax.spines['left'].set_linewidth(0.5)ax.xaxis.set_ticks_position('bottom')ax.yaxis.set_ticks_position('left')plt.savefig(func_pic_res + "{}.jpg".format(name))# sigmoid激活函数
def test_Sigmoid():x = torch.arange(-10.0, 10.0, 0.1, requires_grad=True)y = x.sigmoid()xyplot(x, y, 'Sigmoid')# 导数y.sum().backward()xyplot(x, x.grad, 'grad of Sigmoid')def test_Tanh():x = torch.arange(-10.0, 10.0, 0.1, requires_grad=True)y = x.tanh()xyplot(x, y, 'Tanh')# 导数y.sum().backward()xyplot(x, x.grad, 'grad of Tanh')def test_ReLU():x = torch.arange(-10.0, 10.0, 0.1, requires_grad=True)y = x.relu()xyplot(x, y, 'ReLU')# 导数y.sum().backward()xyplot(x, x.grad, 'grad of ReLU')def test_LeakyReLU():x = torch.arange(-10.0, 10.0, 0.1, requires_grad=True)y = F.leaky_relu(x, negative_slope=0.1, inplace=False)xyplot(x, y, 'LeakyReLU(negative_slope=0.1)')# 导数y.sum().backward()xyplot(x, x.grad, 'grad of LeakyReLU(negative_slope=0.1)')def test_ELU():x = torch.arange(-10.0, 10.0, 0.1, requires_grad=True)y = F.elu(x, alpha=0.3, inplace=False)xyplot(x, y, 'ELU(alpha=0.3)')# 导数y.sum().backward()xyplot(x, x.grad, 'grad of ELU(alpha=0.3)')def test_GELU():x = torch.arange(-10.0, 10.0, 0.1, requires_grad=True)y = F.gelu(x)xyplot(x, y, 'GELU')# 导数y.sum().backward()xyplot(x, x.grad, 'grad of GELU')if __name__ == "__main__":test_Sigmoid()test_Tanh()test_ReLU()test_LeakyReLU()test_ELU()test_GELU()

http://chatgpt.dhexx.cn/article/69UUa4lZ.shtml

相关文章

深入理解ReLU、Leaky ReLU、 PReLU、ELU、Softplus

文章目录 ReLULeaky ReLUPReLUELUSoftplus ReLU ReLU(Rectified Linear Unit,修正线性单元),也叫Rectifier 函数,它的定义如下: Relu可以实现单侧抑制(即把一部分神经元置0)&#x…

搞懂激活函数(Sigmoid/ReLU/LeakyReLU/PReLU/ELU)

1. 简介 在深度学习中,输入值和矩阵的运算是线性的,而多个线性函数的组合仍然是线性函数,对于多个隐藏层的神经网络,如果每一层都是线性函数,那么这些层在做的就只是进行线性计算,最终效果和一个隐藏层相当…

YOLOv5改进系列(13)——更换激活函数之SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC系列等

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

【PyTorch】教程:torch.nn.ELU

torch.nn.ELU CLASS torch.nn.ELU(alpha1.0, inplaceFalse) paper: Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs). 参数 alpha ([float]) – α \alpha α 默认为1.0inplace ([bool] ) – 内部做, 默认为 False ELU 定义 ELU ( x ) { x , …

【YOLOv7/YOLOv5系列算法改进NO.54】改进激活函数为ReLU、RReLU、Hardtanh、ReLU6、Sigmoid、Tanh、Mish、Hardswish、ELU、CELU等

文章目录 前言一、解决问题二、基本原理三、​添加方法四、总结 前言 作为当前先进的深度学习目标检测算法YOLOv7,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系…

常用激活函数:Sigmoid、Tanh、Relu、Leaky Relu、ELU优缺点总结

1、激活函数的作用 什么是激活函数? 在神经网络中,输入经过权值加权计算并求和之后,需要经过一个函数的作用,这个函数就是激活函数(Activation Function)。 激活函数的作用? 首先我们需要知道…

深度学习—激活函数详解(Sigmoid、tanh、ReLU、ReLU6及变体P-R-Leaky、ELU、SELU、Swish、Mish、Maxout、hard-sigmoid、hard-swish)

非线性激活函数详解 饱和激活函数Sigmoid函数tanh函数hard-Sigmoid函数 非饱和激活函数Relu(修正线性单元):Relu6(抑制其最大值):ELU(指数线性单元)SELULeaky-Relu / R-ReluP-Relu&a…

激活函数详解(ReLU/Leaky ReLU/ELU/SELU/Swish/Maxout/Sigmoid/tanh)

神经网络中使用激活函数来加入非线性因素,提高模型的表达能力。 ReLU(Rectified Linear Unit,修正线性单元) 形式如下: ReLU公式近似推导:: 下面解释上述公式中的softplus,Noisy ReLU. softplus函数与ReLU函数接近,但比较平滑, 同ReLU一样是单边抑制,有宽广的接受…

【卷积神经网络】12、激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / Mish

文章目录 一、Tanh二、Sigmoid三、ReLU四、Leaky ReLU五、ELU六、SiLU七、Mish 本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点 最简单的激活函数被称为线性激活,其中没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练,但不能学…

神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)

神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout) 常规 sigmoid 和 tanh sigmoid 特点:可以解释,比如将0-1之间的取值解释成一个神经元的激活率(firing rate) 缺陷&#xff1…

神经网络激活函数优缺点和比较(sigmod,tanh,relu,softmax,leaky relu,ELU,SELU)

文章目录 前言一、sigmoid函数二、tanh函数三,ReLU函数四, Leaky ReLU五,ELU指数线性单元函数&SELU函数六,softmax函数 前言 理想的激活函数应该有的性质 非线性:这个条件是多层神经网络形成的基础,保…

常用激活函数:Sigmoid/Softmax/ELU/ReLU/LeakyReLU/Tanh...(Pytorch)

激活函数 一、Sigmoid1.介绍2.实例 二、Softmax1.介绍2.实例 三、ELU:指数线性单元函数1.介绍2.实例 四、ReLU:整流线性单元函数1.介绍2.实例 五、ReLU61.介绍2.实例 六、LeakyReLU1.介绍2.实例 七、Tanh:双曲正切函数1.介绍2.实例 一、Sigmo…

【深度学习】论文导读:ELU激活函数的提出(FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS))

论文下载: FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)(2016,Djork-Arne Clevert, Thomas Unterthiner & Sepp Hochreiter) 一、简介 ELU的表达式: 四种激活函数&#xff0…

ReLU、LReLU、PReLU、CReLU、ELU、SELU

ReLULReLUPReLUCReLUELUSELUReLU tensorflow中:tf.nn.relu(features, name=None) LReLU (Leaky-ReLU) 其中 ai 是固定的。 i 表示不同的通道对应不同的

机器学习中的数学——激活函数(五):ELU函数

分类目录:《机器学习中的数学》总目录 相关文章: 激活函数:基础知识 激活函数(一):Sigmoid函数 激活函数(二):双曲正切函数(Tanh函数) 激活函…

npm的安装,卸载以及版本回退

我之前在电脑上安装了Node.js V15.12.0这个版本,它对应的npm版本为 7.6.3 后来因为npm install --registryhttps://registry.npm.taobao.org总是报错。 度娘说npm7.x的版本比npm6.x更严格。 因此我回退npm版本到6.X。 于是我重装了node V13.10.1,但是…

Linux安装与卸载nodejs/卸载npm

编译mediasoup, 需要先安装nodejs npm。但是我一不小心&#xff0c;安装了最新的14.x版本。结果老出问题&#xff1a; npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at: npm ERR! <https://npm.community>npm …

npm 卸载及安装流程

1.卸载 1.将node的安装目录nodejs文件夹清空 2.查找.npmrc文件删除&#xff08;在用户文件夹下&#xff09; 2.安装 1.到node官网下载安装包 2.傻瓜式安装 3.完成后 node -v npm -v 查看是否安装成功&#xff0c;此时npm 并不是最新版 4.配置npm的全局模块的存放路径以及cac…

Node.js的卸载

Node.js的卸载 在控制面板-程序-程序和功能中卸载卸载后 到文件夹中进行进一步的删除检查环境变量中Path中有没有最后 重启一下 结束[随手记账单小程序 期待大家的反馈](https://mp.weixin.qq.com/s/RaFSpVov33bZDUn-aSXa1w) 在控制面板-程序-程序和功能中卸载 确保node.js没有…

npm的卸载与安装流程

安装&#xff08;npm 和node是一起的&#xff0c;安装成功node后就会自带npm&#xff09; 1、下载地址为&#xff1a;https://nodejs.org/en/ 2、检查是否安装成功&#xff1a;如果输出版本号&#xff0c;说明我们安装node环境成功 3、为了提高我们的效率&#xff0c;可以使用…