激活函数总结(二):ELU、SELU、GELU激活函数

news2024/10/7 12:19:40

激活函数总结(二):ELU、SELU、GELU激活函数

  • 1 引言
  • 2. 激活函数
    • 2.1 ELU(Exponential Linear Unit)激活函数
    • 2.2 SELU(Scaled Exponential Linear Unit)激活函数
    • 2.3 GELU激活函数
  • 3. 总结

1 引言

在上篇文章中已经介绍了过去大家较为常见的激活函数 (SigmoidTanhReLULeaky ReLUPReLUSwish)。在这篇文章中,会接着上文提到的众多激活函数继续进行介绍,给大家带来更多不常见的激活函数的介绍。这里放一张激活函数的机理图:
在这里插入图片描述

最后,对于文章中没有提及到的激活函数,大家可以通过评论指出,作者会在后续的文章中进行添加补充。

2. 激活函数

2.1 ELU(Exponential Linear Unit)激活函数

论文链接:https://arxiv.org/pdf/1511.07289.pdf
ELU激活函数是对ReLU激活函数的改进版本,解决了ReLU在负数区域出现的梯度截断问题。ELU的定义和数学图像分别如下所示:
E L U ( x ) = { x i f x > = 0 α ( e x − 1 ) i f x < 0 ELU(x)=\left\{ \begin{matrix} x \quad \quad \quad \quad \quad \quad if \quad x >= 0 \\ \alpha (e^x - 1) \quad \quad \quad if \quad x < 0 \end{matrix} \right. ELU(x)={xifx>=0α(ex1)ifx<0在这里插入图片描述
优点:

  • 它在所有点上都是连续的和可微的。
  • 与其他线性非饱和激活函数(如 ReLU 及其变体)相比,它有着更快的训练时间。
  • 与 ReLU 不同,它没有神经元死亡的问题。 这是因为 ELU 的梯度对于所有负值都是非零的。
  • 作为非饱和激活函数,它不会遇到梯度爆炸或消失的问题。
  • 与其他激活函数(如 ReLU 和变体、Sigmoid 和双曲正切)相比,它实现了更高的准确性。

缺点:

  • 计算速度慢。与 ReLU 及其变体相比,由于负输入涉及非线性,因此计算速度较慢
  • 无法避免梯度爆炸问题;
  • 神经网络不学习 α \alpha α 值。

注意:对于ELU激活函数,之前看到一个博主的实验中曾介绍了:ReLU+BN的效果远远大于 ELU 的效果 同时远大于 ELU+BN的效果!! 所以,这里对于ELU激活函数不做评价,大家可以作为常用激活的一个补充!

2.2 SELU(Scaled Exponential Linear Unit)激活函数

论文链接:https://arxiv.org/pdf/1706.02515.pdf

SELU(Scaled Exponential Linear Unit)激活函数是2017年提出的一种激活函数。SELU是对ELU激活函数的改进,通过引入自标准化机制,使得神经网络的隐藏层在训练过程中可以自动地保持输出的均值和方差接近于1。SELU激活函数的定义和数学图像分别如下所示:
S E L U ( x ) = s c a l e   ∗ { x i f x > 0 α ( e x − 1 ) i f x < = 0 SELU(x)=scale \ * \left\{ \begin{matrix} x \quad \quad \quad \quad \quad \quad if \quad x > 0 \\ \alpha (e^x - 1) \quad \quad \quad if \quad x <= 0 \end{matrix} \right. SELU(x)=scale {xifx>0α(ex1)ifx<=0在这里插入图片描述
其中, s c a l e scale scale α \alpha α 是用户定义的两个超参数,通常设置为:
s c a l e = 1.0507 α = 1.67326 scale = 1.0507 \\ \alpha = 1.67326 scale=1.0507α=1.67326

SELU激活函数具有以下特点:

  • 自标准化:SELU激活函数引入了自标准化机制,使得神经网络的输出在训练过程中保持均值和方差接近于1。这有助于解决神经网络中的梯度爆炸和梯度消失问题,从而使得深层网络更容易训练。
  • 激活范围:SELU激活函数在输入为负数时具有指数增长,而在输入为正数时近似于线性。这种非线性特性使得SELU在某些情况下比ReLU等激活函数表现更好。
  • 高斯分布:SELU激活函数的输出在输入接近于0时接近于高斯分布,这有助于提高神经网络的泛化能力。

需要注意的是,SELU激活函数在某些情况下可能并不适用于所有任务和网络结构。在使用SELU时,还需要注意初始化参数的设置,因为它对于网络的输出分布有严格的要求。如果不合适地使用SELU,可能会导致网络输出的均值和方差不稳定,从而影响模型的性能。

总的来说,SELU激活函数是一种值得尝试的激活函数,但是要小心其不稳定的情况!!!

2.3 GELU激活函数

论文链接:https://arxiv.org/pdf/1606.08415.pdf

GELU激活函数是一种平滑的激活函数,与Gaussian(高斯分布)相关联。GELU激活函数在输入为负数时逼近于0,输入为正数时逼近于线性激活。GELU的定义和数学图像分别如下所示:
G E L U ( x ) = 0.5 ∗ x ∗ ( 1 + t a n h ( 2 / π ∗ ( x + 0.044715 ∗ x 3 ) ) ) GELU(x) = 0.5 * x * (1 + tanh(\sqrt{2 / \pi} * (x + 0.044715 * x^3))) GELU(x)=0.5x(1+tanh(2/π (x+0.044715x3)))在这里插入图片描述
优点:

  • 平滑性:GELU是一种平滑的激活函数,在所有点上都是可导的,没有梯度截断问题。这使得在使用基于梯度的优化算法时更加稳定,有助于提高神经网络的训练效率。
  • 近似线性:对于较大的输入值,GELU函数的输出值近似于输入值。这使得它在某些情况下可以起到线性激活函数的作用,有利于模型在一定程度上保持线性特性
  • 高斯分布:GELU激活函数的输出在输入接近于0时接近于高斯分布,这有助于提高神经网络的泛化能力,使得模型更容易适应不同的数据分布。

缺点:

  • 计算开销:GELU激活函数的计算相对复杂,涉及到指数、平方根和双曲正切等运算,因此在计算资源有限的情况下可能会带来较大的计算开销。
  • 趋向于线性:对于较大的输入值,GELU函数的输出趋向于线性,可能会导致一些非线性特性的丢失

当前,GELU激活函数广泛应用于各个领域!!!尤其是在transformer模型中更为普遍!!!

3. 总结

到此,使用 激活函数总结(二) 已经介绍完毕了!!! 如果有什么疑问欢迎在评论区提出,对于共性问题可能会后续添加到文章介绍中。如果存在没有提及的激活函数也可以在评论区提出,后续会对其进行添加!!!!

如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/846445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS Pro字段操作代码汇总

属性表是GIS数据的重要组成部分&#xff0c;有了属性表才可以进行分析和分类配色等操作&#xff0c;这里为大家介绍一下ArcGIS Pro中字段操作的相关代码&#xff0c;希望能对你有所帮助。 关键词搜索 打开属性表&#xff0c;点击按属性选择&#xff0c;如下图所示。 点击按属…

【java】final

final final修饰属性fianl修饰方法fianl修饰类 final修饰属性 final可以修饰变量&#xff1a;变量的值一旦初始化后无法修改 final可以修饰属性&#xff1a;那么JVM无法自动进行初始化&#xff0c;需要自己进行初始化, 属性值不能发生变化。 public class chapter15 {public …

鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目…

嵌入式系统开发平台

嵌入式系统开发平台 嵌入式系统开发是一项关键的技术领域&#xff0c;涵盖了从传统家用电器到现代智能手机、智能车辆等各种应用的广泛范围。在学习和开发过程中&#xff0c;选择适合的开发平台对于项目的成功至关重要。本文将介绍几个常用的嵌入式系统开发平台&#xff0c;提…

深入理解Linux内核--信号

信号的作用 信号(signal)是很短的消息&#xff0c;可以被发送到一个进程或一组进程。发送给进程的唯一信息通常是一个数&#xff0c;以此来标识信号。在标准信号中&#xff0c;对参数、消息或者其他相随的信息没有给予关注。 使用信号的两个主要目的是&#xff1a;1.让进程知道…

【Linux命令详解 | cat命令】Linux系统中用于显示或连接文件的命令

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 显示文件内容2. 创建文件3. 连接文件4. 显示行号5. 压缩空行6. 显示特殊字符7. 显示行号和特殊字符8. 从标准输入读取9. 显示文件开头或结尾10. 备份文件11. 显示文件内容至多屏幕大小12. 转义正则表达式13. 显示…

线段树模板12

线段树 洛谷上有两道线段树模板&#xff08;指模板1&#xff0c;模板2&#xff09;都是区间维护的&#xff0c;也就是说&#xff0c;都离不开lasytag的维护&#xff0c;为了提高效率&#xff0c;故使用了lasytag,这里看一下题 【模板】线段树 1 题目描述 如题&#xff0c;已…

ChatGLM实战:基于LangChain构建自己的私有知识库

作者简介&#xff1a;赵辉&#xff0c;区块链技术专家&#xff0c;精通各种联盟链、公链的底层原理&#xff0c;拥有丰富的区块链应用开发经验。 在之前的 ChatGLM 微调训练的实验中&#xff0c;由于数据量较小&#xff0c;调试效果并不理想。同时&#xff0c;数据需要符合 Pro…

项目管理和产品管理之间的区别

产品管理和项目管理是两个在企业中至关重要的职能部门&#xff0c;它们各自承担着不同的职责和任务。虽然两者在某些方面存在重叠&#xff0c;但它们的核心目标和方法有很大的不同。本文将对产品管理和项目管理进行详细的比较和分析。 “项目管理和产品管理有什么区别&#xff…

一周 AIGC 丨苹果下架多款 AIGC 应用,阿里云开源通义千问 70 亿参数模型

多个 AIGC 应用在苹果应用商店下架&#xff0c;包含数据采集和使用不够规范等问题。阿里云开源通义千问 70 亿参数模型&#xff0c;包括通用模型 Qwen-7 B 和对话模型 Qwen-7 B-Chat。腾讯混元大模型开始应用内测&#xff0c;内部多个业务线接入测试。百度智能云“千帆大模型平…

textarea 标签如何创建多行文本输入框?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ textarea 的写法⭐ 代码含义⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、…

看门狗文章

1. iwdg.c #include "stm32f4xx.h" #include "iwdg.h"//prer&#xff1a;预分频值 //rlr&#xff1a;自动重装载值 void IWDG_Init(unsigned char prer,unsigned int rlr)//IWDG初始化 {IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);…

Grafana V10 告警推送 邮件

最近项目建设完成&#xff0c;一个城域网项目&#xff0c;相关zabbix和grafana展示已经完&#xff0c;想了想&#xff0c;不想天天看平台去盯网络监控平台&#xff0c;索性对告警进行分类调整&#xff0c;增加告警的推送&#xff0c;和相关部门的提醒&#xff0c;其他部门看不懂…

linux网络编程--线程池UDP

目录 学习目标 1线程池 2.UDP通信 3本地socket通信 学习目标 了解线程池模型的设计思想能看懂线程池实现源码掌握tcp和udp的优缺点和使用场景说出udp服务器通信流程说出udp客户端通信流程独立实现udp服务器代码独立实现udp客户端代码熟练掌握本地套接字进行本地进程通信 1…

【网络】自定义协议 | 序列化和反序列化 | Jsoncpp

本文首发于 慕雪的寒舍 以tcpServer的计算器服务为例&#xff0c;实现用jsoncpp来进行序列化和反序列化 阅读本文之前&#xff0c;请先阅读 自定义协议 | 序列化和反序列化 | 以tcpServer为例 1.安装jsoncpp 我所用的系统是centos7.6&#xff0c;先用下面的命令查找相关的包 …

AST还原实战| 实战还原一个22M的混淆js大文件

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1. 需求分析 之前有星友发了这个大文件在群里: https://t.zsxq.com/10…

CountDownLatch 使用详情

CountDownLatch 是 Java.util.concurrent 包下的一个类&#xff0c;它可以用来实现一个或多个线程等待其他线程完成后再继续执行的场景。 CountDownLatch 类中有一个计数器&#xff0c;每次调用 countDown() 方法计数器的值减1&#xff0c;当计数器的值变为0时&#xff0c;调用…

面向大模型的存储加速方案设计和实践

这是 AI 大底座系列云智公开课的第三期内容。前两期我的两位同事已经向大家介绍了高性能网络和 GPU 容器虚拟化的相关内容。今天我们把目光聚焦在存储方向&#xff0c;一起来看看面向大模型的存储加速方案的设计和实践。 今天将从以下三个方面来展开这次分享&#xff1a; 介绍…

APP外包开发的Flutter框架

Flutter 是一种流行的开源UI框架&#xff0c;由谷歌开发&#xff0c;用于构建跨平台的移动应用程序。它使用一套统一的代码库&#xff0c;可以在多个平台上&#xff08;如Android、iOS、Web、桌面等&#xff09;保持一致的外观和行为。今天和大家分享一些基于 Flutter 开发的常…

CI/CD持续集成持续发布(jenkins)

1.背景 在实际开发中&#xff0c;我们经常要一边开发一边测试&#xff0c;当然这里说的测试并不是程序员对自己代码的单元测试&#xff0c;而是同组程序员将代码提交后&#xff0c;由测试人员测试&#xff1b; 或者前后端分离后&#xff0c;经常会修改接口&#xff0c;然后重新…