3D机器学习(6):交叉熵(cross entropy loss),一种收敛更快的损失函数

2023-05-16

1、交叉熵(cross entropy loss)简介

熵=entropy=不确定性=惊讶的度量。越高的熵越低的信息度,因此不确定性或者混乱性越高,熵越高。

数学定义,把所有事情的概率通过下式计算。比如概率分比为:0.001、0.001、0.001、0.999,则其熵=0.0313,非常小,说明稳定性较大,基本上事实仅由概率为0.999的事情给主宰。

但当概率均为0.25时,说明不确定性很大,四者皆可能发生,所以熵比较大=2

交叉熵:是p和q之间

Divergence(差异) 衡量两个概率分布函数的重叠情况。比如下图两个函数重叠的阴影面积越小,Divergence越大。当完全重合,Divergence=0。

这里使用H(p,q)表示p,q间的交叉熵。可进一步表示为H(p,q)=H(p)+Divergence.

如果p=q,Divergence=0,则直接退化为H(p)。

在one-hot编码中,H(p)=0,所以交叉熵= Divergence。

2、求交叉熵的梯度函数:以双分类问题为例,是猫还是狗?

H(P,Q)=两项求和。再根据事件概率之和为1=P(cat)+P(dog),全部用cat表示,可列出下式。

假设P(cat)=y,其中P为0-1分布;Q(cat)=p,为ϑ分布。可得到:H(P,Q)=

这就是二分类需要优化的目标函数。进一步讨论:

如果y=1,则后一项=0,前一项为了达到最小,需最大化log(P),即最大化P

如果y=0,则前一项=0,后一项为了达到最小,需最大化log(1-P),即最小化P

3、例子:五分类问题。

 

假设P为标签值,即实际观测值,Q为网络输出值。二者越接近越好,我们可以使用交叉熵作为优化函数。比如第一次计算Q1=[0.4\0.3\0.05\0.05\0.2],显然与P相差较大,计算出来的交叉熵为0.916,但在第二次优化后,计算出的交叉熵为0.02,直接优化了将近0.9=0.916-0.02。这里当然也可以使用均方差(MSE)作为优化函数,但只会优化0.3-0.4这么多。因此不那么明显。因为交叉熵梯度更大,收敛更快。

 

4、为什么不用均方差(MSE)

  1. 首先:当使用sigmoid+MSE组合时,容易出现梯度离散。
  2. 其次也是最重要的:MSE收敛太慢了,如图所示,在初始时log函数会因梯度变化而收敛很快。
  3. 最后需提及:收敛快的交叉熵,也有着求导后的函数复杂的缺点,即求梯度比较繁琐。但MSE导数就是2(p-y)很简单。因此,在一些新的算法时,算法不完善,可以先使用MSE去求解,说不定还会得到更好的结果,比如在,meta-learning 中就是如此。

5、补充

在pytorch中,函数F.cross_entropy是打包好的函数=softmax+log+nll_loss,后两个和组合成一个数学上的cross_entropy函数。因此我们使用函数F.cross_entropy,就不用再手动加入softmax函数了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3D机器学习(6):交叉熵(cross entropy loss),一种收敛更快的损失函数 的相关文章

  • HJ5 进制转换

    描述 写出一个程序 xff0c 接受一个十六进制的数 xff0c 输出该数值的十进制表示 数据范围 xff1a 保证结果在 注意本题有多组输入 输入描述 xff1a 输入一个十六进制的数值字符串 注意 xff1a 一个用例会同时有多组输入数
  • Anaconda重新下载安装导致cmd无法打开(闪退)

    Anaconda重新下载安装导致cmd无法打开 xff08 闪退 xff09 strong 写在前面 xff1a strong 由于自己的错误使用conda 导致conda崩掉 xff0c 于是自己重新下载安装conda xff0c 但是尴
  • tp5多文件域上传报错处理SplFileObject::__construct(/tmp/php4LYVI3)

    我是同时两个file文件域 xff0c 报错 xff1a SplFileObject construct tmp php4LYVI3 failed to open stream No such file or directory 解决是 x

随机推荐