当前位置:   article > 正文

概率模拟(sigmoid、softmax)

概率模拟(sigmoid、softmax)

1. sigmoid

1.1 sigmoid 定义

  • Sigmoid函数,也称为 S形函数Logistic Function ,是一种在机器学习和深度学习中广泛使用的激活函数。它的数学表达式通常定义为:
    σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1

1.2 sigmoid 主要特性

  • 输出范围:Sigmoid函数的输出值域是(0, 1),这意呀着它可以将任何实数映射到(0, 1)的区间内,这个特性非常适合处理二分类问题,其中输出可以解释为属于某一类的概率。
  • 单调性:Sigmoid函数在其定义域内是单调递增的,即当输入x增大时,输出σ(x)也增大。
  • 导数:Sigmoid函数的导数可以用它自身来表示,即
    σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) σ′(x)=σ(x)(1−σ(x)) σ(x)=σ(x)(1σ(x))
    这个特性在计算梯度时非常有用,尤其是在反向传播算法中。

1.3 sigmoid 的缺点

  • Sigmoid函数也存在一些缺点,这些缺点限制了它在现代神经网络中的广泛应用:
    1. 梯度消失:当输入x的值非常大或非常小时,Sigmoid函数的梯度(即其导数)会接近于0。这会导致在训练神经网络时,反向传播算法中的梯度在通过Sigmoid激活函数时逐渐消失,从而使得权重更新非常缓慢,甚至停止更新。
    2. 不是零中心化(Zero-Centered):Sigmoid函数的输出总是正的,这意味着在训练过程中,神经元的输入总是正的(除非初始权重是负的)。这可能会导致梯度下降时的“之字形”路径,从而降低收敛速度。
    3. 计算成本高:与其他激活函数(如ReLU)相比,Sigmoid函数涉及指数运算,这可能导致计算成本更高。
  • 尽管存在这些缺点,但在某些特定情况下(如需要输出概率值的二分类问题),Sigmoid函数仍然是一个有用的选择。
  • 此外,随着其他更高效的激活函数(如ReLU及其变体)的出现,Sigmoid函数在深度学习中的使用已经有所减少。

1.4 代码画 sigmoid 函数图像

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

2. softmax

2.1 softmax 定义与原理

  • Softmax函数是一种归一化函数,它将一组任意实数转换为表示概率分布的实数,并且这些概率值的总和为1。具体来说,Softmax函数通过计算输入向量的每个元素的指数与所有元素指数之和的比值,来得到每个元素的概率值。其数学定义如下:
    softmax ( z i ) = e z i ∑ j = 1 n e z j \text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} softmax(zi)=j=1nezjezi 其中, z i z_i zi 表示输入向量的第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 代码

def softmax(logits):
    """
        softmax: 
            - 原始数字比较大,模拟概率也比较大
    """
    # 转为 array
    logits = np.array(logits)
    # 转为正数
    logits = np.exp(logits)
    # 模拟概率
    return logits / logits.sum()
    
softmax([0.6, -3.6, 18.9])  # :array([1.12826464e-08, 1.69189790e-10, 9.99999989e-01])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号