数据角度
Loss角度
二分类交叉熵:
\[Loss=L(y,\hat{p})=-ylog(\hat{p})-(1-y)log(1-\hat{p}) \]等价于
\[L(y, \hat{p}) = \begin{cases} - \log(\hat{p}) & \text{if } y=1 \\ - \log(1 - \hat{p}) & \text{if } y=0 \end{cases} \]测试集上的loss为
\[L = \frac{1}{N} \left( \sum_{y_i=1}^{m} -\log(\hat{p}_i) + \sum_{y_i=0}^{n} -\log(1 - \hat{p}_i) \right) \]其中m为正样本个数,n为负样本个数,N为样本总数
balanced cross entropy
放大出现次数少的label的loss
缩小出现次数多的label的loss
其中\(\frac{\alpha}{1 - \alpha} = \frac{n}{m}\)
Online Hard Example Mining
只用较难的样本来更新网络
\[ L(y, \hat{p}) = \begin{cases} - \log(\hat{p}) & \text{if } y=1 , \hat{p}<0.6 \\ - \log(1 - \hat{p}) & \text{if } y=0 , \hat{p}>0.4 \end{cases} \]以二分类为例,我们认为大于0.5的就是正样本了,小于0.5的就是负样本。这样就意味着,我们可以“有选择”地更新模型,比如,设定一个阈值为0.6,那么模型对某个正样本的输出大于0.6,我就不根据这个样本来更新模型了,模型对某个负样本的输出小于0.4,我也不根据这个样本来更新模型了,只有在0.4~0.6之间的,才让模型更新,这时候模型会更“集中精力”去关心那些“模凌两可”的样本,从而使得分类效果更好,这跟传统的SVM思想是一致的。
还能防止过拟合:防止模型去把简单样本做的更好,来降低loss
参考博客
不足:这样算是硬截断的loss,我们只告诉模型正样本的预测值大于0.6就不更新了,却没有告诉它要“保持”大于0.6!
解决方案:
- 采样部分loss大于0.6的简单样本
- Focal loss(软化,可导)
Focal loss
公式如下:
\[L_{fl} = \begin{cases} - (1 - \hat{p})^\gamma \log(\hat{p}) & \text{if } y=1 \\ - \hat{p}^\gamma \log(1 - \hat{p}) & \text{if } y=0 \end{cases} \]focal loss用较可导的方式量化了每个样本的难易程度,使loss聚焦于难分样本。
标签:loss,log,解决方案,样本,0.6,均衡,cases,hat From: https://www.cnblogs.com/shiiiilong/p/17777148.html