【漫话机器学习系列】148.Softplus 函数

news/2025/3/27 0:03:28/

Softplus 函数详解

1. Softplus 函数介绍

Softplus 函数是一种用于神经网络和深度学习的激活函数,其数学表达式如下:

f(x) = \log(1 + e^x)

Softplus 函数是一种平滑的非线性激活函数,与 ReLU(Rectified Linear Unit,修正线性单元)具有相似的特性,但在 x 轴的负方向具有更平滑的渐变。

2. Softplus 的数学性质

Softplus 函数有以下几个重要的数学性质:

  1. 平滑性:Softplus 函数是一个平滑的函数,相较于 ReLU,Softplus 在 x = 0 处的过渡更加平滑,这使得它的导数不会出现不连续的情况。

  2. 导数(梯度): 通过对 Softplus 进行求导,我们可以得到:

    f'(x) = \frac{d}{dx} \log(1 + e^x) = \frac{e^x}{1 + e^x} = \sigma(x)

    这里的 \sigma(x) 就是 Sigmoid 函数

    \sigma(x) = \frac{1}{1 + e^{-x}}

    这意味着 Softplus 函数的导数与 Sigmoid 函数完全一致。

  3. 数值范围

    • x \to -\infty 时,e^x 变得非常小,因此 Softplus 近似于 0。

    • x \to +\infty 时,e^x 变得非常大,因此 Softplus 近似于 x(即 ReLU)。

  4. 与 ReLU 的关系

    • x \gg 0 时,Softplus 近似于 ReLU,即 f(x) \approx x

    • x \ll 0 时,Softplus 近似于 0,而 ReLU 在 x < 0 时是严格等于 0。

    由于 Softplus 平滑且可导,它常用于某些需要稳定梯度的场景。

3. Softplus 在深度学习中的应用

Softplus 函数在神经网络和深度学习中主要用作 激活函数,其主要应用场景如下:

  1. 用于替代 ReLU: 由于 ReLU 在 x = 0 处不可导,在某些优化问题中可能会导致梯度消失或者梯度不稳定。Softplus 作为 ReLU 的平滑近似,可以减少这些问题。

  2. 用于概率模型: 在某些概率模型(如高斯混合模型)中,Softplus 作为非负函数,被用来确保参数始终为正。例如,在变分自编码器(VAE)中,Softplus 可以用于保证方差参数始终为正。

  3. 用于稳定训练: 由于 Softplus 具有光滑的导数,它在某些需要稳定梯度的深度学习任务中比 ReLU 更合适,比如处理小批量数据或者避免梯度爆炸。

4. 代码示例

可以使用 Python 和 TensorFlow(或 PyTorch)来实现 Softplus 函数。

TensorFlow 实现:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt# 定义 Softplus 函数
def softplus(x):return tf.math.log(1 + tf.exp(x))# 生成输入数据
x = np.linspace(-10, 10, 100)# 计算 Softplus 值
y = softplus(x)# 画图
plt.plot(x, y, label="Softplus")
plt.xlabel("x")
plt.ylabel("Softplus(x)")
plt.title("Softplus Function")
plt.legend()
plt.grid()
plt.show()

PyTorch 实现:

import torch
import matplotlib.pyplot as plt
import numpy as np# 定义 Softplus 函数
softplus = torch.nn.Softplus()# 生成输入数据
x = torch.linspace(-10, 10, 100)# 计算 Softplus 值
y = softplus(x)# 画图
plt.plot(x.numpy(), y.numpy(), label="Softplus")
plt.xlabel("x")
plt.ylabel("Softplus(x)")
plt.title("Softplus Function")
plt.legend()
plt.grid()
plt.show()

5. 结论

Softplus 是一个平滑的、可微的激活函数,与 ReLU 具有类似的特性,但在负数区域具有更好的梯度表现。由于其导数是 Sigmoid,它在某些优化任务中具有稳定的梯度,适用于需要平滑非线性变换的神经网络应用。虽然在实际应用中 ReLU 由于计算效率较高而更受欢迎,但 Softplus 在某些特殊场景(如概率模型、变分推断)中仍然具有重要的价值。


http://www.ppmy.cn/news/1582587.html

相关文章

关于Unity的CanvasRenderer报错

MissingReferenceException: The object of type ‘CanvasRenderer’ has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. UnityEngine.UI.GraphicRaycaster.Raycast (UnityEng…

【Java导出word】使用poi-tl轻松实现Java导出数据到Word文档

文章目录 一、前言二、环境准备三、使用流程1、 标准DOCX模板创建2. 占位符语法详解 四、实战代码示例单测代码执行结果&#xff1a; 总结 一、前言 Word文档动态生成长期面临三大痛点&#xff1a; 传统POI的API操作繁琐&#xff08;需手动创建Run/Paragraph等元素&#xff0…

【css酷炫效果】纯CSS实现科技感网格背景

【css酷炫效果】纯CSS实现科技感网格背景 缘创作背景html结构css样式完整代码基础版进阶版(3D光线扫描版) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;上传后更新 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&#xff0c;赶时间&a…

华为手机新品将采用新屏幕形态,3月20日揭晓谜底

在科技飞速发展的当下,智能手机市场的竞争可谓白热化。各大厂商不断推陈出新,试图在这片红海之中抢占更多份额。而华为,作为其中的佼佼者,一直以创新为驱动,致力于为消费者带来前所未有的体验。年初,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东在社交媒…

掌握新编程语言的秘诀:利用 AI 快速上手 Python、Go、Java 和 Rust

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

嘉为科技 前端实习 面经(OC)

问到了前端很深的知识&#xff08;也很反套路&#xff09;&#xff0c;可能是前面跟面试官吹了大半个小时鸿蒙让他很感兴趣&#xff0c;对我期待值比较高的原因。but我前端可以说是一点不行~还好面完光速oc了 时间77分钟&#xff0c;小插曲因为在酒店里面试&#xff0c;网络特别…

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量&#xff1b; Go语言版本&#xff1a;1.23.2 Windows版本&#xff1a;win11&#xff08;win10通用&#xff09; 下载Go环境 下载go环境&#xff1a;Go下载官网链接(https://golang.google.cn/dl/) 等待…

Apache Seatunnel

1. Apache seatunnel简介 Apache seatunnel是一个分布式数据集成平台&#xff0c;架构于Apache spark和Apache flink之上&#xff0c;实现海量数据的实时同步与转换。 1.1. 背景 随着各种类型的数据库快速发展&#xff0c;各种数据库之间的同步与转换需求激增&#xff0c;数…