You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知ReLU可由可微Softplus近似,如何近似Leaky ReLU?

好问题!既然ReLU能用Softplus(softplus(x) = ln(1 + e^x))这个可微函数来平滑近似,那Leaky ReLU的可微版本其实可以照着类似的思路推导出来——核心就是把Leaky ReLU的硬分支切换(x≥0时输出x,x<0时输出αx,α是小于1的正数,比如0.01)改成平滑的过渡。

先明确下Leaky ReLU的定义,用代码写出来是这样的:

def leaky_relu(x, alpha=0.01):
    return max(alpha * x, x)
    # 或者分情况写:
    # return x if x >= 0 else alpha * x

下面给你两种常用的可微近似方案,各有特点:

1. 基于平滑最大值的近似

Softplus本质上是ReLU的平滑max形式(max(0, x)的平滑版是ln(1 + e^x)),那Leaky ReLU是max(αx, x),对应的平滑版就可以直接写成:

import numpy as np

def soft_leaky_relu_smoothmax(x, alpha=0.01):
    return np.log(np.exp(x) + np.exp(alpha * x))

这个函数的特性很贴合Leaky ReLU:

  • 当x是很大的正数时,e^x远大于e^(αx),所以ln(e^x + ...)近似等于x,符合Leaky ReLU的正区间输出;
  • 当x是很小的负数时,e^(αx)远大于e^x,结果近似等于αx,完美匹配负区间的线性输出;
  • 整个函数处处可微,不需要额外调参,过渡的平滑度是固定的。

2. 基于Sigmoid平滑指示函数的近似

如果需要灵活控制x=0附近的平滑程度,可以用Sigmoid函数来近似Leaky ReLU里的分支切换逻辑(指示函数I(x≥0)可以用sigmoid(bx)来近似,b是控制陡峭度的参数,b越大越接近硬阶跃)。

对应的可微版本是:

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def soft_leaky_relu_sigmoid(x, alpha=0.01, b=100):
    # 核心是用sigmoid把两个分支平滑结合
    return x * (alpha + (1 - alpha) * sigmoid(b * x))

这个方案的好处是可调性强:

  • 当b取很大的值(比如100)时,sigmoid(bx)几乎就是阶跃函数,这个近似就和原始Leaky ReLU几乎一致;
  • 如果需要更平滑的过渡(比如避免梯度突变),可以减小b的值(比如10),让x=0附近的梯度变化更平缓。

这两种方法都是完全可微的,能完美适配反向传播的需求——当你需要Leaky ReLU的负区间非零梯度特性,但又要求函数处处可微时(比如某些优化算法的约束,或者需要避免硬阶跃带来的数值不稳定),就可以用这些近似函数。

内容的提问来源于stack exchange,提问作者Hamza Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:33:00