还在困惑需要多少数据吗?来看看这份估计指南 | CVPR 2022
论文基于实验验证,为数据需求预测这一问题提供了比较有用的建议,详情可以直接看看Conclusion部分。
来源:晓飞的算法工程笔记 公众号
论文: How Much More Data Do I Need? Estimating Requirements for Downstream Tasks
Introduction
给定一个小的训练数据集和一个学习算法,需要多少数据才能达到目标性能?这个问题在自动驾驶或医学成像等数据收集难的场景中至关重要。高估数据需求可能会因不必要的收集、清理和标注而产生成本,而低估意味着必须在后期收集更多数据,导致未来成本和工作流程延迟。
最近提出的neural scaling laws
的相关工作表明,Power Law
函数可以基于已有数据集拟合模型性能曲线,这也意味着能够将其应用到目标性能的数据需求预测中。
论文对多个函数进行性能拟合发现,如图1所示,当使用小数据集进行预测时,拟合函数可能会以不同的方式偏离实际的性能曲线。更重要的是,即使是预测精度的小误差也会导致高估或低估数据需求的大误差,这可能会带来巨大的运营成本。
为此,论文基于多个计算机视觉任务,系统地研究了包含Power Law
在内的一系列回归函数,以便更好地估计数据需求。实验结果表明,多个回归函数都非常适合模型性能估计,这意味着对于所有情况都没有唯一的最佳回归函数。此外,结合用于调整的校正因子以及多轮收集方案,可以显着提高数据需求估计的性能。基于论文的指南,从业者可以准确估计机器学习系统的数据需求,从而节省开发时间和数据采集成本。
总而言之,论文通过实验为实际应用中的数据收集提供了易于实施的指南:
- 不同预测方法估计的数据比需要的多得多或少得多,使用多轮数据收集和
under-estimate
方案可以收集高达90%
的真实所需数据量。 - 通过已有的任务的采集模拟,可以确定哪些方法低估了数据需求,并学习一个校正因子来解决这个缺陷。使用校正因子并进行最多五轮数据收集,最多可以收集到任何目标性能所需的最小数据量的一到两倍。
- 在只剩下一轮数据收集,可以使用所有的回归函数来获得一个真实数据要求的区间界限,可以指导建模者根据实际需求或多或少地积极收集数据。
Main problem
The data collection problem
定义\(z\sim p(z)\)是从分布p
中抽样的数据,例如\(z := (x, y)\)对应于图像x
和标签y
。考虑一个预测问题,目前有一个初始训练数据集\(\mathcal{D}_0 := \{z_i\}^{n_0}_{i=1}\)和一个模型f
。定义\(V_f(\mathcal{D})\)为模型在集合\(\mathcal{D}\)上的训练评分函数,目标是获得预定的目标分数\(V^* > V_f(\mathcal{D}_0)\)。
为了实现目标,采样\(\hat{n}\)个额外的数据\(\hat{\mathcal{D}} := \{\hat{z}_i\}^{\hat{n}}_{i=1}\sim p(z)\),然后评估\(V_{f}(\mathcal{D}_{0}\cup \hat{\mathcal{D}})\)。如果没达到目标,就必须增加更多的额外数据。因为每个数据都会产生收集、清理和标记的成本,所以达到目标增加的额外数据\(\hat{n}\)越小越好。此外,由于启动一轮数据收集本身也很耗时,所以最多只能进行T
轮。在T
轮内达不到目标要求,就是没有解决问题。
数据收集问题可总结为:对于初始化\(\hat{\mathcal{D}} = \varnothing\),重复进行如下迭代:
- 估计需要的额外数据量\(\hat{n}\)。
- 采样数据\(|\hat{\mathcal{D}}| = \hat{n}\),然后评估分数:
- 如果\(V_f(\mathcal{D}_0\cup \hat{\mathcal{D}}) ≥ V^*\),则终止。
- 否则,重复另一轮迭代,最多进行
T
轮。
数据收集问题的目标是在T
轮内选择满足\(V_f(\mathcal{D}_0\cup \hat{\mathcal{D}}) ≥ V^*\)的最小\(\hat{n}\),而论文重点关注循环的第一步:准确估计满足\(V^∗\)所需的\(\hat{n}\)。
Regressing performance using data set size
根据先前研究的经验设定的,设定了如图2所示的数据预测和采集流程。先前的研究发现,对于递增的数据集\(\mathcal{D}_0 \subset\mathcal{D}_1\subset \cdots\)以及\(n_i=|\mathcal{D}_i|\),训练出来的模型的准确率满足以下单调递增的凹函数:
从上述经验可知,随着收集数据的越多,额外数据带来的收益逐渐减少。此外,可以使用单调递增的凹函数对\(v(n)\)进行回归建模。
表1中的四个函数为满足上述经验的候选项。虽然可以使用更复杂的模型,但这些具有少量参数的简单函数更适合样本较少的场景(指用于拟合的数据较少)。通过拟合的回归函数,可以求解最小的\(\hat{n}\),使得\(\hat{v}(n_0 + \hat{n}; \theta)\ge V^∗\)。
整体的逻辑如算法1所示:
- 选择
r
个子集\(\mathcal{S_0}\subset \mathcal{S_1}\subset\cdots\subset \mathcal{S}_{r−1} = \mathcal{D}_0\),计算它们的分数来创建一个回归数据集\(\mathcal{R}:=\{|\mathcal{S}_i|, V_f(\mathcal{S}_i)\}^{r-1}_{i=0}\) - 从表1中选择一个函数\(\hat{v}(n; \theta)\)进行数据收集循环,直到准确率满足要求:
- 通过最小二乘法最小化拟合参数\(\theta\)。
- 根据\(\hat{v}(\hat{n}; \theta^*)\ge V^∗\)取最小的额外数据量\(\hat{n}\)
- 收集\(\hat{n}\)个新数据。
- 用\((|\mathcal{D}_0| + |\hat{\mathcal{D}}|, V_f (\mathcal{D}_0 \cup \hat{\mathcal{D}}))\)扩充拟合数据\(\mathcal{R}\)。
现有的研究表明,Power Law
可以根据数据集大小来估计模型精度,但实际应用时存在以下三大挑战。
- All of the functions in Table 1 fit the model score
当有足够的初始数据,表1的回归函数都可以准确拟合模型性能曲线\(v(n)\)。如图1所示,当初始化数据集满足\(|\mathcal{D}_0| = 600,000\)张图像(≈ 50% 的数据集)时,每个函数的预测准确度与实际的误差最多为6%。尽管Power Law
是根据理论推导选择的,但还没有足够的实验证明其的确优于其他函数。
- Extrapolating accuracy with small data sets is hard
在数据有限的情况下,所有回归函数都无法很好地推断\(v(n)\)。如图1所示,当初始化数据集满足\(|\mathcal{D}_0| = 125,000\)张图像(≈ 10% 的数据集)时,部分函数的预测准确度偏离了实际准确率。
需要注意的是,部分函数的准确率比Power Law
要好。在之前的研究中也观察到了这种小数据的情况,提出对数据集和模型大小进行联合回归的解决方案。虽然这样做能提高性能,但需要通过采样数据子集和修改不同模型来获得2倍大小的\(\mathcal{R}\),这在计算上变得昂贵且耗时。因此,论文专注于使用少量训练统计数据的简单估计器,即\(r \le 10\)。
- Small accuracy errors yield large data errors
假设在ImageNet上构建一个满足67%测试集准确率的模型,大概需要用到900000张图像。尽管使用包含600,000张图像拟合的估计函数的误差\(| 67\% − \hat{v}(900,000; \theta)|\)很小(1%-6%),但其预估达到67%性能所需的图像数量的跨度却很大(120,000-310,000),仅1%的性能预测误差就会导致额外多收集34%的数据。由于预测误差的容忍度很低,所以必须确定估计数据需求的最佳实践。
Empirical findings
Data and methods
论文在表2的图像分类、对象检测和语义分割任务上测试数据收集问题,不同任务类型训练不同的网络:图像分类训练的ResNets
,2D目标检测训练的SSD300
,3D目标检测训练的FCOS3D
,语义分割训练的Deeplabv3
,BEV分割训练的Lift Splat
架构。对于每个任务,模型的架构和学习算法,包括数据采样进行了少量修改,详细内容可以去看看附录。
在进行实验之前需要做以下准备:
构造拟合数据集
:对于每个数据集和任务,有一个初始数据集\(\mathcal{D}_0\),在分析时根据\(\mathcal{D}_0\)与完整数据集的相对大小记录\(n_0\)。根据算法1创建回归数据集\(\mathcal{R}\),以线性增长的大小(\(|S_i|=|\mathcal{D}_0(i+1)/r|\))采样r
个子集,其中\(r\le 10\)以确保开销足够小。构造GT
:为了在预测性能和估计数据需求方面评估回归函数,采样多个子集\(\mathcal{D}_1\subset \mathcal{D}_2\subset .· ·\)(相对于完整训练数据集的10%、20%、30%、... 、 100%的子集)。对于每个子集,训练模型并评估分数\(\mathcal{V}_f(\mathcal{D}_i)\)。基于子集的数据量和分数,构建分段线性评分函数\(v(n)\)并将其用作GT。
论文进行两种类型的实验:
- 使用\(\mathcal{R}\)拟合表1的回归函数,然后评估其对\(|\mathcal{D}_i|\ge|\mathcal{D}_0|\)的预测分数相对于\(\mathcal{V}_f(\mathcal{D}_i)\)的误差,可以揭示每个回归函数是否可以很好地推断模型对更大数据集的得分。
- 使用\(n_0 = 10\%\)进行初始化(对于VOC,\(n_0 = 20\%\))并在\(T = 1、3、5\)轮内估计需要多少数据来获得不同的目标分数\(V^*\)。整体流程跟算法1类似,不同之处在于模拟中不会真的采样更多数据并训练评估\(\mathcal{V}_f (\mathcal{D}_0\cup \hat{\mathcal{D}})\),而是直接用前面
构造GT
中获得的GT函数\(v(n_0 + \hat{n})\)直接输出模型分数。这样的模拟近似于真实的数据收集问题,同时简化了实验,不必反复重新训练模型。
Analysis
Regression.
表3总结了每个回归函数在预测更大数据集的分数时的均方根误差(RMSE),每项测试中使用不同的随机种子执行3次,主要有以下与前两个挑战相关的发现:
- 当\(n_0\ge 50\%\)时,每个函数都能达到低RMSE,并且有至少一个回归函数的RMSE小于1。
- 当\(n_0=10\%\)时,大多数函数会产生高RMSE。这表明当拟合小数据集时,这些函数容易偏离真实的模型性能曲线\(v(n)\)。
- 对于大多数数据集,候选的回归函数能够始终产生低RMSE,特别是
Arctan
函数,在分类任务上表现非常出色。
这些结果表明:
- 从小数据集预测更大数据集的模型性能是较为困难的。
Power Law
之外的其他回归函数的分数回归可能会更准确。
Simulation.
给定初始数据集\(n_0\)和数据收集轮数\(T\),通过求解一系列目标\(V^*\)来模拟每个回归函数的数据收集能力。图3展示了每个函数收集的最终数据与根据GT性能曲线对应的最小数据的比率,即(\(n_0 + \hat{n})/(n_0 +n^∗)\),其中\(n^∗\)是满足\(v(n_0 +n^∗) = V^∗\)的真实最小数据需求量。
在评估每个回归函数如何收集数据时,需要考虑两种情况:
- 如果比率小于1,则该函数是乐观预测,低估了需要多少数据,也意味着无法在
T
轮内收集到足够的数据来满足\(V^*\)。 - 如果比率大于 1,则该函数是悲观预测,高估了需要多少数据。理想的数据收集策略,其最小比率应该大于1。实验表明,
Arctan
函数是最悲观的,经常出现较大幅度的最大比率。
这个实验验证了第三个挑战,低回归误差函数并不一定转化为更好的数据收集。在CIFAR100
、ImageNet
和VOC
上,使用Arctan
可能会导致收集比实际需要多五倍的数据,而在nuScenes
上进行BEV
分割则可能会导致超过10
倍的数据收集。
尽管表3显示Arctan
在所有函数中实现了最低的RMSE
(3.19),但使用它来估计数据需求会导致过多的额外数据收集。在确定良好的数据收集策略时,仅分析回归误差是不够的,需要论文提出的模拟方法。
对于大多数回归函数,需要迭代多轮才能收集到足够的数据。当\(T = 1\)时,Power Law
、Logarithmic
和Algebraic Root
都低估了除VOC
之外的所有数据集和任务的数据需求。而当\(T = 5\)时,对于除CIFAR10
之外的每个数据集,所有函数在\(V^∗\)的整个范围内都能采集到实际所需的90%数据以上。
但是当\(V^∗\)很大时,即使\(T=5\),这些估计器仍然会低估数据需求。虽然这样估计的成本不高,但并未能解决数据采集问题。需要对这些估计量进行纠正,从而更好地指导数据收集。
Towards better estimates of data
从前面的模拟实验可以看到,乐观的预测无法收集足够的数据来满足\(V^*\),而悲观预测则导致收集的数据远远超过所需的数据。所以论文引入一个校正因子,用于解决低估数据需求的问题。
A correction factor to help meet the target
在算法1的每一轮数据收集中,需要根据\(\hat{v}(n_0 + \hat{n}; \theta^∗) \ge V^∗\)最小化\(\hat{n}\)。然而,前面的模拟实验表明,大多数回归函数是乐观的,低估了需要数据量。一种简单的纠正少估数据的方法是添加校正因子\(\tau \ge 0\),估计满足校正的更高目标\(V^* + \tau\)所需的数据量。因此,固定一个常数\(\tau\)并修改算法1,根据根据\(\hat{v}(n_0 + \hat{n}; \theta^∗) \ge V^∗ + \tau\)最小化\(\hat{n}\)。
为了确定校正因子的值,将其当作超参数进行拟合。假设现有完整的CIFAR10
数据集,想为未来的数据集构建一个T
轮收集策略:
- 使用每个回归函数模拟
CIFAR10
的\(\tau = 0\)的数据收集量,获得图3的曲线。 - 增加\(\tau\)直到该函数的整个比率曲线高于1,即收集到足够的数据来满足
CIFAR10
的所有目标值\(V^*\)。 - 使用这个拟合的\(\tau\)作为未来数据集的校正因子。
通过将校正因子与多轮数据收集相结合,就可以始终收集到略高于最低数据要求的数据。表4比较了\(\tau\)对每个回归函数在各数据集上的最小比率的影响。如果不进行校正,Power Law
、Logarithmic
和Algebraic Root
都低估了除VOC
之外的所有数据集和任务的数据需求。而使用\(\tau\)之后,这些函数几乎都实现1
到2
之间的比率。
此外,对于每个数据集,这三个回归函数在\(T = 5\)时都达到各自的最低比率(高于1
)。如图4所示,Power Law
、Logarithmic
和Algebraic Root
在每个数据集上都实现了1.03
到2.5
之间的比率。需要注意的是,所有数据集都没有统一最佳回归函数。由于Arctan
本身就高估了数据需求,所以这个函数并没有从校正中受益。
所以,从模拟实验中可以看出,修正后的Power Law
、Logarithmic
和Algebraic Root
搭配\(T=5\),能够满足预期目标的同时最小化收集的总数据量。
Empirical bounds on the data requirement
如果校正因子拟合不佳或收集轮数\(T\)有限,仍可能低估或高估数据要求。从表4中可以看出,在\(T = 1\)的nuScenes
分割任务模拟中,没有\(\tau\)的Power Law
仅估计所需数据的58%,而使用\(\tau\)则导致估计的数据比需要的多25倍。
因此,在某些应用中,建模者可能还需要根据经验估计应该收集的数据量。假设在最后一轮的采集估计必须满足数据收集目标,此时就需要查看最坏和最好情况的采集估计,即上限和下限。不同的回归函数会产生不同的预测,其中最大的预测值是最坏情况的估计,最小的预测值就是最好情况的估计。
对于每个数据集,设置\(T = 1\)和不同的初始数据集\(n_0\)进行实验,使用八个回归函数对不同\(V^*\)进行数据需求估计。图5的上行展示了在不同\(n_0\)基础上,所有\(V^*\)所需的真实数据量在函数集预测值的上界和下界之间的概率,下行则进一步展示了上界和下界与真实值比例平均值。
结果表明,基于足够初始数据集的单轮预测能够准确估计数据需求的上限和下限。此外,即使需要多轮才能收集到比较足够的数据,我们也能在最后一轮获得需求的上下区间。所以,在实际应用中,上下界限可以指导建模者根据任务的情况做出乐观或悲观的选择。
Conclusion
虽然模型性能预测受到越来越多关注,但论文发现性能估计并不能完成解决数据需求。即使是性能预测的小误差,也会导致数据收集中的大误差,这意味着一个好的数据估计器允许的误差远小于直觉所想的。此外,性能预测误差分为低估或高估,都会对数据收集造成不同的挑战。为了更好地分析数据收集策略,论文制定了迭代数据收集的模拟方案。通过实验,论文得出了几个高层次的见解:
- 不同预测方法估计的数据比需要的多得多或少得多,使用多轮数据收集和
under-estimate
方案可以收集高达90%
的真实所需数据量。 - 通过已有的任务的采集模拟,可以确定哪些方法低估了数据需求,并学习一个校正因子来解决这个缺陷。使用校正因子并进行最多五轮数据收集,最多可以收集到任何目标性能所需的最小数据量的一到两倍。
- 在只剩下一轮数据收集,可以使用所有的回归函数来获得一个真实数据要求的区间界限,可以指导建模者根据实际需求或多或少地积极收集数据。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
还在困惑需要多少数据吗?来看看这份估计指南 | CVPR 2022的更多相关文章
- 什么?都1202年了还不懂k8s和容器的关系?!这份k8s指南快拿走不谢!
都1202年了,还是有许多人搞不清容器与k8s之间的关系.在开始本篇正文之前,我们先来捋一捋这对"CP"的关系. 你可能已经很熟悉虚拟机了,最常见的莫过于我们拿到macOS却需要用 ...
- 单表40G,不要吃惊,还能往里面插入数据,哈哈
单表40G,不要吃惊,还能往里面插入数据,哈哈 上图:
- vue单页应用中,使用setInterval()定时向服务器获取数据,后来跳转页面后,发现还在不停的获取数据。
使用VUE开发单页项目时遇到这样的问题,mounted中使用setInterval()定时向服务器获取数据,后来跳转页面后,发现还在不停的获取数据.我以为是因为我路由用的push导致的,改成repla ...
- 2021年都要过去啦,你还在用Excel做数据可视化效果吗?
2021年都要过去啦,你还在用Excel做数据可视化效果吗?古语有云,"工欲善其事,必先利其器",没有专业的工具,前期准备的再好也是白搭.现在运用数据可视化工具于经营活动中的企业是 ...
- 十万个为什么:现在还没发现“虚函数virtual”和多态性的优点,估计是因为我还没有编程序吧。
十万个为什么:现在还没发现“虚函数virtual”和多态性的优点,估计是因为我还没有编程序吧.
- 你别告诉我你还在用Excel做数据透视分析吧,太low了!
来到大数据分析的时代,大量的大数据分析软件涌现,尽管如此,如果今天有人问起最常用的数据透视分析工具是什么的时候,我猜想Excel应该是大家的不二之选. 但是其实我想说,用现在的手机来打比方,Excel ...
- 什么?还在用delete删除数据《死磕MySQL系列 九》
系列文章 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 七.字符串可以这样加索引,你知吗?& ...
- 一起来学习XPATH,来看看除了正则表达式我们还能怎么抓取数据
参考学习的网站链接http://www.w3school.com.cn/xpath/xpath_intro.asp 首先理清楚一些常识 以此为例 <?xml version="1.0& ...
- 定制Asp.NET 5 MVC内建身份验证机制 - 基于自建SQL Server用户/角色数据表的表单身份验证
背景 在需要进行表单认证的Asp.NET 5 MVC项目被创建后,往往需要根据项目的实际需求做一系列的工作对MVC 5内建的身份验证机制(Asp.NET Identity)进行扩展和定制: Asp.N ...
- python数据可视化——matplotlib 用户手册入门:使用指南
参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introd ...
随机推荐
- 已经调试成功的Protues工程用了一段时间后不能用的问题
已经调试成功的Protues工程,经过一段时间后不能用的问题 主要现象:(1)可以打开,运行时没有效果:(2)可以打开,运行时闪退 解决办法:(1)删除原ARM芯片:(2)重新找到ARM芯片,重新加载 ...
- 删除字符串A中与字符串B相同的字符
/** * file name:DelDestChar.c * author : liaojx2016@126.com * date : 2024-05-06 * function : Delete ...
- Scala中集合中的View用法
设想以下这个计算 def eval(i: Int): Option[Int] = { println(s"invoke with $i") if (i % 2 == 0) { No ...
- 基于FPGA的电子琴设计(按键和蜂鸣器)----第一版
欢迎各位朋友关注"郝旭帅电子设计团队",本篇为各位朋友介绍基于FPGA的电子琴设计(按键和蜂鸣器)----第一版. 功能说明: 外部输入七个按键,分别对应音符的"1.2. ...
- pageoffice在线编辑word文件并禁止选中
一.整篇文档禁止选中 wordDoc.setDisableWindowSelection(true); //禁止word的选择文字功能 二.根据条件判断是否禁止选中 比如:选中内容超过一定字数,取消选 ...
- 编译mmdetection3d时,无root权限下为虚拟环境单独创建CUDA版本
在跑一些深度学习代码的时候,如果需要使用mmdetection3d框架,下载的pytorch的cudatoolkit最好需要和本机的cuda版本是一样的,即输入nvcc -V命令后显示的版本一样. 但 ...
- 几个公司wiki知识库调研和感悟
@ 目录 需求背景 具体实现 经验&吐槽 小结 需求背景 公司准备做一个知识库,我这边调研了几个项目,如下 第一个是我们耳熟能详的confluence,但是好想要收费,先搁置 第二个是mind ...
- c语言不可不说的一件事——进制之间的转化
进制之间的转换 二进制转换 二进制转换为十进制 10111010.101 转换方法: 个位数是乘以2的0次方 从小数点开始分割,(小数点前从右往左,小数点后从左往右)乘以2的对应次方(从0开始取),最 ...
- webpack js兼容处理
webpack在不需要引入任何loader可以对于js进行打包处理,但是它不会对于js兼容性进行任务的处理,而我们编写的项目是需要在不同的浏览器中运行的,此时就需要对于js的兼容性在打包过程中进行对应 ...
- vue局部注册
只能在当前注册它的vue实例中使用,通过某个 Vue 实例/组件的实例选项 components 注册仅在其作用域中可用的组件 var Child = { template: '<div> ...