【深度学习|学习笔记】“改进的 softmax 损失”系统化梳理成 5 大类!详解!(三)

【深度学习|学习笔记】“改进的 softmax 损失”系统化梳理成 5 大类!详解!(三)



欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可扫描博文下方二维码 “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/148877490


5) 知识蒸馏/校准(“改进软目标”的广义思路)

5.1 Knowledge Distillation(温度软目标)

  • 学生网络匹配教师 softmax(带温度 T T T)的分布,同时和硬标签做插值:
    在这里插入图片描述
  • 优点:提升泛化与小模型性能;缺点:需要教师。
def kd_loss(student_logits, teacher_logits, target, T=2.0, alpha=0.5):
    kd = F.kl_div(F.log_softmax(student_logits/T, dim=1),
                  F.softmax(teacher_logits/T, dim=1),
                  reduction='batchmean') * (T*T)
    ce = F.cross_entropy(student_logits, target)
    return alpha * kd + (1 - alpha) * ce

5.2 温度缩放(后处理校准)

  • 不改训练,只在验证/测试把 logits 除以 T T T(学习一个标量 T T T)改善概率校准。
  • 注意:这是后处理,不是训练期的损失替代。
选型建议(速查表)
需求 建议
过度自信/想要更好校准 Label Smoothing;Confidence Penalty;(后处理) 温度缩放
提升判别性(如人脸/细粒度) ArcFace(首选)、CosFace;配合特征/权重归一化
类别极度不平衡 Focal Loss;LDAM(+ Class-Balanced 权重);Logit Adjustment
类别数量巨大 Adaptive Softmax;Sampled Softmax/NCE
小模型想“学会大模型的暗知识” 知识蒸馏(KD)
一个可插拔的训练骨架(示例)
class CriterionFactory:
    def __init__(self, mode="ce", **kwargs):
        self.mode = mode
        self.kw = kwargs

    def __call__(self, logits, target, **extra):
        if self.mode == "ce":
            return F.cross_entropy(logits, target)
        elif self.mode == "ls":
            return cross_entropy_label_smoothing(logits, target, eps=self.kw.get("eps",0.1))
        elif self.mode == "focal":
            return focal_loss_softmax(logits, target, gamma=self.kw.get("gamma",2.0),
                                      alpha=self.kw.get("alpha",None))
        elif self.mode == "ldam":
            return ldam_loss(logits, target, self.kw["cls_num_list"],
                             max_m=self.kw.get("max_m",0.5), s=self.kw.get("s",30))
        elif self.mode == "logit_adjust":
            return ce_with_logit_adjustment(logits, target, self.kw["priors"], tau=self.kw.get("tau",1.0))
        else:
            raise ValueError("unknown loss mode")

# 用法:
# criterion = CriterionFactory(mode="ls", eps=0.1)
# loss = criterion(logits, labels)

小结

  • “改进的 softmax 损失”并非单一配方,而是围绕 可分性(margin)、稳健性(正则)、不平衡(重加权/重构)、可扩展性(大类别效率) 与 软目标(蒸馏/校准) 这几条主线不断演化。
  • 工程落地时,建议从 Label Smoothing(默认增强)和 ArcFace/CosFace(需要判别性时)起步长尾任务加入 Focal/LDAM/类平衡权重大词表考虑 Adaptive Softmax模型压缩/集成用 KD
  • 注意数值稳定(logsumexpacos/clamp)、超参选择(m/s/gamma/beta)与训练可收敛性(尤其 margin
    类方法)。
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐