多标签、类别不均衡分类问题

最近老是遇到多标签分类问题,加之自己对loss的理解还是不够到位

整理以下链接以作学习参考使用:

  • 多标签分类:定义、思想和算法
    主要是将多标签分类的定义,思考和一些解决办法。
    multilabel_categorical_crossentropy
  • 损失函数
    主要是介绍了两个损失函数的区别:
    categorical_crossentropy
    binary_crossentropy
  • 二分类、多分类与多标签问题的区别及对应损失函数的选择
    这篇主要分析了softmax和sigmoid在最后分类器中的作用,以及不同任务loss function的选择
  • 将“softmax+交叉熵”推广到多标签分类问题
    这篇是苏大神介绍的多标签分类问题,在自己的亲测实验中这个function还不是最好的,不过分数已经不错了。
  • Equalization Loss 笔记
    主要是解决数据分布不平衡导致的长尾分布的问题,这个loss在自己实验过程中尚在调试阶段。
    Equalization Loss for Long-Tailed Object dete
  • Decoupling Representation and Classifier for Long-Tailed Recognition
    Equalization Loss
    2020新的论文,处理长尾分布,自己试验出来的结果发现直接学习最后分类器和每个类别权重比较好,解耦来学习分数还没那么高,可能是我数据的问题,目前我也无法具体解释,不过是一个检验的好途径。
    更正:
    上文说一起学习的效果没有解耦的高是错误的表达,原因是自己的训练的epoch不够的原因,后面epoch变大的时候,解耦的方法效果慢慢提升上去了。
  • 如果自己的数据集中类别不均衡,可以采用类别均衡采样进行dataloader的采样
    参考:https://github.com/pytorch/pytorch/pull/3062/files
  • Focal loss
    目前自己的实验中分数最高的loss function
    Focal Loss

自己还是对loss理解不够,干脆记录下来了,以后遇到一个记录一个:

nn.CrossEntropyLoss(ignore_index=ignored_index)
计算的是QA中star_position的loss,同理end_position
start_loss = loss_fct(start_logits, start_positions) 其中start_logits.shape=[bs,sl] start_position.shape=[bs],start_position 是起始位置

nn.BCE_loss()
计算的是文本的二分类,非零即一
loss_ = myloss(pred_labels, real_labels) 其中pred_labels.shape=[bs,1],real_labels.shape=[bs,1]

FocalLoss2(alpha=1, gamma=2, logits=False, reduce=True)
计算的文本的多标签分类,一个文本可以同时属于多个标签
loss_ = myloss(pred_labels,real_labels) 其中pred_labels.shape=[bs,num_labels], real_labels.shape=[bs,num_labels]

criterion = BCEWithLogLoss(weights=all_label_w,pos_weight=pos_wieght_,type='pos')
计算的是文本的多分类问题
loss = criterion(output,target) output.shape=[bs,num_target], target.shape=[bs,nt]

本Blog会不断更新…

你可能感兴趣的:(NLP,深度学习)