神经网络常见激活函数 15-B-SiLU 函数

文章目录

B-SiLU (Bounded Sigmoid Linear Unit)

  • 论文

    https://arxiv.org/pdf/2505.22074

    结合了 SiLU 的自门控特性与可调下限参数,B-SiLU 通过 SUGAR(Surrogate Gradient for ReLU)方法用于解决 ReLU 的「死亡 ReLU 问题」,在前向传播中保持 ReLU 的稀疏性,而在反向传播中 作为 ReLU 的平滑导数替代函数。实验表明,SUGAR 结合 B-SiLU 在 CIFAR-10 和 CIFAR-100 数据集上显著提升了 VGG-16 和 ResNet-18 的测试准确率,分别提升 10-16 个百分点,优于其他替代函数(如 ELU、SELU、LeakyReLU 等。

  • 这篇中,作为ReLU的梯度替代,同时还有一个NELU被提出,但是感觉效果不太好,后续就不写了

函数+导函数

  • B-SiLU函数
    B - S i L U ( x ) = ( x + α ) ⋅ σ ( x ) − α 2 = x + α 1 + e − x − α 2 \begin{aligned} \mathrm{B\text{-}SiLU}(x) &= (x + \alpha) \cdot \sigma(x) - \frac{\alpha}{2} \\ &= \frac{x + \alpha}{1 + e^{-x}} - \frac{\alpha}{2} \end{aligned} B-SiLU(x)=(x+α)⋅σ(x)−2α=1+e−xx+α−2α

    α=0 时,B-SiLU 退化为 SiLU/Swish-1。

  • B-SiLU函数导数
    d d x B - S i L U ( x ) = ( x + α ) ⋅ σ ( x ) − α 2 ′ = σ ( x ) + ( x + α ) d d x σ ( x ) = σ ( x ) + ( x + α ) ⋅ σ ( x ) ( 1 − σ ( x ) ) \begin{aligned} \frac{d}{dx} \mathrm{B\text{-}SiLU}(x) &= \left(x + \\alpha)\\cdot\\sigma(x) - \\frac{\\alpha}{2}\\right' \\ &=\sigma(x) + (x+\alpha) \frac{d}{dx}\sigma(x)\\ &= \sigma(x) + (x + \alpha)\cdot\sigma(x)\bigl(1 - \sigma(x)\bigr) \end{aligned} dxdB-SiLU(x)=(x+α)⋅σ(x)−2α′=σ(x)+(x+α)dxdσ(x)=σ(x)+(x+α)⋅σ(x)(1−σ(x))

    其中 σ ( ⋅ ) \sigma(\cdot) σ(⋅) 为 Sigmoid 函数, α = 1.67 \alpha=1.67 α=1.67(论文建议值)。且
    d d x σ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \frac{d}{dx}\sigma(x) = \sigma(x)(1-\sigma(x)) dxdσ(x)=σ(x)(1−σ(x))


函数和导函数图像

  • 画图

    python 复制代码
    import numpy as np
    from matplotlib import pyplot as plt
    
    def b_silu(x, alpha=1.67):
        return (x + alpha) / (1 + np.exp(-x)) - alpha / 2
    
    def b_silu_derivative(x, alpha=1.67):
        sig = 1 / (1 + np.exp(-x))
        return sig + (x + alpha) * sig * (1 - sig)
    
    x = np.linspace(-6, 6, 1000)
    y  = b_silu(x)
    y1 = b_silu_derivative(x)
    
    plt.figure(figsize=(12, 8))
    ax = plt.gca()
    plt.plot(x, y,  label='B-SiLU')
    plt.plot(x, y1, label='Derivative')
    plt.title('B-SiLU (α=1.67) and Derivative')
    
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.spines['bottom'].set_position(('data', 0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data', 0))
    
    plt.legend(loc=2)
    plt.savefig('./b_silu.jpg')
    plt.show()


优缺点

  • B-SiLU 的优点

    1. 有界输出:下限 − α / 2 -\alpha/2 −α/2、上限趋于 + ∞ +\infty +∞。
    2. 平滑可导:避免 ReLU 的"死亡"现象,反向传播更稳定。
    3. 非单调性:负区间小负值仍保留部分梯度,有利于信息流动。
    4. 兼容 ReLU:前向与 ReLU 近似,易于替换且无需大幅调参。
  • B-SiLU 的缺点

    1. 计算量略高:相比 ReLU 多了 sigmoid 运算。
    2. 超参数 α \alpha α:需要针对任务微调,通用性稍逊。
    3. 研究阶段:目前应用案例不如 ReLU/Swish 丰富。

PyTorch 中的 B-SiLU

  • 代码

    python 复制代码
    import torch
    import torch.nn.functional as F
    
    torch.manual_seed(1024)
    
    def b_silu(x, alpha=1.67):
        return (x + alpha) * torch.sigmoid(x) - alpha / 2
    
    x = torch.randn(3)
    y = b_silu(x)
    print("x:", x)
    print("B-SiLU(x):", y)

    输出示例

    复制代码
    x: tensor([-1.4837,  0.2671, -1.8337])
    B-SiLU(x): tensor([-0.8006,  0.2622, -0.8576])

TensorFlow 中的 B-SiLU

  • 代码

    python 复制代码
    import tensorflow as tf
    
    @tf.function
    def b_silu(x, alpha=1.67):
        return (x + alpha) * tf.nn.sigmoid(x) - alpha / 2
    
    x = tf.constant([-1.4837,  0.2671, -1.8337], dtype=tf.float32)
    y = b_silu(x)
    print("x:", x.numpy())
    print("B-SiLU(x):", y.numpy())

    输出示例

    复制代码
    x: [-1.4837  0.2671 -1.8337]
    B-SiLU(x): [-0.80055887  0.2621364  -0.85755754]

备注

  • 这篇论文发布于2025年5月,目前这个B-SiLU 在反向传播中 作为 ReLU 的平滑导数替代函数。所以暂时这里只关注
相关推荐
火山引擎开发者社区2 小时前
没有长期记忆,Agent 谈何持续进化?一图看懂火山 Mem0:解锁 Agent 持续学习与进化之路
人工智能
冬奇Lab5 小时前
Workflow 系列(06):安全——跨步骤注入传播与四层防御
人工智能·工作流引擎
冬奇Lab5 小时前
每日一个开源项目(第149篇):RAG-Anything - 把图片、表格、公式当成一等公民的多模态 RAG 框架
人工智能·开源
米小虾6 小时前
AI Agent 安全实战指南:当智能体开始"不听话",开发者该如何应对?
人工智能·安全·agent
IT_陈寒7 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
阿里云大数据AI技术9 小时前
构建高转化海外电商搜索:阿里云OpenSearch行业算法版的全链路智能优化策略实战
人工智能·搜索引擎
Awu12279 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
字节跳动视频云技术团队9 小时前
让 Agent 成为音视频工作台:AI MediaKit CLI + Skill 发布
人工智能·音视频开发
魏祖潇9 小时前
framework 整合实战——DDD/TDD/SDD 三件套在 framework 仓的真实落地
人工智能·后端