Deep Gamblers: Learning to Abstain with Portfolio Theory(理解)(github代码)

(代码托管在我的Github上,如果有帮助记得点星星嗨!)

0 - 概要

 选择分类问题(selective classification problem)是一类带有拒绝选项的监督学习问题,可以在一定程度的数据覆盖范围内获得最佳性能。文中将原始的m分类问题转化成(m+1)分类问题,其中第(m+1)表示模型由于置信度不够而放弃预测。受最佳证券投资理论(portfolio theory)的启发,文中基于博弈翻倍率(doubling rate of gambling)的损失函数来解决选择分类问题。最小化这个损失函数自然对应于将一场赛马的收益最大化,在这种情况下,博弈者的目标是在对结果下注(做出预测)和不确定的情况下保留奖金(放弃预测)之间取得平衡。这个损失函数允许以端到端方式来训练网络以及描述预测的不可靠性。与之前的方法相比,文中的方法几乎不需要修改模型推理算法或者模型结构。实验结构表明我们的方法能够较好地识别数据点的不确定性,并能在SVHN、CIFAR10以及Cat vs. Dog三个经典分类数据集上的不同覆盖规模上获得好结果。但获得样本的不确定性之后,文中没有进一步对不确定样本的学习进行挖掘,因此我提出了一种改进策略,称为基于动态分配的在线硬样本挖掘策略,在训练过程中挖掘硬样本使得分类器能够获得更好的性能,同时这种策略理论上可以很容易应用于所有深度学习中的有监督学习任务上。论文实验的复现以及改进的代码我已经开源在github上。

1 - 选择预测问题

假设X表示图片的分布,Y表示标签类别的分布,我们的目标是学习条件分布P(Y|X)和一个以权值w为参数的预测模型fw:XY.那么数据集可以表示为{(xi,yi)}i=1N,其中(xi,yi)是从X×Y中独立抽样的。扩充了拒绝选项的预测模型是一对函数(f,g),其中gh:XR是一个选择函数,其可以解释为f的二分限定词(binary qualifier)如下,

 即当选择函数g(x)低于预定的阈值h的时候,模型放弃预测。我们称g(x)x的不确定分数;不同的模型趋向于使用不同的g(x)。覆盖数据集(the covered dataset)定义为x:gh(x)h,覆盖率是覆盖数据集的大小与原始数据集的大小之比。显然地,人们会为了更低的风险而权衡覆盖率,这就是拒绝选项方法背后的动机。

2 - 方法

这篇文章提出方法背后的直觉是,一个学习放弃预测的深度学习模型实际上是在模仿一个博弈者如何在游戏中保留赌注。实际上,我们对于一个m分类问题,我们可以通过一个m+1类的分类器来预测m个类别的概率以及一个额外的第(m+1)类作为拒绝分数。

2.0 - 最佳证券投资理论

该理论认为,如果我们有一些预算,我们应该在我们愿意押多少注和储蓄多少之间进行分配。为了保持术语的清晰,如表1所示,文中给出了最佳证券投资理论及在深度学习中相应的概念的对应关系。

      

 

 简单来说,最佳证券投资理论告诉我们投资股票市场的最佳方式。假设股票市场中有m只股票,定义price relaive Xi为第i只股票在一天结束时的价格与一天开始时的价格之比,则m只股票可以表示为向量X=(X1,,Xm),且满足从分布中抽样XP(X)。投资组合是指我们在股票市场的投资,可以通过一个离散分布b=(b1,,bm),bi0,ibi=1进行建模,该分布表示对应每只股票的投资比率。因此,一天结束时的财富可以表示为S=bTX=ibiXi,其表示我们一天结束时的财富与我们这天开始时财富的比值。

定义1:股票市场投资组合b相对于股票分布P(x)的翻倍率表示为
 W(b,P)=log2(bTx)dP(x).

上述定义告诉我们我们财富的增长速度,因此我们期望去最大化W,下面只考虑简化版的最佳证券投资理论,称为“赛马”(horse race)问题。

2.1 - 赛马问题

不同于股票市场,赛马每一次只有一匹马赢得比赛,每匹马的只可能赢或者输,则假设第j匹马赢得比赛,可以用one-hot向量表示为表示为x(j)=(0,,0,1,0,,0),其中第j个位置为1,其余为0。在赛马中,我们要在m匹马上进行押注,第i匹马赢得比赛的概率为pi,若假设押注第i匹马并且第i匹马赢得比赛的回报为oi,否则回报为0,并且假设押注者的押注分布为bi,且满足bi0,ibi=1。则比赛结束之后,假设第j匹马赢得比赛,则资产可表示为S(x(j))=bjoj。经过n场比赛之后总资产可以表示为,
(1)Sn=i=1nS(xi).
注意到每一场比赛之间的结果是不会相互影响的,对应于深度学习中我们可以分batch进行采样和训练。

定义2:赛马的翻倍率(the doubling rate of a horse race)表示为,
 W(b,p)=Elog2(S)=i=1mpilog2(bioi).

与定义1相似,我们的目标是最大化赛马的翻倍率。具体地在赛马问题中,押注者可以采用部分财产进行押注并且保留剩余的财产,对应于深度学习中的m分类问题,模型即可以预测m个类别又可以预测为第m+1个类别来表示放弃预测。固定第m+1个类别的回报为1,那么根据定义2可以将优化问题表示为,
(2)max W(b,p)=i=1mpilog2(bioi+bm+1).
上述也可以称为押注者损失函数(gambler's loss)。

2.2 - 将分类问题视为赛马问题

m分类问题可以视为寻找一个RnRm的映射函数f,其中nm分别是输入维度和预测分类数。对于输出f(x),我们假设其已经被标准化了,因此我们将f()视为输入x划分为第j类的概率,表示为,
(3)Pr(j|x)=f(x)j,
我们将映射函数f用参数为w的神经网络来建模,其输出为所有类别的概率分布。我们期望对于正确类别j进行极大似然化,则可以表示为,
(4)max E[log p(j|x)]=maxwE[log fw(x)j],
对于m分类任务,我们加入额外的第m+1类表示放弃预测因此可将其转换为赛马问题。对于一个大小为B的mini-batch,假设所有类别的回报均为参数o,那么目标函数可以表示为,
(5)maxf W(b(f),p)=maxwiBlog[fw(xi)j(i)o+fw(xi)m+1],
其中i是batch中的第i个样本,j(i)是第i个样本的标签。o是一个超参数,其值越大则更加鼓励模型进行有效预测,否则将更倾向于放弃预测(第m+1类)。

2.3 -* 基于动态分配的在线硬样本挖掘(稍作改进)

我注意到,文中的方法虽然能够预测出样本的不置信分数,从而决定是否放弃预测,但没有对于高不置信的样本进一步进行挖掘。这里我称高不置信样本为硬样本,我认为在训练过程中不同难度的样本对于损失函数的贡献应该具有不同的权重,模型对于不确定的样本应该着重学习,而对于容易分类的样本应该降低其权重,因此我提出了一种称为基于动态分配的在线硬样本挖掘的学习策略。在训练过程中,根据样本的不置信程度调整样本对于损失函数贡献的权重,如下公式所示,
(6)wik,b=1+(mik,bjBmjk,bjB1jBmjk,b),
(7)lk,b=iBwik,blik,bjB1,
其中k为第k个epoch,b为第b个batch,i为第i个样本,mik,b为第k个epoch的第b个batch的第i个样本的评价指标,这里采用的是第(m+1)类的经过softmax标准化之后的预测分数作为评价指标,即预测的不置信程度,该评价指标越大,分配权重越大,lik,b为第k个epoch的第b个batch的第i个样本的损失值,lk,b为第k个epoch的第b个batch的损失值。

3 - 实验

 

 3.0 - 合成高斯数据集

首先我复现了文章中的一个小的实验,但文章中给定的细节不够,我只是参照文章的思路,一些细节可能有所不同但结果分析是一致的。数据处理部分,先采用产生两个2D的高斯分布作为训练集,第一个高斯分布的均值为(1.3,1.3)且协方差矩阵满足Cov(X,Y)=0,Cov(X,X)=1.6,第二个高斯分布的均值为(1.3,1.3),协方差矩阵与第一个分布一致,两个分布各产生400个样本数据,生成数据如图1(a)所示。然后采用一个具有2个50个单元且激活函数为tanh的隐藏层的全连接网络进行训练,优化器选择SGD,初始学习率为0.1,学习率衰减因子为5e-4,动量为0.9,batch size为数据集的全数据量。
对于不同的阈值h,我分别对网络进行训练,对于高于该阈值的样本点进行拒绝。实验结果如图1(b-e)所示,模型能够将两个高斯分布的边界正确的识别为不确定区域,随着阈值的降低,不确定区域的宽度越来越大,在h=0.5的时候几乎所有的样本点都被拒绝,这说明对于文章中的方法需要选择好的阈值h来获得一个合适的覆盖率。
复现的模型采用VGG16的一个针对小数据集的优化版本[6],其加入了batch normalizaiton层以及dropout正则化,优化器采用SGD,初始学习率为0.1,学习率衰减因子为5e-4,动量为0.9,分别在epoch为列表[25,50,75,100,125,150,175,200,225,250,275]中将学习率缩小一半,训练时batch size为128,测试时batch size为200,总训练轮数为300轮。由于计算资源有限,无法跟原文一样采用网格搜索方法搜索出每个数据集每个模型对应的最好的回报o,因此我直接根据文中给出的o进行实验,对于数据集CIFAR10、Cat vs. Dogs、SVHN三个数据集,选择的o分别为2.2、2.0、2.6,baseline的结果引用自[7]。实验结果分别如表234所示,文章中提出的方法基本优于其他三种baseline方法,并且在覆盖率越高时,与baseline模型相比文章中的方法优势更加明显,这说明文章中提出的模型对于预测弃权更加谨慎,大部分样本均能够正确分类,只有极少数样本由于不确定性而放弃预测,但几种基本的baseline方法可能更倾向于放弃预测。但另一方面,这种倾向性其实受超参数o的影响,在实验过程中,我发现觉得这个参数对于结果的影响很大,因此文章中采用这样的实验来说明提出方法的优越性感觉支撑性不太足,baseline方法是否也可以通过加入某些超参数来控制倾向率从而达到更高的精度仍然是一个可探索的点。另外,将上述提出的基于动态分配的在线硬样本挖掘策略与文中提出模型结合之后,可以在没有加入额外参数量的前提下稍微提高原模型的性能。
(代码托管在我的Github上,如果有帮助记得点星星嗨!)
 
       

 4 - 参考资料

https://github.com/czifan/DeepGamblers.pytorch

https://arxiv.org/abs/1907.00208

posted @   CZiFan  阅读(869)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示