【论文阅读笔记】GroupSoftmax交叉熵损失函数的推导

参考文献:https://www.zhuanzhi.ai/document/cd49eeb11c338b1feaf4e6feae84ec5d

github【以simpledet为基础网络】:https://github.com/chengzhengxin/groupsoftmax-simpledet

1.能解决的问题

  • 在不重新标注原有数据的情况下,对新的标注数据,增加某些新的类别
  • 在不重新标注原有数据的情况下,对新的标注数据,修改原有的类别标准,比如将某个类别拆分成新的几个类别
  • 已标注数据集中,出现概率较高的类别一般属于简单样本,对新的数据只标注出现概率较低的类别,能够显著降低标注成本
  • 在标注大型目标检测数据集时,只标注矩形框,而不选择类别属性,能够有效降低标注成本

GroupSoftmax 交叉熵损失函数允许类别 K 和类别 j 发生合并,形成一个新的组合类别 g ,当训练样本 y 的真实标签为组合类别 g 时,也能够计算出类别 K 和类别 j 的对应梯度,完成网络权重更新。理论上, GroupSoftmax 交叉熵损失函数能够兼容任意数量、任意标注标准的多个数据集联合训练。

在参考文献中举例说明了为什么现实生活中需要这个损失函数,当数据集中原有的类别C4='自行车',C5='电动车'需要合并成C='非机动车类'时,可以使用GroupSofmax函数进行训练,而不是使用大量人工对样本进行标注

2.公式的推导

损失函数的定义【对于群组类这个类的损失计算如下】:

                                                       L_{i}=-\sum_{g}p_{i,g}logP_{g}

上式中,g表示一个群组类,比如说刚刚的非机动车类,里面就包含了自行车和电动车两个类;也有可能就是一个单独的摩托车类别谁也不包含。其中P_{g}为群组类的概率,公式如下【是两个类的概率和】:

                                                     P_{g}=\sum_{k\epsilon g}P_{k}=\frac{\sum_{k\epsilon g}e^{f_{k}}}{\sum_{j}e^{f_{j}}}

与Softmax损失函数一样,可以使用复合求导的方式进行求导【得到分类对于之前传向它的每个分类的分支m的导数】,因此有:

                                                      \frac{\partial L_{i}}{\partial f_{m}}= \frac{\partial L_{i}}{\partial P_{g}}\cdot \frac{\partial P_{g}}{\partial f_{m}}

1)公式一:

                                                      \frac{\partial P_{g}}{\partial f_{m}}= \frac{e^{f_{m}}\sum_{j}e^{f_{j}}-e^{f_{m}}\sum_{k\epsilon g}e^{f_{k}}}{​{\sum_{j}e^{f_{j}}}^{2}}

有两种情况,第一,当 群组类别g中包含了m类别【当样本m为自行车时,群组类别g=非机动车包含了m,但群组类g=摩托车不包含m】

                                                     \frac{\partial P_{g}}{\partial f_{m}}= \frac{e^{f_{m}}\sum_{j}e^{f_{j}}-e^{f_{m}}\sum_{k\epsilon g}e^{f_{k}}}{​{\sum_{j}e^{f_{j}}}^{2}}=P_{m}(1-P_{g})

                      第二,当 群组类别g中不包含m类别

                                                     \frac{\partial P_{g}}{\partial f_{m}}= \frac{-e^{f_{m}}\sum_{k\epsilon g}e^{f_{k}}}{​{\sum_{j}e^{f_{j}}}^{2}}=-P_{m}P_{g}

2)公式二:

                                                     \frac{\partial L_{i}}{\partial f_{m}}= \frac{\partial L_{i}}{\partial P_{g}}\cdot \frac{\partial P_{g}}{\partial f_{m}}=\frac{\partial -\sum_{g}p_{i,g}logP_{g}}{\partial P_{g}}\cdot \frac{\partial P_{g}}{\partial f_{m}} =-\sum_{g}p_{i,g}\frac{1}{P_{g}}\frac{\partial P_{g}}{\partial f_{m}}

                                                                                      =-\sum_{m\epsilon g}p_{i,g}\frac{1}{P_{g}}P_{m}(1-P_{g})+\sum_{m not \epsilon g}p_{i,g}\frac{1}{P_{g}}P_{m}P_{g}

                                                                                      =-\sum_{m\epsilon g}p_{i,g}\frac{(1-P_{g})}{P_{g}}P_{m}+\sum_{m not \epsilon g}p_{i,g}P_{m}

 又要分情况讨论了,

第一,当对应的输出分支y_{i}为正样本时,这种情况又有两种情况:

          m既是正样本 群组类g又包含m类,有\sum_{m\epsilon g}p_{i,g}=1

          m是正样本 群组类g不包含m类,有\sum_{m not\epsilon g}p_{i,g}=0

           所以有,-\sum_{m\epsilon g}p_{i,g}\frac{(1-P_{g})}{P_{g}}P_{m}+\sum_{m\epsilon g}p_{i,g}P_{m}=(P_{g}-1)\frac{P_{m}}{P_{g}}

第二,当对应的输出分支y_{i}为负样本时, 这种情况又有两种情况:

          m既是负样本 群组类g又包含m类,有\sum_{m\epsilon g}p_{i,g}=0

          m是负样本 群组类g不包含m类,有\sum_{m not\epsilon g}p_{i,g}=1

          所以有,-\sum_{m\epsilon g}p_{i,g}\frac{(1-P_{g})}{P_{g}}P_{m}+\sum_{m\epsilon g}p_{i,g}P_{m}=P_{m}

3)最后举个例子

对于群组类g=非机动车类来说,当m=电动车时,有\frac{\partial L_{i}}{\partial 'diandongche'}= (P_{'diandongche'}+P_{'zixingche'}-1)\frac{P_{'diandongche'}}{P_{'diandongche'}+P_{'zixingche'}}

对于群组类g=非机动车类来说,当m=摩托车时,有   \frac{\partial L_{i}}{\partial 'motuoche'}= P_{'motuoche'}

### 关于交叉熵损失函数的相关学术论文 交叉熵作为一种广泛应用于机器学习中的损失函数,在许多领域都得到了深入研究。以下是几篇与交叉熵及其改进版本密切相关的经典学术论文: #### 1. **Cross Entropy Loss Fundamentals** - 文献名称:*Pattern Recognition and Machine Learning* - 主要贡献:此书由 Christopher M. Bishop 编写,详细介绍了交叉熵的基础理论以及它为何成为分类问题的理想选择[^1]。书中解释了交叉熵如何衡量预测概率分布与真实标签分布之间的距离,并讨论了其相对于其他损失函数的优势。 #### 2. **Focal Loss for Dense Object Detection** - 文献名称:*Focal Loss for Dense Object Detection (Lin et al., ICCV 2017)* - 主要贡献:本文提出了 focal loss,这是对传统交叉熵的一种改进方法。通过调整难易样本的权重分配机制,focal loss 解决了一阶段目标检测中正负样本不平衡的问题[^2]。这种优化策略显著提升了模型性能,尤其是在处理极端类别不均衡的情况下。 #### 3. **Earth-Mover's Distance as a Metric of Classifier Performance** - 文献名称:*EMO: A Novel Classification Loss Based on Optimal Transport Theory (Zhang et al., NeurIPS 2020)* - 主要贡献:该文章探讨了利用最优传输理论重新定义分类任务中的损失函数的可能性。具体而言,作者引入了一个名为 EMO 的新指标,旨在克服标准交叉熵可能存在的局限性[^3]。实验表明,这种方法可以带来更稳定的训练过程和更高的最终精度。 #### 4. **On the Properties of Neural Machine Translation: Encoder–Decoder Approaches** - 文献名称:*Sequence to Sequence Learning with Neural Networks (Sutskever et al., NIPS 2014)* - 主要贡献:虽然这篇论文主要关注序列到序列架构的设计原则,但它也提到了使用 softmax交叉熵作为监督信号的重要性。对于自然语言生成类的任务来说,这一组合被证明非常有效。 #### 5. **Understanding Deep Learning Requires Rethinking Generalization** - 文献名称:*Deep Residual Learning for Image Recognition (He et al., CVPR 2016)* - 主要贡献:尽管重点在于残差网络结构本身,但文中多次提到采用交叉熵指导参数更新的过程是如何帮助缓解梯度消失现象并促进深层神经网络收敛的。 --- ### 示例代码片段展示交叉熵计算方式 下面提供一段简单的 Python 实现用于演示基本形式下的交叉熵公式: ```python import numpy as np def cross_entropy(y_true, y_pred): """ 计算二元或多分类情况下的交叉熵 参数: y_true -- 真实标签向量 shape=(m,) y_pred -- 预测概率矩阵 shape=(n,m), n 表示类别数 返回值: ce_loss -- 单个样本平均后的交叉熵数值 float 类型 """ m = y_true.shape[0] log_probs = -np.log(np.clip(y_pred[np.arange(m), y_true], 1e-8, None)) ce_loss = np.sum(log_probs)/m return ce_loss # 测试数据 y_tst = np.array([0, 1]) p_hat = np.array([[0.9, 0.1], [0.4, 0.6]]) print(f"CE Loss={cross_entropy(y_tst,p_hat): .4f}") ``` 上述代码实现了针对多分类场景的标准交叉熵表达式 \( L=-\frac{1}{N}\sum_{i=1}^{N}[t_i \log(p_i)]\) ,其中 \( t_i \) 是实际标签指示器变量而 \( p_i \) 则对应相应位置上的预测得分经过规范化之后的概率估计结果。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值