专业网站制作流程,深圳市 网站建设450,北京计算机培训机构前十名,免费ip地址代理软件【为什么 Softmax 函数面对二分类问题时可以简化为 Sigmoid 函数】
将二分类问题当成普通多分类问题#xff0c;神经网络如下所示#xff1a; 因为有两个分类#xff0c;所以需要有两个输出#xff0c;然后经过 Softmax 后得到每个分类的预测概率。
假设第一个分类的得分…【为什么 Softmax 函数面对二分类问题时可以简化为 Sigmoid 函数】
将二分类问题当成普通多分类问题神经网络如下所示 因为有两个分类所以需要有两个输出然后经过 Softmax 后得到每个分类的预测概率。
假设第一个分类的得分为第二个分类得分 则经过 Softmax 层后得到 第一个分类的概率为 第二个分类的概率为 令 所以和可以重写为 此时将和相加可以非常惊奇的发现也就是说我们只需要计算出来一个P然后另一个直接通过1-P即可计算出来。
这两个概率随得分的变化图像如下所示 由上图可见采取 的公式时越大P的取值越接近1符合我们的直觉所以选择这个作为Sigmoid函数。于是上述神经网络可以简化为只有一个输出的神经网络然后经过Sigmoid函数得到预测为分类1的概率P另一个分类的概率为1-P新神经网络只需要训练一个权重W和偏移量b即可。 【二分类情况下 softmax 和 Sigmoid 函数的区别】
说到softmax和sigmoid二者差别就得说说二者分别都是什么。其实很简单网上有数以千计的优质博文去给你讲明白我只想用我的理解来简单阐述一下
sigmoid函数针对两点分布提出。神经网络的输出经过它的转换可以将数值压缩到(0,1)之间得到的结果可以理解成“分类成目标类别的概率P”。而不分类到该类别的概率就是(1 - P)这也是典型的两点分布的形式softmax本身针对多项分布提出当类别数是2时它退化为二项分布而它和sigmoid真正的区别就在这儿——二项分布包含两个分类类别姑且分别称为A和B而两点分布其实是针对一个类别的概率分布其对应的那个类别的分布直接由1-P粗暴得出。
据上所述sigmoid函数我们可以当作成它是对一个类别的“建模”。将该类别建模完成另一个相对的类别就直接通过1减去得到
而softmax函数是对两个类别建模。同样的得到两个类别的概率之和也是1. 神经网络在做二分类时使用softmax还是sigmoid做法其实有明显差别。由于softmax是对两个类别正反两类通常定义为0/1的label建模所以对于NLP模型而言比如泛BERT模型Bert输出层需要通过一个nn.Linear()全连接层压缩至2维然后接softmaxpytorch的做法就是直接接上torch.nn.CrossEntropyLoss而sigmoid只对一个类别建模通常就是正确的那个类别所以Bert输出层需要通过一个nn.Linear()全连接层压缩至1维然后接sigmoidtorch就是接torch.nn.BCEWithLogitsLoss 总而言之sotfmax和sigmoid确实在二分类的情况下可以化为相同的数学表达形式但并不意味着二者有一样的含义而且二者的输入输出都是不同的。sigmoid得到的结果是“分到正确类别的概率和未分到正确类别的概率”softmax得到的是“分到正确类别的概率和分到错误类别的概率”。
一种常见的错法即错误地将softmax和sigmoid混为一谈在把BERT输出 层压缩至2维的情况下却用sigmoid对结果进行计算。这样我们得到的结果其意义是什么呢 假设我们现在BERT输出层经nn.Linear()压缩后得到一个二维的向量 [-0.9419267177581787, 1.944047451019287] 对应类别分别是(0,1)。我们经过sigmoid运算得到 tensor([0.2805, 0.8748]) 前者0.2805指的是分类类别为0的概率0.8748指的是分类类别为1的概率。二者相互独立可看作两次独立的实验显然在这里不适用因为0-1类别之间显然不是相互独立的两次伯努利事件。所以显而易见的二者加和并不等于1. 若用softmax进行计算可得 tensor([0.0529, 0.9471]) 这里两者加和是1才是正确的选择。 参考 为什么 softmax 函数面对二分类问题时可以简化为 sigmoid 函数_将softmax结果转换为sigmoid值-CSDN博客 https://www.cnblogs.com/wynlfd/p/14101373.html