LeakyRelu链式法则

python 复制代码
# 分解版
class LeakyRelu:
    # 初始化
    def __init__(self, slope=0.1):
        # α是一个在训练时从一个均匀分布中随机选择的参数,用于控制负数区域的斜率
        self.slope = slope
        self.mask = None
    def forward(self, x):
        self.mask = (x <= 0)
        y = x.copy() # 复制输入数据,避免修改原数据
        y[self.mask] = self.slope * x[self.mask]
        return y
    def backward(self, dy):
        dx = dy.copy()
        # 将x<=0的值都赋为slope * x[self.mask]
        dx[self.mask] = self.slope * dx[self.mask]
        return dx
# np版
class LeakyRelu:
    # 初始化
    def __init__(self, slope=0.1):
        # α是一个在训练时从一个均匀分布中随机选择的参数,用于控制负数区域的斜率
        self.slope = slope
        self.mask = None
    
    def forward(self, x):
        self.mask = (x <= 0)
        # 使用np.where更高效,避免复制整个数组后再修改
        return np.where(self.mask, self.slope * x, x)
    
    def backward(self, dy):
        # 使用np.where更高效,LeakyReLU的导数是:正数区域为1,负数区域为slope
        return np.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

代码对应关系

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

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

相关推荐
benchmark_cc6 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
程序员无隅7 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
Python+997 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
二炮手亮子8 小时前
浅记java线程池
java·开发语言
华盈生物8 小时前
从bulk数据到组织原位观察:超多重免疫荧光成像如何为转化研究提供蛋白层线索?
深度学习·pcf·多模态数据·空间单细胞蛋白组·单细胞组织原位空间蛋白组学·组织原位空间蛋白组学·超多重蛋白成像技术
zmzb01038 小时前
C++课后习题训练记录Day157
开发语言·c++
dunge20268 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
这张生成的图像能检测吗8 小时前
(论文速读)CLUSTER-GCN:一种训练深度和大图卷积网络的有效算法
人工智能·深度学习·图神经网络·聚类算法
Omics Pro9 小时前
深度学习多组学互作:组内+组间
数据库·人工智能·深度学习·mysql·搜索引擎·自然语言处理
txg6669 小时前
机器人领域简报(2026年7月9日—16日)
人工智能·深度学习·机器人