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

神经网络常见激活函数 13-Softplus函数

文章目录

    • Softplus
      • 函数+导函数
      • 函数和导函数图像
      • 优缺点
      • PyTorch 中的 Softplus 函数
      • TensorFlow 中的 Softplus 函数

Softplus

函数+导函数

  • Softplus函数
    Softplus⁡(x)=ln⁡(1+ex)\begin{aligned} \operatorname{Softplus}(x) &= \ln \bigl(1 + e^{\,x}\bigr) \end{aligned} Softplus(x)=ln(1+ex)

  • Softplus函数导数
    ddxSoftplus⁡(x)=ddxln⁡⁣(1+ex)=11+ex⋅ex=ex1+ex=ex1+ex⋅e−xe−x=11+e−x=σ(x)\begin{aligned} \frac{d}{dx}\operatorname{Softplus}(x) &=\frac{d}{dx}\ln\!\left(1+e^{x}\right)\\ &=\frac{1}{1+e^{x}}\cdot e^{x}\\ &=\frac{e^{x}}{1+e^{x}}\\ &=\frac{e^{x}}{1+e^{x}} \cdot \frac{e^{-x}}{e^{-x}}\\ &=\frac{1}{1+e^{-x}}\\ &=\sigma(x) \end{aligned} dxdSoftplus(x)=dxdln(1+ex)=1+ex1ex=1+exex=1+exexexex=1+ex1=σ(x)
    其中,σ(x)=11+e−x\sigma(x)=\dfrac{1}{1+e^{-x}}σ(x)=1+ex1 是 sigmoid 函数。Softplus 处处可导,并且导数恰好是 sigmoid。


函数和导函数图像

  • 画图

    import numpy as np
    from matplotlib import pyplot as plt# Softplus 函数
    def softplus(x):return np.log1p(np.exp(x))# Softplus 的导数 = sigmoid
    def softplus_derivative(x):return 1 / (1 + np.exp(-x))# 生成数据
    x = np.linspace(-6, 6, 1000)
    y = softplus(x)
    y1 = softplus_derivative(x)# 绘图
    plt.figure(figsize=(12, 8))
    ax = plt.gca()
    plt.plot(x, y, label='Softplus')
    plt.plot(x, y1, label='Derivative (Sigmoid)')
    plt.title('Softplus 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()
    plt.savefig('./softplus.jpg',dpe=300)
    plt.show()3
    


优缺点

  • Softplus 的优点

    1. 平滑处处可导:Softplus 是 ReLU 的光滑近似,没有折点,避免了 ReLU 在 0 处不可导的问题。
    2. 梯度不消失:对于任意输入,梯度始终为正,并且随输入增大趋近于 1,有效缓解梯度消失。
    3. 解析形式简单:公式简洁,易于实现,且与 sigmoid 有天然联系。
    4. 连续可导:在需要二阶导数或高阶导数的场景(如 Hessian、自然梯度)中更容易处理。
  • Softplus 的缺点

    1. 计算开销:相比 ReLU 的逐位最大值操作,Softplus 需要计算指数和对数,计算量更大。
    2. 输出始终为正:当需要负激活值时(如残差网络中的负值路径),Softplus 无法提供。
    3. 边缘饱和:当输入为很大的负数时,Softplus 会趋于 0,虽然比 sigmoid 缓解,但仍可能带来梯度衰减。
    4. 超参数敏感:在部分任务中需要额外调整初始化或学习率,以抵消其非零均值的副作用。

PyTorch 中的 Softplus 函数

  • 代码

    import torch
    import torch.nn.functional as F# 使用 PyTorch 自带的 Softplus
    sp = F.softplusx = torch.tensor([-2.0, 0.0, 2.0])
    y = sp(x)print("x :", x)
    print("softplus(x):", y)"""输出"""
    x : tensor([-2.,  0.,  2.])
    softplus(x): tensor([0.1269, 0.6931, 2.1269])
    

TensorFlow 中的 Softplus 函数

  • 环境

    python: 3.10.9

    tensorflow: 2.19.0

  • 代码

    import tensorflow as tfsoftplus = tf.keras.activations.softplusx = tf.constant([-2.0, 0.0, 2.0])
    y = softplus(x)print("x :", x.numpy())
    print("softplus(x):", y.numpy())"""输出"""
    x : [-2.  0.  2.]
    softplus(x): [0.12692805 0.6931472  2.126928  ]
    

http://www.xdnf.cn/news/1133119.html

相关文章:

  • Linux4:线程
  • 7.16 Java基础 | 集合框架(上)
  • SM3算法工程中添加bouncycastle.bcprov.jdk15on库
  • 从函数调用到进程通信:Linux下的多语言协作实践
  • MySQL 8.0 OCP 1Z0-908 题目解析(27)
  • 解决“Windows 无法启动服务”问题指南
  • 论文导读--PQ3D:通过分段级分组实现多模态特征融合和 MTU3D:在线查询表示学习与动态空间记忆
  • C# 8.0 创建一个简单的控制台应用程序
  • 使用 CrewAI 进行股票分析:自动化投资决策的新途径
  • YAML 自动化用例中 GET vs POST 请求的参数写法差异
  • 剑指offer64_圆圈中最后剩下的数字
  • 分块(chunked) vs 滑动窗口(windowed)
  • 力扣面试150(31/150)
  • Python爬虫实战:研究PyYAML库相关技术
  • 工作第一步建立连接——ssh
  • STM32硬件I2C的注意事项
  • UniApp 多端人脸认证图片上传实现
  • Sketch 与 Figma
  • 基于 Python/PHP/Node.js 的淘宝 API 商品数据抓取开发教程
  • 个人笔记(linux/sort与uniq命令)
  • [硬件电路-28]:从简单到复杂:宇宙、芯片与虚拟世界的共通逻辑
  • 快速掌握 Kafka:从核心概念到生产级部署指南
  • 网络安全初级(XSS-labs 1-8)
  • 基于Canal实现MySQL数据库数据同步
  • 数字IC后端培训教程之数字后端项目典型项目案例解析
  • 端侧推理软件栈
  • 智慧农业新图景:物联网如何精准守护作物生长​
  • FCN语义分割笔记(1)
  • XSS-labs 1-8关
  • 系统性学习C语言-第十八讲-C语言内存函数