Focal Loss和Balanced CE(样本比例不均衡问题)
1.信息量
当越不可能的事件或者相关程度越高的事件(今天中午总统吃什么,与我们相关程度低,信息量小;但是对于想应聘总统厨师的人来说,这件事的信息量就很大)发生了,我们获取到的信息量就越大,反之信息量越小。
样本不足会导致模型信息量不足,从而不能很好的拟合数据
2.熵
熵用来表示一个系统中所有信息量的期望,也可以用来表示一个系统的混乱程度
3.相对熵
用来衡量两个分布的差异,或者说是一个分布变换到另一个分布需要的信息增量
在机器学习中,预测分布Q在训练的过程中信息量不足,虽然可以大致描述,但是描述得有偏差,需要额外的一些信息增量才能达到和样本真实分布一样的描述。经过反复训练后,信息量足够描述后就不需要额外的信息增量了。
相对熵=p的熵-pq交叉熵:
4.交叉熵
评估标签和预测值之间的差距,而相对熵中p的熵是不变的,所以只需关注交叉熵即可
在机器学习中常用交叉熵作loss
5.交叉熵应用
5.1 单标签多分类任务
一张图片只被归为一个标签,对应的一个batch的loss就是:
5.2 多标签多分类任务
一张图片可能会被归为多个标签,每个Label都是独立分布的,可以用交叉熵对每个独立的类别进行计算,每个类别只有是或不是两种可能,服从弄二项分布,每个类别对应的交叉熵为:
如果一张图片中同时存在青蛙和老鼠,且预测结果如下:
则loss=loss猫+loss蛙+loss_鼠,而损失方式计算如下:
总结
对于多分类任务(包括二分类)的交叉熵损失为:
其中y_i表示真实概率,p_i表示预测概率
6. focal loss
focal loss最初用于图像领域解决是数据不平衡造成的模型性能问题。
6.1 样本不均衡问题
例如,在欺诈识别的案例中,好坏样本的比例为10000 : 1,这样模型很容易学习到一个把所有样本都预测为好的模型,也就是模型没有拟合到极大似然,而是只学习到了先验(样本分布),导致模型欠拟合。
影响
样本不均衡带来的根本影响是:模型会学习到样本比例这个先验信息,类别不均衡下的分类边界会侵占少数样本类的区域,也就是影响模型学习的更本质的特征,影响模型的鲁棒性。
问题分析
减少模型学习样本分布(先验信息),让模型学习数据的本质特征,这样就能解决样本不均衡问题。
必要性
从分类效果出发,不均衡对于分类结果的影响不一定是不好的(除了在预测精度要求比较高等环境下),什么时候需要解决样本不均衡(抑制先验影响)呢?
- 判断任务是否复杂:任务的复杂度越高,对样本不均衡越敏感(特征量、噪音等都和任务的复杂度相关)
- 训练样本分布与真实样本分布不一致
- 不均衡样本中占少数的那个类别数量是不是实在太少,导致模型学习不到好的特征。
- 解决方法
- 解决样本不均衡的情况
- 使用一些数据增强的方法
- 尝试像异常检测这种的单分类模型
样本不均衡问题解决
在学习任务有些难度的情况下,我们可以通过一些方法使得不同类别的样本对模型学习时的loss贡献权重均衡,从而消除模型对不同类别的偏向性,学到更为本质的特征。
我们现在就开始探讨这些解决方法:
6.1.1 样本层面
- 欠采样和过采样
- 欠采样:减少多数类的数量(如随机欠采样、NearMiss、ENN等)
- 过采样:尽量多地增加少数类的样本数量(如随机过采样、数据增强等),使得类别间项目均衡
- 混合采样:如smote+ENN
- 数据增强
- 单样本增强(主要用于图像):几何操作(翻转缩放)、颜色变换、随机擦除(裁剪)、添加噪声等方法,
imgaug
库
- 多样本增强:通过组合及转换多个样本,主要有Smote、SamplePairing、Mixup等方法,在特征空间内构造已知样本的邻域值样本
- 基于深度学习的数据增强
- 生成模型如变分自编码网络(VAE)和生成对抗网络(GAN)
缺点及解决方案
- 随机欠采样可能会导致丢弃含有重要信息的样本,在计算性能足够的情况下,可以考虑根据数据分布的采样方法(通常是基于距离的邻域关系),如ENN、NearMiss等
- 随机过采样或数据增强样本也有可能是引入片面噪声,导致过拟合;也可能是引入信息量不大的样本。此时需要考虑调整采样方法,或者通过半监督算法(可借鉴Pu-Learning思路)选择增强数据的较优子集,以提高模型的泛化能力
6.1.2 损失函数层面
损失函数层面主流的方法就是代价敏感学习(cost-sensitive),即为不同分类损失给予不同的惩罚力度(权重),在调节类别平衡的同时,也不会增加计算复杂度。
- 常用方法 class weight:scikit库中内置的方法,可以为不同类别的样本提供不同的权重(少数类的权重更高),从而平衡各类别的学习。如clf2=LogisticRegression(class_weight={0:1,1:10}) # 代价敏感学习为少数类分配更高的权重,以避免决策偏重多数类的现象(类别权重除了设定balanced,还可以作为一个超参搜索) OHEM和Focal Loss:类别的不平衡可以归结为难易样本的不平衡,而难易样本的不平衡可以归结为梯度的不平衡,OHEM和Focal Loss都做了两件事:难样本(错分类(或者说是高损失)的样本)挖掘和类别的平衡。(另外还有GHM、PISA等方法) OHEM(Online Hard Example Mining)算法的核心是选择一些hard examples(多样性和高损失的样本)作为训练样本,针对性地改善模型学习效果。对于数据类别不平衡问题,OHEM的针对性更强。 Focal loss的核心思想是在交叉熵损失函数的基础上,增加了类别的不同权重以及困难(高损失)样本的权重,以改善模型学习效果。p_t表示与真实值接近程度,越大越接近,即分类越准确(也可以说p_t反映了分类的难易程度。p_t越大,说明分类置信度越高,样本越易分;反之越难分)。系数(1-p_t)^\gamma是调节因子,相比交叉熵损失,==Focal Loss对于分类不准确的样本损失没有变化,对于分类准确的样本损失会变小==。整体而言,相当于增加了分类不准确样本的权重。 平衡交叉熵函数:合理分配权重,平衡损失函数分布,即在损失函数中增加惩罚项\alpha ,其中\frac{\alpha}{1-\alpha}=\frac{n}{m},权重根据样本分布设置