Mission Impossible:Rank类损失函数的直接优化
本文将对 Rank 类指标如 AUC-ROC,设计损失函数,从而实现直接优化。读到这我觉得就像当年学高数一样会有两类反应:这也要证?这也能证?如果你是第一种,那么文章的开头介绍了背景知识,看完你会变成第二种反应的。如果你是第二种,说明你对这个问题已经有了一些研究,那么可以直接从第三部分阅读。本文主要参考 Eban et al. (2016)。 Background 对于分类问题,为了度量一个模型的性能,我们构造出了很多指标,比如准确率、查全率(recall,有些地方翻译为召回率,我觉得还是查全率更直观一些)、\(F_{\beta}\)、ROC曲线等等,根据应用场景的不同,我们使用不同指标进行衡量,比如疾病筛选的时候我们认为把病人诊断为健康人的代价要远远大于把健康人诊断为病人,我们会更加强调查全率,或者我们希望使用\(P@R\),在规定查全率下尽量提高准确率。同时为了比较不同的模型,标量我们可以直接进行数值比较,为了处理如ROC曲线之类的指标,我们又构造了如平衡点(Break-Even Point)、AUC(Area Under Curve)等指标。 当我们根据场景选定指标后,就会将指标转化为损失函数,通过对损失函数的优化来达到指标的最大化。比如我们希望对准确率进行优化,实际上我们希望最小化$$\frac{1}{m}\sum_{i=1}^{m} \mathbb I (f(x_i) \neq y_i)$$其中 \(m\) 是样本个数,\(x_i, y_i\) 分别是第 \(i\) 个样本和其真实标记,\(f\) 是我们的学习器。通常我们希望我们的损失函数是可微的,从而可以很方便的使用 BP 算法对整个学习器的参数进行梯度下降。所以这时候我们做一些近似,使用 Cross Entropy 等替代示性函数,这样我们就将实际应用场景的要求转化为对一个可微函数的梯度下降求最优解的数学问题。随着数据的增加,我们的训练集动辄几十万上百万数据,没有办法一次性计算出损失再进行下降,但是从上式可以看出,不同样本之间的损失计算并没有依赖关系, 所以我们使用 mini-batch 的方式,每次使用一部分数据进行梯度下降,我们通过局部最小,来期望达到累加的和最小,从而实现海量数据分批的梯度下降。将批大小设置在 GPU 的处理宽度内,通过GPU最擅长的矩阵运算,大大加快了模型的收敛速度。这也是机器学习最基本的套路。 当然,事情远没有那么简单。我们以 AUC-ROC 为例来看一下 AUC 类的指标。关于 AUC 的详细介绍可以参考 周志华. (2016). 网上也有很多资料,这个比较基础,我就不介绍了。我们假定任意两个样本的预测值都不相同,那么 ROC 之上的面积可以表示为$$1 – AUC = l_{rank} = \frac{1}{m^+m^-}\sum_{x^+\in D^+} … Continue reading Mission Impossible:Rank类损失函数的直接优化
Copy and paste this URL into your WordPress site to embed
Copy and paste this code into your site to embed