據(jù)集并非越大越好:小數(shù)據(jù)復(fù)用如何實(shí)現(xiàn)更快更強(qiáng)的模型訓(xùn)練)
訓(xùn)練一個(gè)模型時(shí)數(shù)據(jù)集是不是越大越好這是很多開發(fā)者都會(huì)默認(rèn)接受的假設(shè)。為了提升目標(biāo)檢測(cè)或分類任務(wù)的精度團(tuán)隊(duì)通常會(huì)不斷擴(kuò)充數(shù)據(jù)、增加標(biāo)注、增強(qiáng)樣本認(rèn)為數(shù)據(jù)規(guī)模與模型能力成正比。但哈佛 FAI 系列中劉冰彬分享的“更少更快更強(qiáng)重復(fù)使用較小的數(shù)據(jù)集如何加速學(xué)習(xí)”提出了一個(gè)相反的研究視角如果數(shù)據(jù)集不是往大做而是有選擇地做小并且讓模型重復(fù)使用這個(gè)小數(shù)據(jù)集訓(xùn)練反而可能更快最終性能也可能更強(qiáng)。這篇文章會(huì)圍繞這個(gè)主題展開先解釋“更少、更快、更強(qiáng)”的內(nèi)在邏輯再給出一套可以復(fù)現(xiàn)的最小實(shí)驗(yàn)框架說明如何設(shè)計(jì)數(shù)據(jù)集、訓(xùn)練順序和評(píng)估指標(biāo)最后整理常見失敗模式和工程落地建議。內(nèi)容適合正在用深度學(xué)習(xí)做分類、檢測(cè)或其他視覺任務(wù)又對(duì)訓(xùn)練效率和數(shù)據(jù)集成本有顧慮的讀者。1. 先理解“更少、更快、更強(qiáng)”背后的學(xué)習(xí)邏輯1.1 小數(shù)據(jù)集不是“數(shù)據(jù)不夠”而是“信息更集中”“更少”并不是指數(shù)據(jù)越少越好而是說訓(xùn)練數(shù)據(jù)中存在大量低信息樣本。一個(gè)百萬級(jí)別的數(shù)據(jù)集如果大部分圖片來自同一場(chǎng)景、同一光照、同一目標(biāo)角度對(duì)模型的信息增益就非常有限。真正影響學(xué)習(xí)效率的不是樣本數(shù)量本身而是每個(gè)樣本帶來的邊際信息量。小數(shù)據(jù)集如果經(jīng)過設(shè)計(jì)能夠覆蓋主要類別、難度梯度、背景變化和邊界情況那么它雖然規(guī)模小但信息密度高。模型在這樣的小數(shù)據(jù)集上訓(xùn)練單位樣本的收益會(huì)更高。工程上常見的做法是從已有數(shù)據(jù)集中隨機(jī)抽取子集這種“隨機(jī)子集”往往保留了原始分布但也會(huì)帶回大量冗余樣本。更好的做法是按類別均衡、按難度分層、按場(chǎng)景去重讓子集在信息層面更加完整。需要區(qū)分兩種小數(shù)據(jù)集類型特點(diǎn)適合用途小而全類別均衡、難度分層、場(chǎng)景多樣快速驗(yàn)證、遷移熱身、訓(xùn)練流程試錯(cuò)小而不全只覆蓋其中幾類或單一場(chǎng)景快速驗(yàn)證 pipeline不適合作為唯一訓(xùn)練來源“更少”的真正含義是削減低信息樣本保留高信息樣本而不是簡(jiǎn)單把數(shù)據(jù)集縮小。1.2 任務(wù)可遷移性為什么學(xué)過一個(gè)小任務(wù)能幫助目標(biāo)任務(wù)模型在不同任務(wù)之間共享大量底層特征。圖像分類模型學(xué)習(xí)到的邊緣、紋理、顏色分布、目標(biāo)形狀等基礎(chǔ)表征可以復(fù)用到其他視覺任務(wù)中。這種共享性質(zhì)是“重復(fù)使用小數(shù)據(jù)集”能夠起作用的前提。當(dāng)模型先在一個(gè)經(jīng)過精心設(shè)計(jì)的小數(shù)據(jù)集上訓(xùn)練后它已經(jīng)獲得了一組可遷移的特征表示。進(jìn)入目標(biāo)任務(wù)時(shí)模型不再需要從隨機(jī)初始化開始學(xué)習(xí)邊緣和形狀只需要在已有特征之上調(diào)整高層語義。因此后續(xù)訓(xùn)練所需的梯度更新次數(shù)更少收斂速度更快。這里有一個(gè)容易誤解的地方起作用的不一定是小數(shù)據(jù)集本身而是小數(shù)據(jù)集對(duì)應(yīng)的“任務(wù)”與目標(biāo)任務(wù)的共性。如果小數(shù)據(jù)集選的是一組自然圖片目標(biāo)任務(wù)是人臉識(shí)別那么底層特征確實(shí)可以遷移但高層的語義差異較大。如果小數(shù)據(jù)集來自完全不同的領(lǐng)域比如醫(yī)學(xué)影像紋理目標(biāo)任務(wù)檢測(cè)汽車遷移收益可能非常有限。所以設(shè)計(jì)復(fù)用策略時(shí)第一步不是寫代碼而是評(píng)估小數(shù)據(jù)任務(wù)和目標(biāo)任務(wù)的分布距離。1.3 課程學(xué)習(xí)和階段切換如何產(chǎn)生“加速”“重復(fù)使用”還體現(xiàn)在訓(xùn)練順序上。模型可以先在高信息密度的小數(shù)據(jù)集上完成熱身再進(jìn)入完整數(shù)據(jù)集繼續(xù)訓(xùn)練。這個(gè)過程類似課程學(xué)習(xí)中的由易到難先用少量高質(zhì)量樣本快速建立穩(wěn)定的特征再面對(duì)更復(fù)雜、更多樣的完整數(shù)據(jù)。課程學(xué)習(xí)之所以能加速是因?yàn)樗淖兞四P偷膮?shù)搜索路徑。隨機(jī)初始化狀態(tài)下模型在完整數(shù)據(jù)集上的前幾個(gè) epoch 通常只是在做基礎(chǔ)特征探索探索效率很低。如果先用一個(gè)小數(shù)據(jù)集讓模型快速進(jìn)入一個(gè)較優(yōu)區(qū)域再切換到完整數(shù)據(jù)集后續(xù)優(yōu)化就從更靠近目標(biāo)的位置開始。這也是為什么“先在小數(shù)據(jù)集訓(xùn)練再在大數(shù)據(jù)集微調(diào)”的組合會(huì)比直接在大數(shù)據(jù)集上從頭訓(xùn)練更快。“重復(fù)使用”的另一種形式是讓同一個(gè)小子集在不同階段出現(xiàn)訓(xùn)練初期作為主訓(xùn)練集訓(xùn)練中期作為復(fù)習(xí)集最終階段用于校準(zhǔn)邊界樣本。它不要求增加 GPU 算力只需要改變數(shù)據(jù)調(diào)度方式。核心思想是把小數(shù)據(jù)集當(dāng)作訓(xùn)練流程中的穩(wěn)定錨點(diǎn)而不是把它和大數(shù)據(jù)集簡(jiǎn)單拼接后重復(fù)迭代。2. 用最小實(shí)驗(yàn)驗(yàn)證“小數(shù)據(jù)復(fù)用”是否真的有效2.1 實(shí)驗(yàn)設(shè)計(jì)三個(gè)對(duì)比組要驗(yàn)證“更少、更快、更強(qiáng)”需要做一個(gè)可對(duì)照的實(shí)驗(yàn)而不是直接在生產(chǎn)任務(wù)中改數(shù)據(jù)策略。這里給出一個(gè)最小實(shí)驗(yàn)框架使用公開圖像分類數(shù)據(jù)集 CIFAR-10 即可完成。三組實(shí)驗(yàn)的結(jié)構(gòu)如下組別訓(xùn)練數(shù)據(jù)訓(xùn)練順序要回答的問題A 組完整數(shù)據(jù)集直接在完整數(shù)據(jù)集上訓(xùn)練基線效果B 組精心篩出的小數(shù)據(jù)集只在小數(shù)據(jù)集上訓(xùn)練小數(shù)據(jù)集本身的能力上限C 組小數(shù)據(jù)集 完整數(shù)據(jù)集先小數(shù)據(jù)集熱身再完整數(shù)據(jù)繼續(xù)訓(xùn)練復(fù)用策略是否帶來加速和性能提升為了保證公平三組應(yīng)該使用相同的模型結(jié)構(gòu)、優(yōu)化器、batch size、學(xué)習(xí)率、總 epoch 數(shù)。唯一不同的是數(shù)據(jù)訪問順序和比例。這樣得到的差異才能真正歸因于數(shù)據(jù)策略而不是因?yàn)榫W(wǎng)絡(luò)或優(yōu)化器配置不同。需要說明的是這里不要求小數(shù)據(jù)集必須來自完整數(shù)據(jù)集的子集它可以是一個(gè)獨(dú)立的公開小數(shù)據(jù)集。用 CIFAR-10 的好處是方便復(fù)現(xiàn)目錄結(jié)構(gòu)和數(shù)據(jù)格式都很簡(jiǎn)單。2.2 數(shù)據(jù)準(zhǔn)備從完整數(shù)據(jù)集中篩出信息密集子集下面的代碼從 CIFAR-10 訓(xùn)練集中按類別均衡抽取一個(gè)小子集。抽樣時(shí)固定隨機(jī)種子保證每次運(yùn)行結(jié)果一致。生產(chǎn)環(huán)境里這一步可以替換為基于難度、多樣性、場(chǎng)景去重后的篩選邏輯。import numpy as np from torchvision import datasets, transforms from torch.utils.data import Subset transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)) ]) full_set datasets.CIFAR10(root./data, trainTrue, downloadTrue, transformtransform) labels np.array(full_set.targets) class_ids np.unique(labels) rng np.random.default_rng(42) per_class 500 # 每類取 500 張共 5000 張 selected_index [] for cid in class_ids: idx np.where(labels cid)[0] selected_index.extend(rng.choice(idx, sizeper_class, replaceFalse).tolist()) small_set Subset(full_set, selected_index) print(fsmall set size: {len(small_set)})這里的關(guān)鍵點(diǎn)是樣本篩選要覆蓋每個(gè)類別。如果某個(gè)類別在子集中缺失模型在該類別上的識(shí)別能力會(huì)直接歸零遷移到目標(biāo)任務(wù)后也很難補(bǔ)償。2.3 核心訓(xùn)練流程兩階段訓(xùn)練框架下面代碼演示 C 組的訓(xùn)練過程先在小數(shù)據(jù)集上訓(xùn)練 10 個(gè) epoch再在完整數(shù)據(jù)集上訓(xùn)練 40 個(gè) epoch。前一個(gè)階段的作用是快速建立基礎(chǔ)特征后一個(gè)階段用于在完整分布上完成精確調(diào)整。import torch import torch.nn as nn from torch.utils.data import DataLoader def train_one_stage(model, dataset, epochs, lr0.01, batch_size64): loader DataLoader(dataset, batch_sizebatch_size, shuffleTrue) criterion nn.CrossEntropyLoss() optimizer torch.optim.SGD(model.parameters(), lrlr, momentum0.9) model.train() for epoch in range(epochs): total_loss 0.0 for images, labels in loader: optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() total_loss loss.item() * images.size(0) avg_loss total_loss / len(dataset) print(fepoch {epoch 1}, loss: {avg_loss:.4f}) # 模型需要提前定義例如一個(gè)簡(jiǎn)化的 CNN # model SimpleCNN() # C 組先小數(shù)據(jù)集熱身 train_one_stage(model, small_set, epochs10, lr0.01) # C 組完整數(shù)據(jù)集繼續(xù)訓(xùn)練這里降低學(xué)習(xí)率 train_one_stage(model, full_set, epochs40, lr0.001)第二階段降低學(xué)習(xí)率是避免大梯度更新破壞第一階段學(xué)習(xí)到的穩(wěn)定特征。實(shí)際項(xiàng)目中學(xué)習(xí)率要結(jié)合模型規(guī)模和 batch size 調(diào)整不能直接套用這個(gè)數(shù)值。2.4 獨(dú)立驗(yàn)證驗(yàn)證集必須在整個(gè)流程之外評(píng)估模型時(shí)需要使用完全獨(dú)立的驗(yàn)證集。這個(gè)驗(yàn)證集不能用于篩選小數(shù)據(jù)集也不能在多次調(diào)參之后反復(fù)使用。下面的代碼給出一個(gè)標(biāo)準(zhǔn)評(píng)估流程from torch.utils.data import DataLoader def evaluate(model, dataset, batch_size128): loader DataLoader(dataset, batch_sizebatch_size, shuffleFalse) model.eval() correct 0 total 0 with torch.no_grad(): for images, labels in loader: outputs model(images) preds outputs.argmax(dim1) correct (preds labels).sum().item() total labels.size(0) return correct / total # val_dataset 來自 CIFAR-10 test set accuracy evaluate(model, val_dataset) print(faccuracy: {accuracy:.4f})如果直接把小子集數(shù)據(jù)既用于訓(xùn)練又用于評(píng)估結(jié)果是無效的。評(píng)估指標(biāo)只能說明模型記住了這批數(shù)據(jù)不能說明它學(xué)到了可遷移的能力。3. 實(shí)際操作中如何設(shè)計(jì)小數(shù)據(jù)集復(fù)用策略3.1 小數(shù)據(jù)集的選取標(biāo)準(zhǔn)類別、難度、多樣性和代表性隨機(jī)抽樣雖然簡(jiǎn)單但不是最佳方案。真正適合復(fù)用的小數(shù)據(jù)集應(yīng)該具備四個(gè)特征選取維度具體含義檢查方式類別覆蓋包含目標(biāo)任務(wù)的全部或絕大多數(shù)類別統(tǒng)計(jì)類別樣本數(shù)量檢查是否有空類難度梯度同時(shí)包含簡(jiǎn)單樣本、普通樣本和困難樣本用已訓(xùn)練模型打分按 loss 分層場(chǎng)景多樣性覆蓋不同背景、光照、角度、目標(biāo)尺寸按元信息或聚類結(jié)果抽樣代表性與去重移除近似重復(fù)樣本保留代表樣本計(jì)算特征向量按相似度去重難度維度容易被忽略。如果小數(shù)據(jù)集里全是簡(jiǎn)單樣本模型很快收斂但泛化能力差。如果全是困難樣本模型可能在熱身階段就過擬合。合理做法是按難度分層采樣先訓(xùn)練普通樣本再逐步引入困難樣本這與課程學(xué)習(xí)的思路一致。3.2 訓(xùn)練順序和階段切換不是所有任務(wù)都適合先小后大“先小后大”是一種有效策略但不是唯一策略。當(dāng)目標(biāo)任務(wù)本身數(shù)據(jù)很少時(shí)額外引入小數(shù)據(jù)集不一定有幫助因?yàn)槟P腿萘靠赡茉谛?shù)據(jù)階段就被限制住。當(dāng)小數(shù)據(jù)集與目標(biāo)任務(wù)分布差異過大時(shí)先訓(xùn)練小數(shù)據(jù)反而會(huì)把模型帶到偏離目標(biāo)的位置。場(chǎng)景推薦策略原因目標(biāo)數(shù)據(jù)量大訓(xùn)練成本高先小數(shù)據(jù)熱身再完整訓(xùn)練減少前期無效探索降低總訓(xùn)練時(shí)間目標(biāo)數(shù)據(jù)量小直接訓(xùn)練或使用數(shù)據(jù)增強(qiáng)額外的小數(shù)據(jù)集可能主導(dǎo)特征造成偏差小數(shù)據(jù)與目標(biāo)分布接近先小后大第二階段用小學(xué)習(xí)率遷移收益高風(fēng)險(xiǎn)低小數(shù)據(jù)與目標(biāo)分布差異大只在目標(biāo)數(shù)據(jù)上訓(xùn)練遷移收益低甚至出現(xiàn)負(fù)遷移階段切換時(shí)第一階段的訓(xùn)練時(shí)長(zhǎng)不宜過長(zhǎng)。如果小數(shù)據(jù)集訓(xùn)練過久模型會(huì)對(duì)小數(shù)據(jù)過度擬合切換到完整數(shù)據(jù)集后前幾個(gè) epoch 會(huì)出現(xiàn)明顯的 loss 回彈。通常熱身階段的 epoch 數(shù)控制在總 epoch 的 10% 到 30%具體靠訓(xùn)練曲線觀察。3.3 評(píng)估指標(biāo)和調(diào)參邊界防止小數(shù)據(jù)集上的過擬合被誤判為收益在小數(shù)據(jù)集上訓(xùn)練時(shí)過擬合風(fēng)險(xiǎn)比大數(shù)據(jù)集高得多。如果反復(fù)用同一驗(yàn)證集調(diào)參驗(yàn)證集的信息會(huì)被間接泄漏到模型選擇過程中最終結(jié)果虛高。要避免這個(gè)問題需要做到幾點(diǎn)使用固定隨機(jī)種子讓訓(xùn)練流程可復(fù)現(xiàn)。每次實(shí)驗(yàn)重復(fù)至少 3 到 5 次記錄均值和標(biāo)準(zhǔn)差。驗(yàn)證集只在最終評(píng)估階段使用不參與調(diào)參。如果可能劃分一個(gè)專門的模型選擇集和一個(gè)最終測(cè)試集。報(bào)告結(jié)果時(shí)不應(yīng)只寫最終準(zhǔn)確率還要寫訓(xùn)練成本。訓(xùn)練成本可以表示為訓(xùn)練的 epoch 數(shù)、訪問樣本總數(shù)或 GPU 耗時(shí)。只有同時(shí)比較準(zhǔn)確率和訓(xùn)練成本才能判斷“復(fù)用小數(shù)據(jù)集”是否真的帶來了“更快”。4. 實(shí)驗(yàn)曲線和指標(biāo)怎么看才能得出可靠結(jié)論4.1 訓(xùn)練曲線關(guān)注 loss 下降速度與穩(wěn)定性訓(xùn)練過程中要同時(shí)記錄訓(xùn)練 loss 和驗(yàn)證指標(biāo)。觀察點(diǎn)有兩個(gè)一是曲線下降速度二是曲線是否穩(wěn)定。如果 C 組在第一階段小數(shù)據(jù)集上 loss 快速下降第二階段切換后 loss 起點(diǎn)明顯低于 A 組在相同 epoch 的位置說明小數(shù)據(jù)熱身有效。如果 C 組第二階段剛開始時(shí) loss 出現(xiàn)劇烈回彈說明第一階段學(xué)習(xí)率太高或者小數(shù)據(jù)分布與完整數(shù)據(jù)差異偏大需要調(diào)整熱身策略。如果 B 組在小數(shù)據(jù)集上很快收斂但最終準(zhǔn)確率明顯低于 A 組說明小數(shù)據(jù)集本身信息量有限不能替代完整數(shù)據(jù)訓(xùn)練。這種情況下“更少”只能用于加速不能用于替代。4.2 最終指標(biāo)準(zhǔn)確率和方差同等重要單一一次實(shí)驗(yàn)的準(zhǔn)確率不能說明問題因?yàn)樯疃葘W(xué)習(xí)中隨機(jī)性很大。下面是一張示意結(jié)果表實(shí)際數(shù)值取決于數(shù)據(jù)、模型和超參這里只展示判斷邏輯組別訓(xùn)練配置最終準(zhǔn)確率示意訓(xùn)練時(shí)間示意A 組完整數(shù)據(jù)50 epoch0.864 ± 0.003基準(zhǔn)時(shí)間B 組小數(shù)據(jù)50 epoch0.761 ± 0.008約 A 組的 20%C 組小數(shù)據(jù) 10 epoch 完整數(shù)據(jù) 40 epoch0.870 ± 0.004約 A 組的 90%如果 C 組在訓(xùn)練時(shí)間少于 A 組的情況下得到相同或更高的準(zhǔn)確率說明復(fù)用策略有效。如果 C 組準(zhǔn)確率與 A 組持平但訓(xùn)練時(shí)間更短也值得采用。如果準(zhǔn)確率下降超過 1% 到 2%那節(jié)省的時(shí)間可能不足以補(bǔ)償性能損失需要重新設(shè)計(jì)小數(shù)據(jù)集。4.3 常見誤判把“過擬合”誤當(dāng)成“加速”只在小數(shù)據(jù)集訓(xùn)練的話訓(xùn)練集準(zhǔn)確率通常很快就能達(dá)到接近 100%驗(yàn)證集準(zhǔn)確率則可能在某個(gè)點(diǎn)后開始下降。這時(shí)模型處于過擬合狀態(tài)不能認(rèn)為訓(xùn)練已經(jīng)完成。復(fù)用策略的收益體現(xiàn)在切換后完整數(shù)據(jù)集上的表現(xiàn)而不是小數(shù)據(jù)集上的表現(xiàn)。如果在報(bào)告中說“小數(shù)據(jù)集在 5 個(gè) epoch 內(nèi)達(dá)到 99% 準(zhǔn)確率”卻沒有補(bǔ)充驗(yàn)證集和第二階段結(jié)果這是一個(gè)容易被誤導(dǎo)的結(jié)論。正確做法是只把第一階段當(dāng)成整個(gè)訓(xùn)練流程的前半段最終評(píng)估以第二階段結(jié)束后的驗(yàn)證集結(jié)果為準(zhǔn)。5. 工程中常見的失敗模式與排查路徑5.1 復(fù)用小數(shù)據(jù)集后反而更慢現(xiàn)象C 組訓(xùn)練時(shí)間比 A 組更長(zhǎng)或者準(zhǔn)確率沒有明顯提升??赡茉虬ㄐ?shù)據(jù)集熱身階段設(shè)置過長(zhǎng)第二階段學(xué)習(xí)率過高導(dǎo)致重新探索小數(shù)據(jù)集與目標(biāo)任務(wù)分布差異過大遷移收益為負(fù)小數(shù)據(jù)集類別覆蓋不完整模型學(xué)到錯(cuò)誤偏好。排查方式先看第二階段初期的 loss。如果 loss 明顯回升先降低第二階段學(xué)習(xí)率。如果回升幅度很大減少第一階段的 epoch。如果小數(shù)據(jù)篩選存在問題計(jì)算小數(shù)據(jù)集與完整數(shù)據(jù)集在特征空間上的距離例如使用預(yù)訓(xùn)練模型抽取特征后計(jì)算分布差異。問題現(xiàn)象常見原因檢查方式處理建議第二階段 loss 回彈學(xué)習(xí)率過高或小數(shù)據(jù)過擬合打印每個(gè) epoch 的 loss降低第二階段學(xué)習(xí)率總訓(xùn)練時(shí)間變長(zhǎng)熱身 epoch 過長(zhǎng)對(duì)比相同 epoch 的訓(xùn)練耗時(shí)將熱身 epoch 降到總 epoch 的 10% 到 20%準(zhǔn)確率不升反降小數(shù)據(jù)分布偏差計(jì)算特征分布距離重新篩選小數(shù)據(jù)集或放棄該策略5.2 小數(shù)據(jù)集和目標(biāo)任務(wù)分布差異太大如果小數(shù)據(jù)集來自公開數(shù)據(jù)集目標(biāo)任務(wù)是自己標(biāo)注的業(yè)務(wù)數(shù)據(jù)兩個(gè)分布之間可能存在較大差異。例如用 CIFAR-10 熱身卻要訓(xùn)練一個(gè)電力設(shè)備缺陷檢測(cè)模型低層特征雖然有幫助但高層語義完全不匹配。面對(duì)這種情況需要做分布檢查。一個(gè)簡(jiǎn)單方法是用預(yù)訓(xùn)練模型分別抽取小數(shù)據(jù)集和目標(biāo)數(shù)據(jù)的特征計(jì)算兩個(gè)集合的均值距離或協(xié)方差差異。如果距離過大說明遷移收益有限。處理方式有兩種一是選擇與目標(biāo)任務(wù)更接近的小數(shù)據(jù)集例如用同領(lǐng)域的公開數(shù)據(jù)二是把熱身階段縮短只讓模型學(xué)習(xí)基礎(chǔ)圖像特征不期望它學(xué)習(xí)高層語義。5.3 指標(biāo)波動(dòng)大結(jié)論不穩(wěn)定現(xiàn)象多次運(yùn)行 C 組實(shí)驗(yàn)準(zhǔn)確率有時(shí)高有時(shí)低結(jié)論無法確定。這類問題通常來自隨機(jī)性。數(shù)據(jù)采樣、模型初始化、數(shù)據(jù)增強(qiáng)順序都會(huì)影響結(jié)果。解決方式是固定隨機(jī)種子并增加重復(fù)次數(shù)。報(bào)告時(shí)不能只寫一次結(jié)果的最大值要寫多次運(yùn)行的均值和標(biāo)準(zhǔn)差。推薦設(shè)置python train.py --seed 42 python train.py --seed 43 python train.py --seed 44如果三個(gè)種子的準(zhǔn)確率范圍在 0.5% 以內(nèi)結(jié)論相對(duì)可靠。如果波動(dòng)超過 2%應(yīng)先排查驗(yàn)證集劃分是否合理、batch size 是否過小、學(xué)習(xí)率是否偏高再判斷策略本身是否有效。6. 從研究實(shí)驗(yàn)到生產(chǎn)實(shí)踐復(fù)用小數(shù)據(jù)的落地建議6.1 數(shù)據(jù)標(biāo)注成本與收益評(píng)估生產(chǎn)環(huán)境引入新策略時(shí)不能只考慮準(zhǔn)確率還要考慮數(shù)據(jù)成本。標(biāo)注一個(gè)大型數(shù)據(jù)集的成本通常很高而篩選一個(gè)信息密集的小數(shù)據(jù)集成本要低得多。在項(xiàng)目啟動(dòng)階段可以先做一個(gè)幾百到幾千樣本的小數(shù)據(jù)集用來驗(yàn)證標(biāo)簽體系、類別劃分、pipeline 和訓(xùn)練參數(shù)。這個(gè)階段的目標(biāo)不是拿到最佳指標(biāo)而是用最短時(shí)間建立可運(yùn)行閉環(huán)。小數(shù)據(jù)集跑通后再逐步擴(kuò)充數(shù)據(jù)并用之前的熱身結(jié)果作為遷移基線。這種做法的本質(zhì)是用低成本試錯(cuò)代替大規(guī)模標(biāo)注后的返工。有一種常見的評(píng)估公式如果小數(shù)據(jù)集訓(xùn)練結(jié)果已經(jīng)接近業(yè)務(wù)最低要求再考慮是否擴(kuò)充如果差距明顯擴(kuò)充分配要聚焦導(dǎo)致錯(cuò)誤的類別而不是盲目增加所有類別樣本。6.2 在目標(biāo)檢測(cè)和視覺任務(wù)中如何落地在目標(biāo)檢測(cè)任務(wù)中例如使用 YOLOv8 訓(xùn)練自己的數(shù)據(jù)集或使用 MMRotate 訓(xùn)練 DOTA 等旋轉(zhuǎn)框數(shù)據(jù)集復(fù)用小數(shù)據(jù)集同樣有價(jià)值。一個(gè)實(shí)用做法是先構(gòu)造一個(gè) 100 到 500 張圖片的小型熱身集覆蓋不同目標(biāo)類別、不同背景和不同目標(biāo)尺寸用來驗(yàn)證數(shù)據(jù) loader、標(biāo)簽格式、增強(qiáng)方式和訓(xùn)練配置。確認(rèn) pipeline 正確后再進(jìn)入完整數(shù)據(jù)集訓(xùn)練。這個(gè)階段不要求小熱身集直接提升最終模型精度但可以顯著提升開發(fā)效率。很多訓(xùn)練失敗不是模型問題而是數(shù)據(jù)集路徑錯(cuò)誤、標(biāo)簽格式不匹配、類別編號(hào)混亂。用小型熱身集可以快速暴露這些問題同時(shí)把調(diào)試時(shí)間壓縮到分鐘級(jí)而不是等完整數(shù)據(jù)訓(xùn)練到一半才發(fā)現(xiàn)報(bào)錯(cuò)。如果目標(biāo)是驗(yàn)證“復(fù)用小數(shù)據(jù)集能否加速最終訓(xùn)練”可以在項(xiàng)目里保留一個(gè)和業(yè)務(wù)相關(guān)的公共小數(shù)據(jù)集在正式訓(xùn)練前先用它完成 5 到 20 個(gè) epoch 的熱身。對(duì)于檢測(cè)類任務(wù)熱身階段建議使用和目標(biāo)任務(wù)一致的任務(wù)頭這樣特征對(duì)齊更直接。6.3 更進(jìn)一步的擴(kuò)展方向小數(shù)據(jù)復(fù)用不是孤立技巧它和多個(gè)研究方向相關(guān)。知識(shí)蒸餾的思路是大模型在完整數(shù)據(jù)集上訓(xùn)練后用它的輸出作為軟標(biāo)簽讓小模型在小數(shù)據(jù)集上學(xué)習(xí)。蒸餾過程依賴的樣本量可以遠(yuǎn)小于重新訓(xùn)練一個(gè)模型這一點(diǎn)和小數(shù)據(jù)復(fù)用有相似之處。元學(xué)習(xí)的思路是從多個(gè)小任務(wù)中提取通用初始化讓模型遇到新任務(wù)時(shí)只需少量樣本就能快速適應(yīng)。訓(xùn)練期間的“任務(wù)集合”就是一組精心設(shè)計(jì)的小數(shù)據(jù)集。持續(xù)學(xué)習(xí)的思路是在增量訓(xùn)練過程中用小數(shù)據(jù)集作為回放樣本緩解災(zāi)難性遺忘。當(dāng)一個(gè)模型持續(xù)學(xué)習(xí)新類別時(shí)舊的類別樣本不需要全部保留關(guān)鍵的小樣本集就能維持舊知識(shí)。這些方向都指向同一個(gè)判斷數(shù)據(jù)規(guī)模不是唯一決定因素?cái)?shù)據(jù)調(diào)度和任務(wù)設(shè)計(jì)同樣重要。6.4 可直接保存的最佳實(shí)踐清單無論項(xiàng)目是分類、檢測(cè)還是更復(fù)雜的視覺任務(wù)都可以參考這個(gè)清單先確定最小可運(yùn)行數(shù)據(jù)規(guī)模用幾百到幾千樣本驗(yàn)證整個(gè)訓(xùn)練流程再?zèng)Q定是否擴(kuò)充。小數(shù)據(jù)集要保證類別完整避免空類和單樣本類。優(yōu)先保留困難樣本和邊界樣本不要只留下最容易分類的圖片。固定隨機(jī)種子讓數(shù)據(jù)采樣、模型初始化和訓(xùn)練流程可復(fù)現(xiàn)。熱身階段控制在總 epoch 的 10% 到 30%避免小數(shù)據(jù)過擬合。切換到完整數(shù)據(jù)集時(shí)必須降低學(xué)習(xí)率觀察 loss 回彈幅度。驗(yàn)證集必須獨(dú)立不能參與小數(shù)據(jù)篩選也不能反復(fù)用來調(diào)參。評(píng)估時(shí)記錄多次重復(fù)實(shí)驗(yàn)的均值和標(biāo)準(zhǔn)差而不是單次最好成績(jī)。同時(shí)記錄訓(xùn)練時(shí)間和最終準(zhǔn)確率判斷策略是否真正“更快”。如果小數(shù)據(jù)復(fù)用沒有帶來明顯收益檢查小數(shù)據(jù)與目標(biāo)任務(wù)的特征分布距離。在生產(chǎn)項(xiàng)目里先用小數(shù)據(jù)集跑通 pipeline再進(jìn)入大規(guī)模訓(xùn)練?;氐阶铋_始的問題數(shù)據(jù)集真的越大越好嗎并不一定。當(dāng)數(shù)據(jù)規(guī)模增長(zhǎng)到邊際信息很低時(shí)多出來的算力和存儲(chǔ)只是在重復(fù)處理冗余信息。小數(shù)據(jù)集復(fù)用的價(jià)值不是用少量樣本替代所有訓(xùn)練數(shù)據(jù)而是通過合理設(shè)計(jì)和調(diào)度讓模型在更短訪問路徑中獲得更高質(zhì)量的特征。理解這一點(diǎn)之后下一步值得做的練習(xí)是挑一個(gè)自己常用的數(shù)據(jù)集構(gòu)造一個(gè)信息密集的子集用本文給出的三組對(duì)比實(shí)驗(yàn)跑一次然后記錄訓(xùn)練曲線、準(zhǔn)確率和訓(xùn)練時(shí)間。結(jié)果會(huì)比單純討論理論更有說服力。