7.二分类和多分类的激活函数和损失

您所在的位置:网站首页 sigmoid函数的作用 7.二分类和多分类的激活函数和损失

7.二分类和多分类的激活函数和损失

2023-04-04 17:07| 来源: 网络整理| 查看: 265

1.激活函数

二分类最后一层的激活函数activation是sigmoid函数,多分类的则是softmax函数。

二分类也可以用softmax,但其实数学上结果是一样的,但如果用一些框架可能有些许不一样:

首先我们先理论上证明一下二者没有本质上的区别,对于二分类而言(以输入 x_{1} 为例)Sigmoid函数: output(x_{1})=\frac{1}{1+e^{-x_{1}}} (1) Softmax函数: output(x_{1})=\frac{e^{x_{1}}}{e^{x_{1}}+e^{x_{2}}}=\frac{1}{1+e^{-(x_{1}-x_{2})}}(2) 由公式(2)我们可知, (x_{1}-x_{2}) 可以用 z_{1} 代替,即Softmax函数可以写成: output(z_{1})=\frac{1}{1+e^{-z_{1}}} (3) ,和公式(1)完全相同,所以理论上来说两者是没有任何区别的。

然后我们再分析为什么两者之间还存着差异(以Pytorch为例):首先我们要明白,当你用Sigmoid函数的时候,你的最后一层全连接层的神经元个数为1,而当你用Softmax函数的时候,你的最后一层全连接层的神经元个数是2。这个很好理解,因为Sigmoid函数只有是目标和不是目标之分,实际上只存在一类目标类,另外一个是背景类。而Softmax函数将目标分类为了二类,所以有两个神经元。这也是导致两者存在差异的主要原因。2.损失函数

二分类和多分类对应的损失函数loss分别是binary_crossentropy(BCE)和categorical_crossentropy(CE)。他们的差别主要是由于概率加起来是否等于1引起的。

2.1 信息论中的交叉熵

先来看下信息论中交叉熵的形式

交叉熵是用来描述两个分布的距离的,神经网络训练的目的就是使 g(x) 逼近 p(x)。

2.2 binary_crossentropy(BSE)

对应torch中的:torch.nn.BCELoss() ,在使用此函数之前需要手动加上Sigmoid函数

对应与二分类+sigmoid

sigmoid作为最后一层输出的话,那就不能吧最后一层的输出看作成一个分布了,因为加起来不为1。现在应该将最后一层的每个神经元看作一个分布。

用于二分类(用于多分类时,针对每一个类别,都当作一个二分类来处理,是不是这个类别,属于这个类别的概率。区别于CE,CE用的是softmax,每个类别互斥,所有类别概率和为1,而BCE所有概率和不一定等于1,类别之间不互斥),模型结果只有两种情况(两个类别),针对一个样本,假设得到的预测概率一类为p pp,另一类为1 − p 1-p1−p,此时BCE公式为:

其中:

log的底数为eyi​表示样本 i 的标签,正类为1,负类为0(注:BCE并不是只能学习0或1的label),使用的是one_hot编码pi​表示样本 i 预测为正类的概率,是经过sigmoid后的数N表示样本个数,这里是取了均值的

这样,当样本label为0的时候,公式前半部分为0,pi 需要尽可能为0才能使后半部分数值更小;当样本label为1时,后半部分为0,pi需要尽可能为1才能使前半部分的值更小,这样就达到了让p; 尽量靠近样本label的目的.通常情况下,使用BCELoss,网络只熏输出一个节点,即所有框对所有类别的二分类概率的均值,而CE Los(Cross Entropy Loss),有n class个类别,网络最终输出n class个节点。

以上公式如果是多分类那么就得各个神经元加起来了。

2.3 categorical_crossentropy (CE)

对应torch中的:torch.nn.CrossEntropyLoss(),对输入的数据先进行softmax处理,所以使用此函数前不用处理。

那么直接带入就好了,因为他们概率加起来等于1:

g(x)是什么呢?就是最后一层的输出 y 。

p(x)是什么呢?就是我们的one-hot标签。我们带入交叉熵的定义中算一下,就会得到第一个式子:

其中:

参考:

【MSE/BCE/CE】均方差、交叉熵损失函数理解_bce函数_寻找永不遗憾的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3