概率模拟函数详解:sigmoid与softmax
创作时间:
作者:
@小白创作中心
概率模拟函数详解:sigmoid与softmax
引用
CSDN
1.
https://m.blog.csdn.net/weixin_38566632/article/details/140639072
概率模拟(sigmoid、softmax)
1. sigmoid
1.1 sigmoid 定义
Sigmoid函数,也称为S形函数或Logistic Function,是一种在机器学习和深度学习中广泛使用的激活函数。它的数学表达式通常定义为:
σ(x) = 1 / (1 + e^(-x))
1.2 sigmoid 主要特性
- 输出范围:Sigmoid函数的输出值域是(0, 1),这意呀着它可以将任何实数映射到(0, 1)的区间内,这个特性非常适合处理二分类问题,其中输出可以解释为属于某一类的概率。
- 单调性:Sigmoid函数在其定义域内是单调递增的,即当输入x增大时,输出σ(x)也增大。
- 导数:Sigmoid函数的导数可以用它自身来表示,即
σ'(x) = σ(x) * (1 - σ(x))
这个特性在计算梯度时非常有用,尤其是在反向传播算法中。
1.3 sigmoid 的缺点
Sigmoid函数也存在一些缺点,这些缺点限制了它在现代神经网络中的广泛应用:
- 梯度消失:当输入x的值非常大或非常小时,Sigmoid函数的梯度(即其导数)会接近于0。这会导致在训练神经网络时,反向传播算法中的梯度在通过Sigmoid激活函数时逐渐消失,从而使得权重更新非常缓慢,甚至停止更新。
- 不是零中心化(Zero-Centered):Sigmoid函数的输出总是正的,这意味着在训练过程中,神经元的输入总是正的(除非初始权重是负的)。这可能会导致梯度下降时的“之字形”路径,从而降低收敛速度。
- 计算成本高:与其他激活函数(如ReLU)相比,Sigmoid函数涉及指数运算,这可能导致计算成本更高。
尽管存在这些缺点,但在某些特定情况下(如需要输出概率值的二分类问题),Sigmoid函数仍然是一个有用的选择。此外,随着其他更高效的激活函数(如ReLU及其变体)的出现,Sigmoid函数在深度学习中的使用已经有所减少。
1.4 代码画 sigmoid 函数图像
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.linspace(start=-10, stop=10, num=30)
plt.plot(x, sigmoid(x))
plt.grid()
plt.show()
2. softmax
2.1 softmax 定义与原理
Softmax函数是一种归一化函数,它将一组任意实数转换为表示概率分布的实数,并且这些概率值的总和为1。具体来说,Softmax函数通过计算输入向量的每个元素的指数与所有元素指数之和的比值,来得到每个元素的概率值。其数学定义如下:
softmax(z_i) = e^(z_i) / Σ(e^(z_j))
其中,z_i 表示输入向量的第i个元素,n表示向量的维度。
2.2 softmax 特点与优势
- 概率解释:Softmax函数的输出值介于0和1之间,并且所有输出值的和为1,这使得Softmax的输出可以被解释为概率分布。
- 多分类能力:Softmax函数特别适用于多分类问题,因为它能够将输入向量映射到多个类别的概率上。
- 数值稳定性:在计算Softmax时,通常会通过减去输入向量中的最大值来避免数值溢出问题,从而提高算法的数值稳定性。
2.3 softmax 应用场景
- 图像分类:在图像分类任务中,模型的输出层通常会使用Softmax函数将图像特征映射为类别概率,从而实现对图像的分类。
- 文本分类:在文本分类任务中,Softmax函数同样可以将文本特征映射为类别概率,从而实现对文本的分类。
- 推荐系统:在推荐系统中,Softmax函数可以用于对用户和物品进行分类,从而帮助系统为用户推荐合适的物品。
- 序列标注:在序列标注任务中,Softmax函数可以将序列标注结果映射为概率分布,从而为序列的每个位置标注正确的标签。
2.4 softmax 实现方式
使用 torch.nn.functional.softmax 函数来计算Softmax。此外,许多深度学习模型(如神经网络)的最后一层也会使用Softmax函数来输出概率分布。
2.5 softmax 注意事项
- 梯度消失与梯度爆炸:在计算Softmax时,需要注意梯度消失和梯度爆炸问题。这可以通过使用梯度剪裁或使用特定的优化算法(如Adam)来缓解。
- 计算效率:由于Softmax涉及指数运算,因此在处理大规模数据时可能会导致计算效率低下。可以通过使用GPU加速或预计算的方法来提高计算效率。
2.6 代码
import numpy as np
def softmax(logits):
"""
softmax:
- 原始数字比较大,模拟概率也比较大
"""
# 转为 array
logits = np.array(logits)
# 转为正数
logits = np.exp(logits)
# 模拟概率
return logits / logits.sum()
print(softmax([0.6, -3.6, 18.9])) # 输出:array([1.12826464e-08, 1.69189790e-10, 9.99999989e-01])
热门推荐
佐米曲普坦分散片有医保报销吗?
贷款风险管理的有效策略与实践探讨
如何理解股票减持公告的影响
益生菌知多少
日本自由行签证流水是什么?如何准备?
打印机无法正常工作原因及解决方案解析
项目管理法怎么分析融资
虚拟机的磁盘优化方法
咸香四溢,西红柿炒蛋的绝妙搭配!
减重代谢手术为何能治疗2型糖尿病
了不起的修仙模拟器钓鱼系统攻略:65种鱼类分布及钓法详解
美国公司注册的法律要求
AR如何改善博物馆与文化遗产的展示与保护?
玛特宇宙:元宇宙加载《清明上河图》,打造沉浸体验
支气管肺炎和肺炎的区别与治疗
支气管肺炎和肺炎的区别哪个严重
华硕驱动安装与更新全攻略:解决常见问题与技巧分享
IDEA 设置类注释模板作者、日期、描述等信息(推荐标准!)
长寿花——美丽的耐阴植物(探究长寿花的生长习性和适应环境)
古代科举考试的科目探析
项目模块设计文档如何写
刺猬:一种独特的小动物,浑身是刺却很可爱
C语言如何定义主函数
C语言中如何使用%lf输出浮点数
划船机可以减掉腹部脂肪吗?深入分析划船机对减脂的影响
在求职过程中,如何准备作品集才能更好地展示自己的设计能力
山东职业学院创新“四轮驱动”对外开放办学模式,服务“一带一路”高质量发展
红河县:稻农游客同庆“开秧门”
二级生物安全柜的性能标准与使用指南
意大利比萨斜塔为什么是斜的?如今它有着怎样的象征意义?