概率模拟函数详解: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])
热门推荐
医保主动“毁约”?人民日报重磅发声,个人账户中的钱到底属于谁
张力传感器的分类及具体应用
吉林一号卫星:中国首个商业遥感卫星星座
翟怎么读姓氏(瞿作为姓读zhai还是qu)
轮胎规格255/50R20详解:尺寸、类型及选购要点
股票市场趋势宏观经济学解读:如何从宏观经济角度解读市场趋势?
阴历:以月亮圆缺为基准的古老历法体系
高强螺栓规格型号(螺栓力矩对照表)
如何计算数据离散程度?掌握这个公式,让你秒懂数据分析!
超忆症是什么
最终幻想:克劳德性情经历及相关角色
服务器网口指示灯全解析:从基础功能到高级应用
基金定投应选择哪种基金?这些基金的选择依据是什么?
昂刺鱼老百姓最爱的春鲜第一鱼
AI工具参与环境治理,清华联合百度共建生态环境垂直领域预训练大模型
锤子线是什么意思?锤子线形态在技术分析中有何意义?
签证类型及办理材料清单详解
轮胎255/50R20是什么意思
黄昏时刻,如何拍摄出唯美的夕阳照片
另类呛锅鱼:一道色香味俱佳的川菜制作方法
铁门关职业技术学院:培养高素质技术技能人才的摇篮
变频器使用案例:一
这20首歌曲非常适合测试音质,才买耳机/音响的朋友快来试试!(歌单推荐)
数字人带货,能带火吗?
暴力行为背后的心理原因
解读神秘的量子纠缠,其本质到底是什么?
早期龋齿的治疗方法及注意事项
生活改善專家:如何有效应对全身无力与疲倦感?
公允价值的内涵及其特点
用户体验经典方法论:用户体验地图+峰终定律+激励+成就+上瘾