news 2026/4/25 21:52:27

LeakyRelu链式法则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeakyRelu链式法则
# 分解版classLeakyRelu:# 初始化def__init__(self,slope=0.1):# α是一个在训练时从一个均匀分布中随机选择的参数,用于控制负数区域的斜率self.slope=slope self.mask=Nonedefforward(self,x):self.mask=(x<=0)y=x.copy()# 复制输入数据,避免修改原数据y[self.mask]=self.slope*x[self.mask]returnydefbackward(self,dy):dx=dy.copy()# 将x<=0的值都赋为slope * x[self.mask]dx[self.mask]=self.slope*dx[self.mask]returndx# np版classLeakyRelu:# 初始化def__init__(self,slope=0.1):# α是一个在训练时从一个均匀分布中随机选择的参数,用于控制负数区域的斜率self.slope=slope self.mask=Nonedefforward(self,x):self.mask=(x<=0)# 使用np.where更高效,避免复制整个数组后再修改returnnp.where(self.mask,self.slope*x,x)defbackward(self,dy):# 使用np.where更高效,LeakyReLU的导数是:正数区域为1,负数区域为slopereturnnp.where(self.mask,self.slope*dy,dy)

链式法则

假设网络结构是:x → LeakyReLU → y → Loss

前向传播

x = -2 y = LeakyReLU(-2) = slope * (-2) = -0.2 Loss = (y - 1)² = 1.44

反向传播要求什么?
我们要计算∂Loss/∂x,也就是"当 x 变化一点点时,Loss 会变化多少"。

链式法则的应用

∂Loss/∂x = ∂Loss/∂y × ∂y/∂x ↑ ↑ 上游梯度 当前层的局部梯度

具体计算

  1. 上游传来的梯度(从 Loss 传来):

    ∂Loss/∂y = 2(y - 1) = 2(-0.2 - 1) = -2.4
  2. LeakyReLU 的局部梯度(导数):

    ∂y/∂x = slope = 0.1 (因为 x <= 0)
  3. 最终得到

    ∂Loss/∂x = (-2.4) × 0.1 = -0.24

代码对应关系

defbackward(self,dy):# dy 就是上游传来的 ∂Loss/∂y = -2.4dx=dy.copy()# 先复制上游梯度dx[self.mask]=self.slope*dx[self.mask]# 乘以局部梯度returndx# 返回 ∂Loss/∂x

所以dx(返回值)才是真正的"导数"(∂Loss/∂x),dy(输入)只是上游传过来的梯度,两者不是同一个东西。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 21:49:50

终极指南:如何用30个Illustrator脚本将设计效率提升10倍

终极指南&#xff1a;如何用30个Illustrator脚本将设计效率提升10倍 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Adobe Illustrator中重复繁琐的操作而烦恼吗&#xff1f;…

作者头像 李华
网站建设 2026/4/25 21:41:42

掌握C++异常处理:从基础到高级实践

C异常处理详解1. 异常处理基础异常是程序运行时发生的非正常情况&#xff0c;如除零错误、内存访问越界等。C通过try、catch和throw机制实现异常处理&#xff1a;try {// 可能抛出异常的代码if (denominator 0) {throw std::runtime_error("Division by zero");}res…

作者头像 李华
网站建设 2026/4/25 21:37:51

【A11】身份证号无损压缩到48位的Rust实现

方案概述 将18位身份证号&#xff08;含校验码&#xff09;压缩为48位整数&#xff08;可存储在u64的低48位&#xff09;&#xff0c;布局如下&#xff1a;字段位宽说明addr20 bits行政区划编码&#xff08;高3位0表示非大陆&#xff0c;否则为大陆&#xff09;date18 bits出生…

作者头像 李华
网站建设 2026/4/25 21:33:25

HX711数据不稳定问题

根本原因&#xff1a;PC14/PC15 是 STM32F1 的 OSC32 晶振引脚&#xff0c;即使不启用 LSE&#xff0c;这两个引脚也受备份域保护&#xff0c;有以下严重限制&#xff1a; 最大输出频率仅 3MHz&#xff08;无法可靠驱动 SCK&#xff09; 驱动能力极弱&#xff08;最大灌电流仅 …

作者头像 李华