softmax和sigmoid的比较

本文探讨了softmax和sigmoid两种激活函数在梯度计算上的异同,重点讲解了它们在权重更新中的影响,以及适用场景:softmax适用于互斥分类,而sigmoid常用于独立分类。同时提到了为何选择交叉熵作为损失函数。

一、相同点

  • softmax求导

  • 在这里插入图片描述

  • sigmoid求导

  • 在这里插入图片描述

  • 两者的导数都有λ(1-λ),当预测结果错误且值很小时,容易导致权重更新缓慢,所以一般选择交叉熵作为损失函数,交叉熵的导数是1/λ,可以消除权重更新缓慢的影响

二、不同点

  • softmax只用于最后结果输出,因为它会增强数据之间的关联性,不适合在隐藏层使用
  • sigmoid可用于任何层,只是用于隐藏层时,仍会有权重更新缓慢的问题,所以隐藏层激活函数多使用relu
  • softmax用于分类结果互斥的情况,如判断是猫是狗,只有一个可能性;sigmoid用于分类结果独立的情况,如根据图片判断患者得了什么疾病,有多种可能性。
### softmax sigmoid 函数的图形对比 Softmax Sigmoid 是常见的激活函数,它们在机器学习中具有重要的作用。Sigmoid 函数常用于二分类问题,而 Softmax 则广泛应用于多类别分类任务。 #### **Sigmoid 函数** Sigmoid 函数的数学表达式为: $$ \sigma(x) = \frac{1}{1 + e^{-x}} $$ 该函数将输入值映射到 $ (0, 1) $ 的区间内,形状呈“S”型曲线。其输出可以解释为概率,适合二分类场景。然而,Sigmoid 在输入值较大或较小时会出现梯度趋近于零的情况,容易导致梯度消失问题[^3]。 ##### **Sigmoid 函数的图形表示**: ```python import numpy as np import matplotlib.pyplot as plt def sigmoid(x): return 1 / (1 + np.exp(-x)) x = np.linspace(-10, 10, 100) y = sigmoid(x) plt.plot(x, y, label='Sigmoid') plt.title('Sigmoid Function') plt.xlabel('Input') plt.ylabel('Output') plt.grid() plt.legend() plt.show() ``` #### **Softmax 函数** Softmax 函数的数学表达式为: $$ \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j} e^{z_j}} $$ Softmax 接收一个向量作为输入,并将每个元素转换为介于 0 1 之间的概率值,同时确保所有输出值的总等于 1。这使得它特别适用于多类别分类问题,例如在神经网络的最后一层输出各类别的概率分布[^2]。 ##### **Softmax 函数的图形表示**: 由于 Softmax 是对向量进行操作,因此无法直接绘制类似于 Sigmoid 的二维曲线。不过,可以通过三维图示来展示两个输入变量对输出概率的影响。 ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def softmax(z): exp_z = np.exp(z - np.max(z)) return exp_z / exp_z.sum() # 构造二维输入空间 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.stack((X, Y), axis=-1) # 计算每个点对应的第一个类别的 Softmax 概率 prob = np.zeros_like(X) for i in range(X.shape[0]): for j in range(X.shape[1]): prob[i, j] = softmax(Z[i, j])[:, :, 0] # 绘制 3D 曲面图 fig = plt.figure(figsize=(10, 7)) ax = fig.add_subplot(111, projection='3d') surf = ax.plot_surface(X, Y, prob, cmap='viridis', edgecolor='none') ax.set_title('Softmax Output for Class 1') ax.set_xlabel('Input 1') ax.set_ylabel('Input 2') ax.set_zlabel('Probability') plt.colorbar(surf, shrink=0.5, aspect=5) plt.show() ``` #### **SoftmaxSigmoid比较** 尽管两者都可以将数值转化为概率,但它们的应用场景不同: - **Sigmoid** 主要用于二分类问题,且存在梯度消失计算效率低的问题[^3]。 - **Softmax** 更适用于多类别分类,能够保证输出的概率分布特性[^2]。 此外,Sigmoid 可以看作是 Softmax 在二分类情况下的特例。当 Softmax 处理仅包含两个类别的问题时,其输出等价于 Sigmoid 函数的结果[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值