社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

案例 :SVP/一种用于深度学习的高效数据选择方法

数据分析 • 3 年前 • 342 次点击  
作者:Cody Coleman, Peter Bailis, and Matei Zaharia 翻译:杨毅远 校对:王琦

本文长度为1800字,建议阅读7分钟

本文为你介绍SVP方法如何在保证识别准确率的同时,有效地提高深度学习中计算效率。


本文主要介绍了SVP(Selection via proxy)方法。作为一种用于深度学习的数据选择方法,其可以在保证识别准确率的同时,有效地提高深度学习中计算效率。例如,在主动学习中,SVP运行速度最多可提高41.9倍,同时误差没有显著增加,这对于深度学习中提高模型训练速度来说是一个有效方法。


在许多任务中我们会用可获得的海量数据来训练深度网络,那么在实际训练中我们怎样可以快速确定应该使用哪些数据呢?像主动学习(active learning)和核心集选择(core-set selection)之类的数据选择方法是确定训练数据的强大手段,但是这些方法计算花销大且难以大规模使用。

在最近ICLR 2020的工作中(https://openreview.net/pdf?id=HJg2b0VYDr),我们提出了一种将数据选择速度提高多达41.9倍的方法。我们使用一种规模较小、精度较差的模型作为规模较大目标模型的低代价的代理,并用此来选择用于训练的“核心”数据。尽管这些代理模型准确性较低,但它们选择的是不会对最终模型的准确性产生较大影响(通常在0.1%以内)的高质量数据。另外,在不影响ResNet-164模型准确性的情况下,上述代理模型可以清洗掉50%以上的CIFAR-10训练数据,从而使端到端模型的训练速度提升40%。

我们在ICLR 2020(https://iclr.cc/) 上发表了关于SVP(selection via proxy)方法的论文,并且代码可在github中获得。

论文链接:

https://openreview.net/pdf?id=HJg2b0VYDr

代码链接:

https://github.com/stanford-futuredata/selection-via-proxy


直觉:模型架构对样本的排序相似


从宏观上来看,数据选择方法中的迭代过程包括以下三个步骤:

  1.  根据一些信息的度量(例如:熵)对样本进行排序;

  2.  选择排名最高的样本;

  3.  根据选定的样本更新模型。


其中第三步是深度学习的主要瓶颈。模型需要花费数小时甚至数天的时间进行训练,因此对于我们选择的每个样本,从头开始训练模型都不划算。在SVP背后我们核心见解是,虽然较大的模型更准确,但它们排序并且选择相似样本的能力跟规模更小、准确率更低的模型一样。

例如,下图显示了来自相似模型架构不同模型之间的相关程度。我们可以利用这些高相关性来创建代理模型,从而将数据选择速度提高一个数量级。


在ImageNet数据集下模型架构的排名。 上图为在ImageNet数据集上PyTorch预训练模型与最大熵排名之间的Spearman相关性。大多数模型架构之间相关性很高。例如,MobileNet V2基于熵的排名与ResNet50模型高度相关,尽管该模型参数要少得多(3.5M vs 25.6M)。

创建高效且有用的代理模型


我们探索了两种创建代理模型的主要方法:

  • 缩小网络规模


对于具有多层的深层模型,我们可以减小隐藏层的大小或数量,这是在权衡模型精度下减少训练时间的简单方法。例如,ResNet20模型在26分钟内在CIFAR10数据集中取得了7.6% 的 top-1误差,而更大的ResNet164模型花费了4小时才减少了2.5%的误差。


  • 训练轮数减少


在训练期间,大部分时间都花在了误差减少相对较小的时间段。例如,在训练ResNet20模型时,几乎一半的训练时间(26分钟中的12分钟)都花费在改进测试集的1.4%错误率上。基于这些观察,我们还研究了可以更快地获得目标模型决策边界的近似值并且使用较少迭代次数的代理训练模型。


结果


为了评估SVP对数据选择运行时间和质量的影响,我们将SVP使用在主动学习和核心集选择中来对于以下五个数据集进行数据选择:CIFAR10,CIFAR100,ImageNet,Amazon Review Polarity和Amazon Review Full。对于主动学习,SVP在数据集中达到了相似甚至更高的准确率,并且在标签预算(labeling budgets)的数据选择的运行时间上提升了多达41.9倍:
 


主动学习中的SVP表现。使用最小置信度不确定性采样(通过不同的代理模型和在四个数据集上的标签预算)来进行3次主动学习的平均(±1std)数据选择加速。粗体的加速表明使用相同模型来进行选择和使用最终预测的基准方法的设置不是误差较低就是误差在平均top-1误差的1 std之内。在整个数据集中,SVP加快了数据选择速度的同时没有显著增加最终结果的误差。

对于核心集选择,代理模型在选择保持高精度数据子集时的性能几乎与目标模型相同甚至更好。

特别是在CIFAR10上,小规模代理模型删除了50%的数据,但不会影响在子集上训练的更大、更准确的模型的最终准确性。此外,在所有数据上训练代理模型,选择要保留的样本以及在子集上训练目标模型的整个过程仅花费了2小时23分钟,相比于在完整数据集上训练目标模型的标准方法,端到端的训练速度提高了1.6倍,如下图所示:


在有无代理选择数据的情况下,ResNet164(带有预激活)在CIFAR10上的训练曲线。浅红色线表示训练代理模型(ResNet20)。红色实线表示在使用代理的图像子集上训练目标模型(ResNet164)。使用代理的方法,删除了50%的数据且不会影响ResNet164的最终准确性,将端到端的训练时间从3小时49分钟缩短到2小时23分钟。

总结


SVP方法可以通过在数据选择期间用计算花销小的代理模型来代替计算花销大的模型,从而提高了深度学习中主动学习和核心集选择的计算效率。在主动学习中,SVP的数据选择运行时间最多可提高41.9倍,同时误差没有显著增加(通常在0.1%以内);在核心集选择中,SVP可以从CIFAR10中删除多达50%的数据,并使训练目标模型花费的时间缩短为原来的十分之一,从而使端到端模型的训练速度提高1.6倍。

原文标题:

Selection via Proxy: Efficient Data Selection for Deep Learning

原文链接:

https://dawn.cs.stanford.edu/2020/04/23/selection-via-proxy/

END


转自: 数据派THU 公众号

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


合作请加QQ:365242293  

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62999
 
342 次点击