概率模拟函数详解: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])
热门推荐
唐杰:清华大学计算机系教授、AMiner创始人
唐杰:清华大学教授、AMiner创始人
欧洲移民潮对当地的劳动力市场有何冲击?
怎样在银行办理公积金提取业务?
“胆固醇安全值”是多少?医生:65岁后控制在这范围,预防并发症
王唯行:松煙墨不宜用生紙
解读巳火:八字地支与十二生肖组合玄机
长春:建设“一中心、五高地” ,推动全面振兴率先实现新突破
数字农业如何助力农民增产增收?
牙齿突然对冷热敏感疼痛的原因是什么?如何缓解这种不适?
如何正确使用ACC自适应巡航系统?
无障碍坡道宽度及设计规范
减肥期间反胃想吐怎么办?原因分析与解决方案
江苏春茶即将上市!
红薯被称为“土人参”,但吃错了很伤人
腰肌劳损贴什么膏药好?
人身欺凌罪名解读:如何防范和应对校园暴力
学信网可以查什么信息 详解学信网的功能和使用方法
短视频运营推广的五大关键点
北京市深化央地协同创新,前瞻布局6G产业研发
CPU型号后缀K、KF、F、KS、X、G、H、U、P的含义与区别详解
五行缺失,如何补?50种方式补金木水火土
五行缺失,如何补?50种方式补金木水火土
释迦怎么吃最好?凤梨释迦、大目释迦 3 大差异+熟度判断技巧一次学!
朱元璋保留早年历史的背后——对历史与权力的深刻理解
掌握平板绘画技巧,享受创作乐趣与灵感的旅程
家里有红霉素药膏的小心了,这种情况下不能用
如何从 iPhone 中删除远程管理 [综合指南]
促甲状腺激素受体抗体偏高什么引起的?
如何更改485串口的地址?