CE Loss与BCE Loss的区别

引言

  • 该文只是简单为本人学习交叉熵损失函数以及focal loss等相关问题的一个补充,所以介绍的不够全面,待后续持续补充

一句话概括就是:

BCE用于“是不是”问题,例如LR输出概率,明天下雨or不下雨的概率;CE用于“是哪个”问题,比如多分类问题。

BCE与CE表达形式:

BCE:BCE+sigmoid

  • sigmoid一般用于二分类问题,下方y^即为sigmoid形式(单个样本)
    y ^ = 1 1 + e − Z (1.1) \hat{y} = \frac{1}{1+e^{-Z}}\tag{1.1} y^=1+eZ1(1.1)
    Z = w x (1.2) Z = wx\tag{1.2} Z=wx(1.2)
    L B C E = − [ y ∗ ln ⁡ y ^ + ( 1 − y ) ln ⁡ ( 1 − y ^ ) ] (1.3) L_{BCE} = -[y*\ln{\hat{y}} + (1-y)\ln{(1- \hat{y}})]\tag{1.3} LBCE=[ylny^+(1y)ln(1y^)](1.3)
  • 这个就是交叉上损失函数一般见到的形式,y是真实标签值,y^是估计值
  • 可以参考参考资料,本文是交叉熵损失函数的补充,此处不做细节展示。

CE:CE+softmax

  • softmax函数是sigmoid函数的一个延伸,用于多分类(单个样本)
    y ^ = e − x i ∑ k = 1 n e − x k (2.1) \hat{y} = \frac{e^{-x_{i}}}{\sum_{k=1}^ne^{-x_{k}}}\tag{2.1} y^=k=1nexkexi(2.1)
  • k是样本编号,i是样本类别,因为场景是多分类
    L C E = − y ln ⁡ y ^ (2.2) L_{CE} = - y\ln{\hat{y}}\tag{2.2} LCE=ylny^(2.2)
  • 注意多分类中y是one-hot编码

关于CE损失函数的梯度变化

  • 下图为多个样本的情况推导,BCE的推导可以看参考资料

总结

  • 在分类问题中,如果遇到类别间不互斥的情况,只能采用“sigmoid+BCE”;如果遇到类别间互斥的情况(只能有一类胜出),“sigmoid+BCE”化为多个二分类问题与“softmax+CE”直接进行分类都是有被用到的方法
  • 仅看损失形式上,BCE好像既考虑了正样本损失又考虑了负样本的损失,而CE只考虑了正样本损失。 但其实,二者所使用的激活函数不同,前者使用sigmoid,后者使用softmax,softmax其形式上本身就考虑负类的信息在里面。
  • CE在二分类情况下本质上和BCE没有太大的区别,但可能优化上有细微不同。

参考资料

  • 本文参考资料
    https://zhuanlan.zhihu.com/p/471360465
    https://zhuanlan.zhihu.com/p/421830591
  • 相关文章(交叉熵&focal loss&ghm)
    https://blog.csdn.net/Lian_Ge_Blog/article/details/125979891?spm=1001.2014.3001.5501
    https://blog.csdn.net/Lian_Ge_Blog/article/details/126060517?spm=1001.2014.3001.5501

你可能感兴趣的:(技术原理,人工智能,机器学习,python)