Hard Negtive

2021-04-29  本文已影响0人  南朝容止

题目

试想有一份数据集,有99个负样本,1个正样本。现在我们要学习一个模型,怎么学?

分析

看上去,直接学,模型会拟合大量负样本的特性。根本学不到正样本的。学到的模型,即使将所有样本都预测为负样本,都会取得很高的正确率。 本质上还是样本不平衡问题。

怎么解决呢?

Hard Negtive Mining

传统的做法,如SVM分类时,首先训练一个模型, 利用该模型将预测错误的样本加入,认为这部分样本为Hard Negtive。
预测正确且置信度很高的样本剔除,认为这部分样本为Easy Negtive。
这个过程很好理解, 就像我们上学时的错题本,经常会记入一些自己做错的,或者不会做的题。同时会将一些简单的题,做对的题从作业本上划掉。后面在复习时,就直接跳过了。

方法改进

交叉熵函数本尊长得下面这样:

交叉熵
简写一下,就是下面这样:
简化版
其实上面交叉熵的公式,当y=0的时候,y^ 就是y=0的概率,而1-y^ 也就是y=1的概率。就记着一句话, log里面都是y=1的概率就可以了。所以这样就可以统一成,简化版了,简化版中pt 就是 y=1 的预测概率。

再来看FocalLoss的公式:


FocalLoss

再来看看简化版:


简化版

跟上面交叉熵及简化版一样,简单理解下。

那么大神这么做能否 化腐朽为神奇,能否成为神来之笔?


曲线图

r = 0时,是标准的传统交叉熵,为蓝色曲线。
r =其他值时,是蓝色曲线下面的曲线。
可以发现:
1)当一个样本被分错的时候,pt是很小的,那么调制因子(1-Pt)接近1,无论r取多少,该样本贡献的损失基本不变,该怎么办就怎么办;
但是当一个样本分对了, Pt→1,那么(1-Pt)接近0,而且在r次方下,更接近于0了,这样分对的样本对损失贡献为0,可以理解为没啥贡献了。
经过,上面(1-pt)和r的调整后,相当于增大了分错样本的权重, 因为其对损失贡献大,地位重要。 减弱了分对样本的权重,因为他对损失的贡献小,地位很弱了。总之,更加让模型去重视那些易分错样本,即Hard Negtive, 否则承受着更大损失的增长。

2) 参数γ平滑地调节了易分样本调低权值的比例。γ增大能增强调制因子的影响,实验发现γ取2最好。

focal loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失的贡献。

样本改进

见本人之前分享的另一篇文章<采样>

上一篇 下一篇

猜你喜欢

热点阅读