机器学习损失函数的定义非常重要,损失函数决定了如何从样本数据中进行学习,模型的总体损失函数由对样本的损失求和而来,对于特定问题,有三种情况需要特别考虑样本损失的权重。
- 类别样本不均衡
对样本量比较少的类别,加大该类样本权重,使模型不至于忽略了该类别的样本特征。比如对于违约样本占比1:9比例的二分类,如果不做权重调整,模型将学习到绝大多数正常样本的特征而忽略了违约样本的特征,此时模型准确率也能达到90%,而我们更关注的是违约样本。 - 错误分类样本权重调整
采用AdaBoost类似的思路,多个模型组成训练队伍在迭代过程中不断对误判的样本加大权重,以期在后续的学习中捕获误判样本的特征,提升模型准确率,为避免过拟合,可以采用多个不同模型进行,学习中不断调整彼此其他模型误判的样本的权重。 - Focal Loss
Focal Loss[1]为近来提出的针对hard/easy样本进行权重调整的方法。思路是对容易区分的样本(easy)调低权重,对难区分(hard)的样本调高权重。比如对于A样本预测概率为(0.9,01),说明模型对该样本很自信,属于easy样本,对于B样本预测概率为(0.53,0.47),说明模型对B这样类似样本的预测缺乏区分度,可以适当调整该样本的权重。具体的,Focal Loss的提出者提出了以下形式的损失函数:
其中
为传统意义上的样本权重,比如为解决样本不均衡问题,而
则用于调整hard/easy样本的权重,但p较高(接近1)时,说明样本容易区分,之类样本其权重可以相对调低,当p较低时,权重
会相对变大。Focal Loss的提出者实验表明
取2时效果最佳。
Focal函数的图形如下,
=0时候退化为一般的交叉熵损失函数。
对于梯度下降的学习方法,需要其一阶导数。比如在xgboost上可以通过自定义损失函数实现Focal Loss,因其需要Focal Loss的一阶、二阶导数,用mathematica给出个符号形式:
参考文献:
[1]Tsung-Yi Lin, Priya Goyal, Ross Girshick, Kaiming He, Piotr Dollár 2017 arXiv:1708.02002