ReLU的变体

article/2025/8/12 8:09:15

在深度学习中,ReLU(Rectified Linear Unit)是最常用的激活函数之一,但其存在一些局限性(如死亡ReLU问题)。为解决这些问题,研究者们提出了多种变体。以下是常见的ReLU变体及其核心特点:

一、基础ReLU及其问题

公式
ReLU ( x ) = max ⁡ ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
在这里插入图片描述

局限性

  1. 死亡ReLU问题:当输入为负数时,梯度为0,导致神经元无法更新。
  2. 输出非零中心化:均值恒大于0,可能导致梯度更新不稳定。

二、主要变体

1. LeakyReLU(带泄露的ReLU)

公式
LeakyReLU ( x ) = { x , if  x ≥ 0 α x , if  x < 0 \text{LeakyReLU}(x) = \begin{cases} x, & \text{if } x \geq 0 \\ \alpha x, & \text{if } x < 0 \end{cases} LeakyReLU(x)={x,αx,if x0if x<0
其中 α \alpha α 是一个小的常数(如0.01),允许负数输入有非零梯度。
在这里插入图片描述

特点

  • 解决死亡ReLU问题,保证所有输入都有梯度。
  • PyTorch实现:nn.LeakyReLU(alpha)
2. PReLU(参数化ReLU)

公式
PReLU ( x ) = { x , if  x ≥ 0 α x , if  x < 0 \text{PReLU}(x) = \begin{cases} x, & \text{if } x \geq 0 \\ \alpha x, & \text{if } x < 0 \end{cases} PReLU(x)={x,αx,if x0if x<0
其中 α \alpha α 是可学习的参数,不同通道或神经元可拥有不同的 α \alpha α 值。

下面的prelu图像我设置了weight=0.01,所以初始的时候跟leaky_relu形状好像是一样的,不过prelu的weight可学习,后面能动态调整

特点

  • 比LeakyReLU更灵活,通过学习优化 α \alpha α 值。
  • PyTorch实现:nn.PReLU(num_parameters=1, init=0.25)
3. ELU(指数线性单元)

公式
ELU ( x ) = { x , if  x ≥ 0 α ( exp ⁡ ( x ) − 1 ) , if  x < 0 \text{ELU}(x) = \begin{cases} x, & \text{if } x \geq 0 \\ \alpha (\exp(x) - 1), & \text{if } x < 0 \end{cases} ELU(x)={x,α(exp(x)1),if x0if x<0
其中 α \alpha α 是超参数,通常取1。
在这里插入图片描述

特点

  • 输出均值接近0,减轻梯度消失问题。
  • 负值部分具有软饱和性,对噪声更鲁棒。
  • PyTorch实现:nn.ELU(alpha=1.0)
4. SELU(缩放指数线性单元)

公式
SELU ( x ) = λ ⋅ { x , if  x ≥ 0 α ( exp ⁡ ( x ) − 1 ) , if  x < 0 \text{SELU}(x) = \lambda \cdot \begin{cases} x, & \text{if } x \geq 0 \\ \alpha (\exp(x) - 1), & \text{if } x < 0 \end{cases} SELU(x)=λ{x,α(exp(x)1),if x0if x<0
其中 λ ≈ 1.0507 \lambda \approx 1.0507 λ1.0507 α ≈ 1.67326 \alpha \approx 1.67326 α1.67326 是固定!常量。
在这里插入图片描述

特点

  • 具有自归一化特性(Self-Normalizing),输入会自动保持均值为0、方差为1。
  • 需配合高斯初始化使用,否则可能失效。
  • PyTorch实现:nn.SELU()
5. GELU(高斯误差线性单元)

公式
GELU ( x ) = x ⋅ Φ ( x ) ≈ 0.5 x ( 1 + tanh ⁡ ( 2 π ( x + 0.044715 x 3 ) ) ) \text{GELU}(x) = x \cdot \Phi(x) \approx 0.5x \left(1 + \tanh\left(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right)\right) GELU(x)=xΦ(x)0.5x(1+tanh(π2 (x+0.044715x3)))
其中 Φ ( x ) \Phi(x) Φ(x) 是标准正态分布的累积分布函数。
在这里插入图片描述

特点

  • 被广泛用于Transformer架构(如BERT、GPT)。
  • 输入值越大,激活越“软”(相比ReLU的硬阈值)。
  • PyTorch实现:nn.GELU()
6. Swish/SiLU(自门控线性单元)

公式
Swish ( x ) = x ⋅ σ ( x ) \text{Swish}(x) = x \cdot \sigma(x) Swish(x)=xσ(x)
其中 σ ( x ) \sigma(x) σ(x) 是Sigmoid函数。
在这里插入图片描述

特点

  • 平滑连续,在深层网络中表现优于ReLU。
  • 被证明具有自门控特性,类似LSTM中的门控机制。
  • PyTorch实现:nn.SiLU()(SiLU是Swish的别名)
7. Mish

公式
Mish ( x ) = x ⋅ tanh ⁡ ( softplus ( x ) ) = x ⋅ tanh ⁡ ( ln ⁡ ( 1 + exp ⁡ ( x ) ) ) \text{Mish}(x) = x \cdot \tanh(\text{softplus}(x)) = x \cdot \tanh(\ln(1 + \exp(x))) Mish(x)=xtanh(softplus(x))=xtanh(ln(1+exp(x)))
在这里插入图片描述

特点

  • 无上界、有下界,平滑连续,且在负值区域有轻微的非零梯度。
  • 在图像、语音等任务中表现优异,但计算成本较高。
  • PyTorch实现:nn.Mish()

三、其他变体

  • RReLU(随机LeakyReLU): α \alpha α 在训练时随机采样,测试时固定为均值,增强正则化效果。
  • GeLU:GELU的近似版本,计算效率更高。
  • Softplus Softplus ( x ) = ln ⁡ ( 1 + exp ⁡ ( x ) ) \text{Softplus}(x) = \ln(1 + \exp(x)) Softplus(x)=ln(1+exp(x)),ReLU的平滑近似。
  • ThresholdReLU:当输入超过阈值时才激活,否则输出0。

四、选择建议

场景推荐激活函数
常规计算机视觉任务ReLU / LeakyReLU
自然语言处理(Transformer)GELU / Swish
需要自归一化特性SELU
对梯度消失敏感的深层网络ELU / Mish
轻量级模型或边缘计算ReLU / LeakyReLU

五、总结

ReLU变体通过引入负值区域的梯度(如LeakyReLU、PReLU)、平滑性(如GELU、Swish)或自归一化(如SELU)等特性,缓解了原始ReLU的局限性,提升了模型性能和训练稳定性。实际应用中,需根据任务特点和模型架构选择合适的激活函数。


http://www.hkcw.cn/article/fpRaZmHtav.shtml

相关文章

麦克风和电脑内播放声音实时识别转文字软件FunASR整合包V5下载

我基于FunASR制作的实时语音识别转文字软件当前更新到V5版本。软件可以实时识别麦克风声音和电脑内播放声音转为文字。 FunASR软件介绍 FunASR 是一款基础语音识别工具包和开源 SOTA 预训练模型&#xff0c;支持语音识别、语音活动检测、文本后处理等。 我使用FunASR制作了一…

Ollama 开放 局域网访问 外网访问 mac

目录 问题描述 搜索尝试 最终方案 问题描述 我们在本地安装Ollama模型后通过127.0.0.1:11434访问正常返回 但是无法通过局域网IP访问如&#xff1a; http://192.168.1.158:11434 搜索尝试 搜索发现需要添加环境变量 OLLAMA_HOST 才能开放外网访问 export OLLAMA_HOST0.0.…

让Windows“怀上”macOS,不要太漂亮

记得Windows 11刚发布时&#xff0c;很多人都说它“果味十足”&#xff0c;仿佛是在向macOS靠拢。虽然大家觉得Windows有点“没骨气”&#xff0c;但不得不承认&#xff0c;它的界面确实很美观。 今天给大家介绍两款软件&#xff0c;能让Windows拥有macOS的风格&#xff0c;看起…

Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)

文章目录 Gradle配置指南&#xff1a;深入解析settings.gradle.kts&#xff08;Kotlin DSL版&#xff09;settings.gradle.kts 基础配置选项单项目配置多项目配置 高级配置选项插件管理&#xff08;Plugin Management&#xff09;基础配置模板案例&#xff1a;Android项目标准配…

Android SDK安装与配置(小白教程)

目录 1、下载&#xff1a; 2、安装&#xff1a; 3、配置环境变量&#xff1a; 4、验证是否安装成功&#xff1a; Android SDK&#xff08;软件开发工具包&#xff09;是一套为开发者提供的全面工具和资源集合&#xff0c;涵盖不同版本平台、各类开发与调试工具、支持库等&a…

[wsl2]MacOS/Win局域网ssh连接wsl2:Ubuntu24.04 LTS

【wsl2】MacOS/Win局域网ssh连接wsl2&#xff1a;Ubuntu24.04 LTS 保证使用的是微软应用商店中下载的Ubuntu发行版本&#xff0c;本文在配置时发现若使用docker所基于的ubuntu系统配置会失败。遂采用默认的子发行版本。写在前面why wsl2&#xff1f;win11的好处 开始配置之前1.…

JAVA游戏打手俱乐部护航小程序+APP+公众号+h5 源码游戏陪玩小程序系统

一、系统概述 JAVA 游戏打手俱乐部护航陪玩系统是一款集小程序、APP、公众号和 H5 于一体的综合性游戏陪玩平台。该系统凭借丰富多样的功能&#xff0c;为游戏玩家和陪玩师傅搭建了便捷的沟通桥梁。其主要功能包括精准分类、优惠券管理、我的团队、师傅申请入驻、师傅端抢单机…

使用Mac下载MySQL修改密码第一篇_数据库

Mac下载MySQL MySQL官网链接MySQL​​​​​​ 当进入到官网后下滑到community社区&#xff0c;进行下载 然后选择community sever下载 这里就是要下载的界面&#xff0c;如果需要下载之前版本的话可以点击archives&#xff0c; 可能会因为这是外网原因&#xff0c;有时候下…

【Mac 从 0 到 1 保姆级配置教程 08】- 快速配置 Neovim、LazyVim 以及常用开发环境,如果之前有人这么写就好了

文章目录 2. 安装 Neovim3. 安装 LazyVim3.1. 安装依赖3.2. 安装 LazyVim3.3. 问题修复 4. 配置 LazyVim4.1. 基础知识4.2. 内置快捷键4.3. 自定义快捷键4.4. 配置主题4.5. 配置 C/C 环境4.6. 配置 JSON 和 Markdown 5. 最后6. 参考资料7. 系列教程 Mac 从 0 到 1 保姆级配置教…

Android SMS发送技术指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文详细介绍了在Android平台上如何使用编程接口&#xff08;API&#xff09;发送短信&#xff0c;包括 SmsManager 类的使用、调试技巧和设备兼容性处理。通过实例代码展示了如何实现文本消息的发送&#xf…

AndroidStudio创建Android虚拟机教程

前言 在 Android 开发的世界中&#xff0c;拥有一个可靠且灵活的测试环境是至关重要的。Android Studio 提供了虚拟设备&#xff08;AVD&#xff09;管理器&#xff0c;这是一个强大的工具&#xff0c;允许开发者创建自定义的虚拟设备来模拟不同的 Android 设备。通过 AVD&…

uniapp 小程序 web-view 打开H5页面传参以及调用postMessage回传参数

uniapp 小程序 web-view 打开H5页面传参以及调用postMessage回传参数 uniapp 运行微信小程序&#xff0c;在小程序内利用 web-view 打开H5页面进行数据流转的总结。 首先做点准备工作&#xff0c;官网明确的说了小程序是不支持本地的&#xff0c;那怎么进行调试呢&#xff0c;…

mac 下载nvm

先在终端查看是否安装brew brew -v显示版本&#xff0c;开始下一步&#xff0c;如果不显示版本&#xff0c;则需要先安装brew 安装brew 使用brew安装nvm 执行安装命令 brew install nvm配置环境变量 配置环境变量之前&#xff0c;先查看nvm下载的位置 brew list nvm这是…

Android的uid~package~pid的关系

UID &#xff1a; Linux 系统级用户标识&#xff0c;Android 中每个应用安装时分配唯一 UID&#xff08;如 1000&#xff09;。 Package&#xff1a; Android 应用包名(例如android)&#xff0c;一个 UID 可关联多个 Package&#xff08;共享 UID 场景如android:sharedUserI…

Rust 学习笔记:发布一个 crate 到 crates.io

Rust 学习笔记&#xff1a;发布一个 crate 到 crates.io Rust 学习笔记&#xff1a;发布一个 crate 到 crates.io提供有用的文档注释常用标题文档注释作为测试注释所包含的项目 使用 pub use 导出一个方便的公共 API设置 crates.io 账户添加 metadata 到一个新的 crate发布到 c…

大白话 Seata 分布式事务浅析,详解TCC模式

大家好&#xff0c;我是此林。 说到分布式事务&#xff0c;第一时间想到 Seata&#xff0c;它支持多种事务模型&#xff0c;比如&#xff1a;XA模式、AT模式、TCC模式、Saga模式(长事务)。 其中 TCC 模式是高性能分布式事务解决方案&#xff0c;适用于核心系统等对 性能有很高…

超标量处理器设计6-指令解码

1. 指令缓存 指令缓存本质上是一个FIFO, 它能够将指令按照程序中指定的顺序存储起来&#xff0c;这样指令在解码的时候&#xff0c;仍然可以按照程序中指定的顺序进行解码。指令缓存是超标量处理器中必须的部件&#xff0c;其原因有两个&#xff1a; 1. 每周期可以取指的个数大…

技嘉华硕微星主板BIOS开启TPM模块教程

目录 一. TPM模块安装 二. 在BIOS开启TPM功能 华硕主板&#xff08;Intel平台&#xff09; 华硕主板&#xff08;AMD平台&#xff09; 技嘉主板&#xff08;Intel平台&#xff09; 技嘉主板&#xff08;AMD平台&#xff09; 微星主板&#xff08;Intel平台&#xff09; …

java基础知识

ASCII码 1. next() 示例​​ 读取一个字符串&#xff08;遇到空格或换行符停止&#xff09; 运行示例&#xff1a;​​ 输入: 张三 李四 输出: 张三 // 只读取了"张三"&#xff0c;"李四"留在输入缓冲区

【解决】【亲测下载obsidian可行】打不开github.com 或者 加速访问 github

Windows系统 基本思路&#xff1a;通过修改IP绑定来实现加速访问 1、hosts文件目录 C:\Windows\System32\drivers\etc\hosts2、修改内容 2.1 ping github.com 在Windows的cmd页面下直接输入&#xff1a; ping github.comPS&#xff1a;这一步只是看一下&#xff0c;没在后…