当前位置: 首页 > java >正文

ReLU的变体

在深度学习中,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.xdnf.cn/news/10354.html

相关文章:

  • 基于ZYNQ ARM+FPGA异构平台的声呐数据采集系统设计
  • Amazon Augmented AI:人类智慧与AI协作,破解机器学习审核难题
  • 【配置vscode默认终端为git bash】
  • ArcGIS Pro 创建渔网格网过大,只有几个格网的解决方案
  • (面试)OkHttp实现原理
  • AWS之迁移与传输服务
  • Java八股文智能体——Agent提示词(Prompt)
  • linux 后记
  • [总结]前端性能指标分析、性能监控与分析、Lighthouse性能评分分析
  • 如何用docker部署ELK?
  • vue笔记-路由
  • Java抽象工厂模式详解
  • 【STM32F1标准库】理论——定时器/计数器中断
  • CMake指令:add_executable
  • 79. Word Search
  • flask pyinstaller打包exe,出现module not found问题
  • 论文阅读(六)Open Set Video HOI detection from Action-centric Chain-of-Look Prompting
  • 终结电源反接与压降损耗:理想二极管控制器深度解析
  • 4、数据标注的武林秘籍:Label-Studio vs CVAT vs Roboflow
  • Java求职者面试题详解:Spring、Spring Boot、MyBatis技术栈
  • unix/linux source 命令,其发展历程详细时间线、由来、历史背景
  • 宝塔专属清理区域,宝塔清理MySQL日志(高效释放空间)
  • 基于SpringBoot+Redis实现RabbitMQ幂等性设计,解决MQ重复消费问题
  • Amazon GameLift实战指南:低成本构建高并发全球游戏服务器架构
  • C++ IO流
  • ToolsSet之:XML工具
  • 用户资产化视角下开源AI智能名片链动2+1模式S2B2C商城小程序的应用研究
  • 工作流引擎-05-流程引擎(Process Engine)Camunda 8 协调跨人、系统和设备的复杂业务流程
  • 用mediamtx搭建简易rtmp,rtsp视频服务器
  • 头歌之动手学人工智能-Pytorch 之优化