点击下方卡片,关注「集智书童」公众号
导读
数据集规模的快速增长是推动深度学习研究进步的关键因素。然而,随着数据集规模的增加,由于存在低价值样本,包括过多的冗余样本、过于困难的样本以及贡献甚微的低效简单样本,训练过程变得越来越低效。
为了应对这一挑战,作者提出了针对大型数据集的Scale Effcient Training(SeTa)方法,这是一种动态样本剪枝方法,可以无损地减少训练时间。为了去除低价值样本,SeTa首先执行随机剪枝以消除冗余样本,然后根据损失来衡量其学习难度,对剩余样本进行聚类。在此基础上,采用滑动窗口策略,按照从易到难的课程逐步去除过于困难的和低效的简单样本集群。
作者在包含超过300万个样本的大规模合成数据集上进行了广泛的实验,包括ToCa、SS1M和
。SeTa将训练成本降低高达50%,同时保持或提高性能,即使在成本降低70%的情况下,性能下降也极小。此外,在多种规模的真实数据集上进行的实验,涵盖了不同的 Backbone (CNNs、Transformers和Mambas)和多种任务(指令调整、多视图立体、地理定位、组合图像检索、参考图像分割),展示了SeTa强大的有效性和普适性。
代码:https://github.com/mrazhou/SeTa
- 引言
大规模和高质量的数据集是深度学习研究的基础——数据 Stream ,智能增长。精心策划的数据集,如ImageNet [29] 和COCO [2],推动了日益复杂的模型的发展,进而推动了更大规模数据集的需求,以充分利用其学习能力。数据与模型规模之间的良性循环不断推动深度学习能力的边界 [4, 9, 11, 21, 42, 45]。除了手动标注的数据集外,通过程序渲染 [8, 13]、网络爬取 [7] 和大语言模型 (LLMs) [14, 34, 35, 46] 生成的合成数据已成为数据集创建的补充方法,提供了优越的可扩展性和定制灵活性 [24]。无论是手动策划还是合成生成的大规模数据集的可用性,都对有效模型训练至关重要。然而,训练过程的计算效率并没有跟上数据量的增长。这种差异提出了重大挑战,尤其是在资源受限的环境中,研究行人必须权衡大量数据集的益处与实际硬件限制。因此,开发能够充分利用大规模数据集同时保持实际计算要求的效率训练策略已成为关键研究焦点 [10, 27, 28, 36, 37]。
随着数据集规模的增加,额外冗余样本的边际效益显著下降,导致无效训练实例带来巨大的计算开销(如图1所示)。先前的研究已经探索了两种主要范式来应对这一挑战。静态核心集选择方法采用启发式标准[33, 39],例如样本距离[38]和梯度幅度[26],以预过滤冗余样本并构建一个紧凑且信息丰富的训练子集。相比之下,基于动态损失的剪枝策略[27, 28, 37]利用样本级的损失值作为质量指标,通过损失值排名或平均损失比较,在优化过程中自适应地维持一个减少的高价值训练集。与静态方法相比,高效实现的动态方法[27, 28]具有以下优点:由于避免了昂贵的预处理步骤,因此计算开销更低;由于它们不依赖于模型特定的特征,因此具有更好的跨架构适应性;由于它们能够持续适应模型的学习进度,因此在处理多样化的数据集时具有更高的灵活性。
然而,现有的基于损失的动态剪枝方法虽然能够有效地识别和排除学习良好的样本,但它们忽略了其他类别的低价值训练实例,例如冗余重复样本和过于困难的样本。这些样本尽管消耗了大量的计算资源,但对模型优化的贡献却微乎其微。为了解决这一局限性,作者提出了SeTa(规模高效训练),这是一个简单而有效的基于损失难度的动态样本剪枝框架。作者利用样本损失作为学习难度的计算高效 Agent ,它能够自然地适应模型在训练过程中的状态变化。SeTa分为两个阶段:首先,作者进行随机采样以消除冗余实例,然后基于剩余样本的损失进行
-means聚类,创建难度分层组。其次,作者采用滑动窗口策略,在整个训练过程中逐步从较易样本组转移到较难样本组,有效地管理训练样本的课程。滑动过程根据样本组数量和训练轮数迭代多次。为了确保稳健的收敛,作者在最后几个训练轮次中引入了退火机制,其中随机采样部分完整数据集以维持训练稳定性并减少潜在偏差。
SeTa是一个简单而高效的训练框架,只需对现有深度学习流程进行三行代码的修改即可无缝集成[27]。为了展示其有效性和通用性,作者在各种合成数据集上进行了广泛的实验,其中平衡数据量和训练效率的挑战尤为突出。具体来说,作者在三个大规模合成数据集上进行了评估:ToCa[46](通过LLM生成300万个样本)、SS1M[7](3M个网络爬取样本)和
[8, 13](1500万个渲染样本)。为了进一步验证SeTa的通用性,作者将评估扩展到各种架构(ResNet、ViT、Swin、Vim等)在标准ImageNet基准测试上,以及多个领域,包括自然语言处理(LLM的指令微调)、计算机视觉(多视图立体、地理定位)和多模态任务(图像描述、组合图像检索、引用图像分割)。作者的全面实证研究表明,SeTa在保持或提高模型性能的同时,始终能够显著减少训练时间,确立了其作为通用训练加速框架的有效性。
- 相关工作
现有的大多数动态方法通常采用子采样(选择数据集的一部分或样本的一部分)来降低训练成本并实现加速。根据子采样的粒度,方法可以分为两类:数据集 Level 和样本 Level 。
数据集级方法旨在识别和训练最有信息量的样本子集。早期研究提出了各种重要性度量方法,例如梯度范数和误差向量范数[26],或者遗忘事件[33],以选择核心训练集。虽然这些方法有效,但通常需要多次训练遍历来识别核心集,从而引入了大量的计算开销,有时甚至超过了原始的训练成本[27]。此外,它们的度量指标在不同数据集和模型架构之间往往表现出有限的泛化能力。
动态采样方法通过在训练过程中持续更新样本重要性度量来解决这些限制。这些方法通过概率性地排除信息量较小的样本,同时保持模型性能。Dyn-Unc [10] 和 UCB [28] 引入了基于不确定性的度量,而 InfoBatch [27] 则利用可轻松获得的损失值作为样本重要性的 Agent 。InfoBatch 使用损失值——深度学习中的一个通用指标——实现了高效剪枝,且开销最小,应用范围广泛。然而,其仅剪枝低于平均损失的样本的策略可能会保留冗余和具有挑战性的训练样本,尤其是在大规模数据集中。
与数据集级方法互补,样本级方法修改单个训练实例。例如,Tan等人[31]在早期训练阶段使用下采样图像,而EfficientTrain
[36, 37]引入了基于频率的图像裁剪和课程学习。尽管这些以图像为中心的方法有效,但它们的跨领域适用性有限,并且缺乏深度学习框架中期望的即插即用便利性。
- 方法
3.1. 前言
给定数据集
,其中
,
表示输入,
表示相应的标签。作者训练高效框架的目标是在训练周期中识别出一系列最小子集
,其中
,对于每个周期
,都有
。这些子集应确保模型达到与在完整数据集
上训练的模型相当的性能。
形式上,作者的目标是解决:
代表在
个epoch后从子集序列中学习的模型参数,
是特定任务的损失函数,
是一个小的正常数。在第
个epoch的动态剪枝比定义为
,整个训练过程中的最终剪枝比为
。节省的训练时间
表示数据剪枝和模型训练的单样本时间。当
时,
。
3.2 高效训练
作者提出了SeTa,一个通过动态样本选择实现高效训练的简单框架,如图2所示。其核心在于,SeTa使用样本级损失作为内在难度度量,它作为学习动态的非模型相关和无计算开销的 Agent 。
损失引导样本聚类。为了处理大规模数据集中的冗余,作者首先以比率
进行均匀下采样,得到子集
,其中
且
。然后,通过损失引导的
-means 优化将采样实例划分为
个簇:
表示聚类中心,
代表第
个聚类中的样本集,
表示在第
次训练步骤中样本
的损失。优化过程迭代如下:
在收敛后,作者得到按其质心值排序的难度分层聚类
。
滑动窗口选择。为了协调最优学习进程,作者引入了一种动态课程机制,该机制周期性地将模型暴露于难度逐渐增加的样本中。作者设定窗口大小为
,其中
控制每次迭代选择的簇的比例。窗口位置根据以下公式演变:
其中
代表当前迭代次数。此公式确保当
超过
时,窗口位置重置为 0,实现了一个循环课程,该课程反复从简单样本到困难样本进行进步。随后选定的样本子集构建如下:
其中
代表按难度排序聚类的排列。这种循环机制确保模型在训练过程中定期回顾简单样本,同时逐渐适应更具挑战性的样本,保持稳定的优化动态。
部分退火。为了减轻局部样本选择可能带来的优化偏差,作者在最终训练阶段引入了一种随机部分退火策略。与传统的全数据集退火[27]不同,作者通过应用具有固定采样比
的概率性样本选择和温度控制来保持效率。通过这种方式,作者可以有效地降低过拟合的风险,并提高模型的泛化能力。
正文:
部分退火。为了减轻局部样本选择可能带来的优化偏差,作者在最终训练阶段引入了一种随机部分退火策略。与传统的全数据集退火[27]不同,作者通过应用具有固定采样比
的概率性样本选择和温度控制来保持效率。通过这种方式,作者可以有效地降低过拟合的风险,并提高模型的泛化能力。
W其中
且
。这种简单而有效的方法在保持计算效率的同时,通过控制样本曝光实现了与完整退火相当的收敛速度。
- 实验
4.1 数据集与设置
数据集。作者在通过三种代表性大规模合成数据获取方法获得的合成数据集上进行了实验,包括:
-
- ToCa,由基于LLM生成的300万个文本样本组成;
-
- SS1M,包含通过网络爬取获得的300万个样本;
-
,包含使用程序引擎渲染的1500万个图像-文本对。
除了这些大规模合成数据集,作者还对ImageNet和COCO等大规模真实数据集以及CIRR、WHU-MVS、CIFAR100、RefCOCO和CVACT等小规模数据集进行了广泛的实验,涵盖了各种任务和不同的模型。关于数据集、任务和模型的详细信息,请参阅表1。设置。为确保实验结果的公平性和可重复性,作者使用不同任务、模型和数据集的相应默认最优设置。这也意味着SeTa可以无缝集成到现有的数据训练过程中,无需调整现有过程中的任何参数。为了展示SeTa的效率、无损和加速特性,作者对每个任务进行了三个不同设置的实验:L1 - 通过低剪枝率提高性能;L2 - 通过高剪枝率实现可比性能;L3 - 通过极高剪枝率略微降低性能。剪枝比提供了一个与硬件无关的计算效率指标,避免了系统变异性带来的运行时噪声。SeTa的轻量级数据选择(与训练时间相比可忽略,满足式2)确保
。因此,作者主要报告剪枝百分比(
)。
4.2 效率评估与比较
作者在大规模数据集上进行了全面实验(见表2、3、4、5),以评估SeTa的效率并将其与最先进的方法进行比较。
与SOTA方法的比较。如表2所示,SeTa在CIFAR10和CIFAR100数据集上,在所有剪枝率下均实现了对现有最优方法的持续改进。值得注意的是,在极端的70%剪枝率下,SeTa在CIFAR10上达到了95.0(仅比 Baseline 下降0.6),在CIFAR100上达到了77.7(下降1.6),而InfoBatch+未能达到这一剪枝率。在作者的与匹配训练轮数相同的复现实验中(^{\ddagger}),SeTa在CIFAR100的50%剪枝率下超过了InfoBatch+。该方法在70%剪枝率下,在CIFAR10上比其他方法如UCB高出+1.1个百分点。关键的是,SeTa在CIFAR10的30%剪枝率下达到了95.7(超过了 Baseline 的95.6),在CIFAR100上达到了79.4(超过了 Baseline 的79.3),这证明了SeTa在激进剪枝下保持性能的同时,既提高了稳定性又提高了准确性。这些结果验证了SeTa在无需调整训练轮数的情况下,在激进剪枝下维持性能的有效性。
优越性能-保留权衡(L1)。在低剪枝率以提升性能为设计目标的情况下,SeTa展现出卓越的能力,在实现大量数据减少的同时,保持甚至提升模型性能。在ToCa数据集上,SeTa在整体CIDEr上实现了1.0分的提升(从70.5提升到71.5),同时剪枝了31.7%的数据,而InfoBatch即使在更低的23.6%剪枝率下也表现出性能下降。这种优越的权衡在各个数据集上均得到一致体现,尤其在SS1M数据集上表现得尤为明显,SeTa的剪枝数据集在所有评估指标上均取得了显著提升(例如,在COCO和Flickr30k上
的增益分别为1.0和1.5)。这证明了SeTa在逐步去除低价值样本的同时,保持核心学习课程的能力得到了增强。
在旨在维持性能的适度至高剪枝机制中,SeTa展现出在保持模型性能方面的卓越鲁棒性。值得注意的是,在ToCa数据集上,SeTa在剪枝率为34.1%时,其性能与未剪枝模型相当,而其数据减少了41.8%,超过了InfoBatch在更低剪枝率下的结果。这种鲁棒性在识别任务中尤为明显,如在MJ+ST数据集上,即使数据减少了40.4%,SeTa仍保持了高精度(IC15上的85.4%)。这些结果表明,SeTa的滑动窗口策略成功管理样本难度,即使在高剪枝率下也能防止性能下降。
显著剪枝能力(L3)。在可以接受轻微性能下降的最高剪枝率下,SeTa能够在保持竞争性性能的同时实现显著更高的剪枝率。这在
上尤为明显,SeTa实现了71.0%的数据减少,同时保持了接近 Baseline 性能(在
上为95.8% VS 96.1%)。这显著超过了InfoBatch的最大可达到的剪枝率50.3%,表明SeTa有效地移除了冗余样本,同时保持了训练分布的基本多样性,从而在不影响性能的情况下实现高效训练。
这些全面的结果展示了SeTa相较于现有方法的显著优势,尤其是在实现更高剪枝率的同时更好地保持模型性能方面。在多种任务和数据集上的一致性优越性能表明,SeTa的有效性源于其识别并保留关键训练样本的基本能力。
4.3. 泛化评估
作者进一步评估了SeTa在多种视觉和语言任务、不同模型架构以及不同数据集规模下的泛化能力。实验结果(表6、7、8、9、10、11、12)表明,SeTa在以下三个方面展现出强大的泛化能力。
任务泛化。SeTa在多种视觉和语言任务中展现出显著的有效性。
(1) 对于密集预测任务,如多视图立体匹配(表6)和RefCOCO(表12):SeTa在这两项任务中都取得了优异的性能。在多视图立体匹配任务中,SeTa在剪枝40.4%数据的情况下,实现了更好的MAE(0.1184比0.1185),在
-区间指标上也有所提升(95.28%比95.01%),表明其更好地处理了深度不连续性。即使在更高的剪枝率(52.4%)下,性能下降也微乎其微(MAE仅增加0.0084)。这表明SeTa能够有效地识别出捕捉复杂几何关系的样本。同样,在RefCOCO任务中,SeTa通过33.6%的数据减少展示了改进的性能(
比86.21),表明其能够保留关键的语义对齐信息。
(2) 对于检索任务:在跨视图地理定位(表7)中,SeTa在所有指标上保持性能(
vs 86.21)的同时,数据减少了33.6%。在组合图像检索(表10)中,SeTa即使在进行了大量60.5%的剪枝后,也取得了更好的结果(
vs 74.7)。这两个任务中的一致性改进表明SeTa保留了关键的语义对齐信息。值得注意的是,即使在更高的召回率阈值(
)下,性能也保持稳定,这表明了鲁棒的特征学习。
(3) 对于生成任务:在指令微调(表8)方面,SeTa提升了整体性能(平均:27.3 vs 26.3),同时减少了25.9%的数据。在人类评估(13.4 vs 8.5)方面的特别显著提升表明,代码相关示例得到了更好的保留。在COCO标题生成任务中,SeTa实现了显著的提升(CIDEr:92.8 vs 91.5),同时数据减少了30.7%。这种提升涵盖了领域内和领域外(NoCaps)的情况,表明了更好的泛化能力。
SeTa在需要细粒度理解(密集预测、检索)的任务中的有效性尤为显著。该方法即使在大量数据减少(40-60%)的情况下也能保持或提高性能。这项全面评估展示了SeTa的任务无关性及其识别关键训练样本的能力,无论底层任务的复杂度或数据模式如何。
架构泛化。表9展示了SeTa在多种架构上的强大泛化能力:
(1) 对于基于CNN的模型,SeTa在多种架构中展现出卓越的效率:ResNet-18在保持69.5%准确率的同时实现了36.1%的数据减少。更深的ResNet-50在保持更高的78.6%准确率的同时实现了30.0%的数据剪枝。值得注意的是,针对资源受限环境专门设计的效率型架构,如MobileNetV3和EfficientNet,也能从SeTa中受益:MobileNetV3在保持52.2%准确率的同时实现了26.2%的数据减少,而EfficientNet在保持76.1%准确率的同时实现了30.0%的剪枝。这表明SeTa可以进一步优化已高效的架构,使它们更适合资源受限的场景。
(2) 对于Transformer架构:SeTa在不同变体中均展现出持续的有效性:Swin在保持80.0%准确率的同时,实现了46.4%的数据减少。ViT通过24.6%的剪枝保持了73.3%的准确率,显示出更为保守但仍然显著的数据效率。在更高剪枝率下保持性能的保留尤为显著:Swin即使在55.5%的数据减少下,仍能保持79.3%的准确率。
(3) 对于Vision Mamba架构:Vim在剪枝30.0%数据的情况下,保持了75.7%的准确率。该模型表现出与ResNet-50和EfficientNet相似的剪枝容忍度(均为30.0%),这表明尽管这些网络在架构上存在差异,但它们具有可比的数据效率特性。即使在更高的剪枝率(44.8%)下,Vim也能保持相对较强的性能(74.9%),这展示了其对数据减少的鲁棒性。考虑到Mamba是近期出现的,且与CNN和Transformer都有不同的架构,这种韧性尤为引人注目。
SeTa展现出跨架构一致性,确保所有架构都保留了其 Baseline 性能。剪枝率(26.2-46.4%)在架构家族中保持一致,以效率为导向的模型表现出略微保守的剪枝率。这种架构无关的行为表明SeTa捕捉的是基本数据重要性,而不是模型特定的特征。
数据集规模泛化。SeTa在规模差异极大的数据集上展现出强大的泛化能力:
-
- 对于大规模数据集(
样本):在ImageNet(128万样本)上,SeTa在实现不同架构(30.0–46.4%)显著数据减少的同时,保持了有竞争力的性能。即使在更高的剪枝率(>50%)下,性能下降也是渐进的而不是灾难性的,准确率仅下降1-2个百分点。这表明SeTa在大型设置中有效地识别了关键训练样本。
-
- 对于中等规模的数据集(10万-100万样本):在COCO数据集(556K样本)上,SeTa不仅保持了性能,还通过30.7%的数据剪枝提升了性能(CIDEr:92.8 vs 91.5)。这种提升涵盖了领域内和领域外评估,NoCaps Overall的得分也有所提高(65.4 vs 65.2)。这表明SeTa能够识别并保留对模型泛化有贡献的信息样本。
-
- 对于小规模数据集(<100K样本):在CIRR(22K样本)上,SeTa即便在数据大量减少(60.5%)的情况下,也实现了优异的结果(R@5: 74.8 VS 74.7)。值得注意的是,性能在不同评估指标(R@1、R@5、R@10)上保持稳定,这表明SeTa在数据集规模较小的情况下,仍能有效保留数据集的多样性。考虑到较小的数据集通常提供的冗余信息较少,这一点尤为令人印象深刻。
SeTa实现了与数据规模无关的数据效率,在保持30%至50%的数据压缩的同时,在各个数据规模上均保持了最先进的性能,展示了强大的泛化能力和实际部署的实用性。
总之,SeTa是一种通用的数据选择方法,可以有效地应用于各种任务、模型和数据集,包括合成数据和真实数据集,而无需针对特定任务进行调整。
4.4 消融研究
组件。作者通过消融实验来分析SeTa中各组件的有效性,如表13所示。
-
- 动态采样与静态采样:作者首先将动态采样(每个epoch从完整数据集中随机采样)和静态采样(在训练前一次性采样)作为 Baseline 进行比较。SeTa在所有指标上均优于这两种方法,特别是在NoCaps的域外(71.4 vs 69.8/69.4)和总体(71.5 vs 69.9/69.4)性能上取得了显著的提升。这证明了SeTa的滑动窗口策略相较于简单随机采样的有效性。
-
- 成分分析:作者消除了SeTa的三个关键组件:从难到易(h2e)的排序相较于SeTa的从易到难方法(整体性能为71.5)实现了更低的性能(整体性能为69.6),这表明逐步增加难度对模型学习是有益的。连续调度,它不会直接将
设置为0,表现出较强的性能(整体性能为70.7),但仍然不及完整的SeTa框架,这表明在整个训练过程中保持一致的数据模式是很重要的。退火策略,类似于InfoBatch,在最后几个epoch使用全部数据进行训练以消除偏差,表现出良好的性能(整体性能为70.3),但并未达到SeTa部分退火的水平,同时也减少了数据量。 3. 3. 效率-性能权衡:值得注意的是,SeTa在仅使用68.3%数据的情况下,实现了比在完整数据集上训练(整体性能为70.5)更优的性能(整体性能为71.5)。这表明SeTa的数据选择策略不仅降低了计算成本,还有助于过滤掉可能干扰模型学习的噪声或信息量不足的样本。
这些结果表明,SeTa的成功源于其组件的协同组合,每个组件都为其在数据高效训练中的有效性做出了贡献。
超参数。作者进行了广泛的实验,以分析SeTa中关键超参数的敏感性和影响,结果如图3所示。
-
- 窗口规模:如图3a所示,作者观察到几个关键趋势:最佳窗口大小在数据集大小的0.4-0.6之间呈现出最佳状态,在足够的上下文和计算效率之间取得平衡。当窗口非常小(<0.2)时,由于学习上下文不足,性能会急剧下降。较大的窗口(>0.7)虽然增加了计算成本,但收益递减。
-
- 剪枝策略比较:图3b揭示了不同剪枝方法的重要见解:与SOTA方法InfoBatch相比,SeTa在所有剪枝比率下都保持了更高的性能。随着剪枝比率的增加,SeTa与InfoBatch之间的性能差距扩大,展示了其优越的鲁棒性。SeTa性能曲线的逐渐斜率表明,在激进剪枝下仍能实现优雅的退化。
-
- 群组编号:图3c显示SeTa对群组编号的选择相对鲁棒:性能在广泛的群组编号范围(5-15)内保持稳定,仅有轻微波动。尽管存在轻微的下降,但对整体性能的影响微乎其微。
这些发现为超参数选择提供了实际指导:窗口尺度为0.4-0.6提供了最佳的性能-效率权衡。使用至多0.3的下采样比率可以实现最小性能下降。组数可以在5-15之间灵活选择,而不会对性能产生显著影响。
验证。作者进一步通过分析SeTa在CIFAR100数据集上的四个关键指标——训练损失、训练准确率、验证准确率和数据节省率来验证其有效性,如图4所示。
-
- 振荡学习模式:SeTa在完整数据集训练和InfoBatch的性能水平之间表现出典型的周期性振荡。这些由滑动窗口选择策略驱动的可控波动,在防止模型收敛到局部最优的同时,保持了更高的数据效率(由持续较高的数据节省率体现)。
-
- 高效学习动态:尽管使用的数据量显著减少(由更高的数据节省曲线所示),SeTa在完整数据集训练下仍保持了有竞争力的性能。训练和验证准确率中的周期性波动表明,滑动窗口机制有效地刷新了学习信号,使得模型能够在保持整体性能稳定的同时,探索数据分布的不同方面。
-
- 鲁棒收敛:验证准确率曲线表明,SeTa在最终性能上与完整数据集训练相当,同时持续优于InfoBatch。这表明由滑动窗口选择引起的振荡学习模式不仅提高了训练效率,还导致了鲁棒的收敛。
这些观察结果验证了SeTa卓越性能源于其通过滑动窗口选择利用受控性能振荡的能力,在数据效率和学习稳定性之间取得平衡。
- 结论
作者提出了SeTa,这是一个简单而有效的动态剪枝框架,用于高效的大规模训练。通过广泛的实验,作者证明了SeTa能够在保持或提升模型性能的同时,将训练成本降低30%至50%。其滑动窗口策略能够自适应地关注信息样本,过滤掉冗余和低效的样本。SeTa对模型无特定要求,并且可以无缝集成到现有的训练流程中,无需进行架构修改。
在多个真实世界数据集上的实验进一步验证了其在不同架构和任务上的强大泛化能力,为深度学习中日益增长的计算挑战提供了一个实用的解决方案。
参考
[1]. Scale Efficient Training for Large Datasets
扫码加入👉「集智书童」交流群
(备注:方向+学校/公司+昵称)