sigmoid和softmax的异同以及对应的loss解析
一、综述
sigmoid和softmax都是激活函数,目的是让模型输出的数据进行非线性的变化然后输出,当训练时这个输出作为损失函数的输入,在损失函数中跟真实值进行计算得到loss值。反向传递时,框架会自动微分进行参数更新。那么这两个激活函数有什么区别与联系呢?
二、激活函数以及对应的loss解析
2.1 sigmoid
公式为:
图像为:
可以理解为通过sigmoid输出的值即为该位置的概率值,跟其他位置无关,这就使得sigmoid激活函数更适合用于二元分类的场景中,或者是多标签分类中,只看每个类别,而不管其他类别,搭配二元交叉熵使用。即:
Sigmoid 函数是独立地对每个类别的预测值进行激活,输出的每个值都表示该类别的 概率,但是每个类别的概率是独立计算的,不考虑其他类别的概率。这就意味着,所有类别的概率之和可以大于 1。
二元交叉熵计算损失的公式为:
其中,y 是标签(0 或 1),y_hat 是经过 Sigmoid 激活后的预测概率。
要求标签是硬标签one-hot,如果是该类,该类的位置即为1,其他类的位置即为0,计算loss并迭代,使得输出正确的位置的概率值尽可能大,错误的位置概率值尽可能小。
2.2 softmax
公式为:
输出是0到1的值,但所有值加起来会等于1。这会将模型输出的 logits 转换为每个类别的对数概率。然后,使用 软标签(可能是浮动的概率分布)来计算损失。用交叉熵可以记为soft_cross_entropy
来计算损失,公式为:
其中,yi 是每个类别的标签(可以是浮动值),yi_hat 是通过 Softmax 得到的类别 iii 的预测概率。这里,标签 yi 不再是 0 或 1,而是类别的 概率值,这使得 soft_cross_entropy
可以处理更加平滑的标签分布。
soft_cross_entropy
损失函数是基于 交叉熵 来计算的,因此它假设标签是一个 概率分布,即每个类别的标签值是一个介于 0 和 1 之间的概率,用来衡量 预测的概率分布 和 真实的标签分布 之间的差异,表示每个类别的置信度或可能性。而且为了使计算具有意义,标签中的概率值应该满足概率分布的基本属性——所有类别的概率之和为 1。
如果标签的和不为 1,标签就不再代表一个有效的概率分布。这会导致损失计算时模型预测的概率分布与实际标签分布的差异无法准确度量。例如,交叉熵中的对数项要求标签值是概率值,如果标签值的和不为 1,计算出来的对数可能不是有效的概率对数,这会导致模型训练过程中的梯度更新变得不稳定或不合理。