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

ReLU 新生:从死亡困境到强势回归

背景

在深度学习领域,激活函数的探索已成为独立研究课题。诸如 GELU、SELU 和 SiLU 等新型激活函数,因具备平滑梯度与出色的收敛特性,正备受关注。经典 ReLU 凭借简洁性、固有稀疏性及其独特优势拓扑特性,依旧受青睐。然而,ReLU 网络存在重大缺陷 ——“死亡 ReLU 问题”。一旦神经元在训练中输出恒为 0,其梯度也为 0,致使神经元无法恢复,制约网络效能。为应对这一问题,LeakyReLU、PReLU、GELU、SELU、SiLU/Swish 和 ELU 等改进函数涌现。它们通过引入负预激活值的非零激活,提供不同权衡。

近期,德国吕贝克大学等机构研究者提出新型方法 SUGAR(Surrogate Gradient for ReLU),在保留 ReLU 优势的同时解决其局限性。SUGAR 于前向传播使用标准 ReLU,反向传播时以非零、连续的替代梯度函数替换 ReLU 导数,使 ReLU 能保持原始前向行为,避免梯度消失,激活死神经元。基于此,研究者设计出两种新型替代梯度函数:B-SiLU(Bounded SiLU)和 NeLU(Negative slope Linear Unit),可无缝融入多种模型。

公式推导

  • 论文标题: The Resurrection of the ReLU

  • 论文链接:https://arxiv.org/pdf/2505.22074

FGI是一种分离前向和反向梯度的操作,一般可以设计成如下方程,前向是显而易见的,主要考虑反向梯度

y = g ( x ) − s g ( g ( x ) ) + s g ( f ( x ) ) ∂ y ∂ x = ∂ ∂ x ( g ( x ) − s g ( g ( x ) ) + s g ( f ( x ) ) ) = ∂ g ( x ) ∂ x − s g ( g ( x ) ) ∂ g ( x ) ∂ g ( x ) ∂ x + ∂ s g ( f ( x ) ) ∂ f ( x ) ∂ f ( x ) ∂ x = ∂ g ( x ) ∂ x y = g(x) − sg(g(x)) + sg(f(x)) \\ \frac{∂y}{∂x} = \frac{∂}{∂x}(g(x)-sg(g(x)) + sg(f(x))) \\ =\frac{∂g(x)}{∂x} - \frac{sg(g(x))}{∂g(x)}\frac{∂g(x)}{∂x} + \frac{∂sg(f(x))}{∂f(x)}\frac{∂f(x)}{∂x} \\ =\frac{∂g(x)}{∂x} y=g(x)sg(g(x))+sg(f(x))xy=x(g(x)sg(g(x))+sg(f(x)))=xg(x)g(x)sg(g(x))xg(x)+f(x)sg(f(x))xf(x)=xg(x)

这样的方式有个缺陷,就是反向传播时依然需要对g(x)进行autodiff求导,效率低下,所以一般会直接提供g(x)的导数函数,以乘法的形式融入公式,根据这个思路可以设计如下方程

h = x ⋅ s g ( g ′ ( x ) ) y = h − s g ( h ) + s g ( f ( x ) ) ∂ y ∂ x = ∂ ∂ x ( h − s g ( h ) + s g ( f ( x ) ) ) = ∂ ∂ x ( x ∗ s g ( g ′ ( x ) ) ) − ∂ s g ( h ) ∂ h ∂ h ∂ x + s g ( f ( x ) ) ∂ f ( x ) f ( x ) x = ∂ g ( x ) ∂ x h = x · sg(g^{'}(x)) \\ y = h - sg(h) + sg(f(x)) \\ \frac{∂y}{∂x} = \frac{∂}{∂x}(h - sg(h) + sg(f(x))) \\ = \frac{∂}{∂x}(x * sg(g^{'}(x))) - \frac{∂sg(h)}{∂h}\frac{∂h}{∂x} + \frac{sg(f(x))}{∂f(x)} \frac{f(x)}{x} \\ = \frac{∂g(x)}{∂x} h=xsg(g(x))y=hsg(h)+sg(f(x))xy=x(hsg(h)+sg(f(x)))=x(xsg(g(x)))hsg(h)xh+f(x)sg(f(x))xf(x)=xg(x)

tensorflow2实现

class BSiLU_SUGAR(tf.keras.layers.Layer):def __init__(self, alpha=1.67, **kwargs):super(BSiLU_SUGAR, self).__init__(**kwargs)self.alpha = alphadef call(self, x, training=None, **kwargs):fx = tf.nn.relu(x)sigmoid_forward = tf.nn.sigmoid(x)gx = sigmoid_forward + (x + self.alpha) * sigmoid_forward * (1 - sigmoid_forward)m = x * tf.stop_gradient(gx)y = m - tf.stop_gradient(m) + tf.stop_gradient(fx)return ydef get_config(self):config = {'alpha': self.alpha}base_config = super(BSiLU_SUGAR, self).get_config()return dict(list(base_config.items()) + list(config.items()))

真实数据实验效果

数据模型lossaucuauc
自有数据mlp+relu0.09180.82420.735
自有数据mlp+新激活函数0.09160.82600.737

结论

  • 可能有一些效果,需要再其他数据集上进行更多测试得出综合结论

Reference

  1. https://mp.weixin.qq.com/s/b29WfOloGFIyh-j8EfV96A

  2. https://arxiv.org/pdf/2505.22074

  3. https://arxiv.org/pdf/2406.00177v1

http://www.lryc.cn/news/2404156.html

相关文章:

  • tensorflow image_dataset_from_directory 训练数据集构建
  • QuickJS 如何发送一封邮件 ?
  • clickhouse 和 influxdb 选型
  • GOOUUU ESP32-S3-CAM 果云科技开发板开发指南(一)(超详细!)Vscode+espidf 通过摄像头拍摄照片并存取到SD卡中,文末附源码
  • C++学习思路
  • 全流程开源!高德3D贴图生成系统,白模一键生成真实感纹理贴图
  • 使用Conda管理服务器多版本Python环境的完整指南
  • html 滚动条滚动过快会留下边框线
  • 数据通信与计算机网络——数据与信号
  • 【LLM大模型技术专题】「入门到精通系列教程」LangChain4j与Spring Boot集成开发实战指南
  • Flask 基础与实战概述
  • 东芝Toshiba e-STUDIO2110AC打印机信息
  • Vue3 GSAP动画库绑定滚动条视差效果 绑定滚动条 滚动条动画 时间轴
  • grafana-mcp-analyzer:基于 MCP 的轻量 AI 分析监控图表的运维神器!
  • git commit 执行报错 sh: -/: invalid option
  • uniapp 设置手机不息屏
  • 【题解-洛谷】B3622 枚举子集(递归实现指数型枚举)
  • (LeetCode 每日一题)3170. 删除星号以后字典序最小的字符串(贪心+栈)
  • Protobuf 中的类型查找规则
  • Python项目中添加环境配置文件
  • 【区块链基础】区块链的 Fork(分叉)深度解析:原理、类型、历史案例及共识机制的影响
  • IOS 打包账号发布上传和IOS Xcode证书配置
  • 使用 HTML + JavaScript 实现文章逐句高亮朗读功能
  • 【CSS-4】掌握CSS文字样式:从基础到高级技巧
  • 双碳时代,能源调度的难题正从“发电侧”转向“企业侧”
  • 3. 简述node.js特性与底层原理
  • OpenCV CUDA模块图像处理------创建一个模板匹配(Template Matching)对象函数createTemplateMatching()
  • 【Kubernetes】K8s 之 ETCD - 恢复备份
  • CMS、G1、ZGC、Shenandoah 的全面对比
  • RabbitMQ 学习