Hinge loss:
-
用途:用于二分类问题,增加分类间隔(如SVM中最大化分类间隔),当间隔大于1时不再奖励
-
思想:
L o s s = m a x ( 0 , 1 − y ∗ y ^ ) Loss = max(0,1-y*\hat{y}) Loss=max(0,1−y∗y^)
y y y和 y ^ \hat{y} y^一个是真实值(+1或-1,即样本属于正类或者负类),一个是预测值(-1~1之间的连续数值)。
这个loss最小值为0 -
不足:预测值不一定都是在-1到1的范围内,也可能考虑的是预测的概率关系
-
改进:思路是让分类正确的概率比分类错误的概率大一个margin
L o s s = m a x ( 0 , m a r g i n − ( p T r u e − p F a l s e ) ) Loss = max(0,margin-(p_{True}-p_{False})) Loss=max(0,margin−(pTrue−pFalse))
化简后得到:
L o s s = m a x ( 0 , m a r g i n + p F a l s e − p T r u e ) Loss = max(0,margin+p_{False}-p_{True}) Loss=max(0,margin+pFalse−pTrue)
p F a l s e 和 p T r u e p_{False}和p_{True} pFalse和pTrue分别是分类正确的概率和分类错误的概率。目的是希望分类正确的概率要比分类错误的概率大出一个margin(视为安全),那样的情况下loss为0
Focal loss:
- 用途:解决难样本与容易样本的不平衡问题(不是正负样本的不平衡问题),如目标检测中存在很多容易的负样本(离GT很远的预测框)
- 思想:在交叉熵loss基础上做的改进。在模型训练的过程中更多地关注难样本,减少容易的样本的loss(这些样本分类概率置信度p很高,做法是用1-p和它的loss相乘),因为觉得这些样本对提升模型性能的帮助不大
L o s s = { − α ∗ ( 1 − p ) γ ∗ l o g ( p ) y = 1 − ( 1 − α ) ∗ p γ ∗ l o g ( 1 − p ) y = 0 Loss=\left\{\begin{aligned} & -\alpha*(1-p)^\gamma*log(p) & y=1 \\ & -(1-\alpha) * p^\gamma * log(1-p) & y=0 \end{aligned}\right. Loss={−α∗(1−p)γ∗log(p)−(1−α)∗pγ∗log(1−p)y=1y=0
p p p为分类概率, y = 1 y=1 y=1表示真实值label, α \alpha α和 γ \gamma γ为超参数,一般取 α = 0.25 \alpha=0.25 α=0.25, γ = 2 \gamma=2 γ=2
疑问:alpha = 0.25<0.75,反而是降低了正样本(难样本)的重要性?
解释:通过gamma去降低负样本(容易样本)的重要性,指数gamma的作用会强于系数alpha,但是可能会过分降低了负样本的重要性,因此希望通过alpha再找回。(alpha = 0.25作用于正样本,0.75作用于负样本,正(少数)样本衰减的要比 负样本快,更关注正样本)
- Python实现:
pass
- 不足:难样本可能是离群点,不能过于关注