模型除錯方法論 · 討論稿 v1

模型不準,問題出在訓練、標記、還是資料?

模型表現差又難定位,本質是缺乏可歸因的中間量測。本稿提出「先建乾淨對照基準 → 由後往前、逐層切斷」的排查法,把「不準」拆成資料層/標記層/訓練層三個可獨立驗證的問題,並給一張能直接動手的錯誤分析表當收斂工具。

來源:2026-06-17 討論 · 適用:偵測/分類模型(PPE、dance_ai 等) · 目的:把「憑感覺調」換成「按證據定位」

01一句話定位

「不準」不是一個問題,是三個問題疊在一起——不先拆開、就只能憑運氣亂改。

核心病因

沒有中間量測

只看到「最終輸出錯」,缺乏可歸因的中間訊號,無法判斷錯在哪一層。

排查方向

由後往前切斷

從輸出端往回,一層一層假設「這層沒問題」並驗證,直到某層被推翻。

鐵則

一次只改一個變因

同時改資料又改訓練,永遠定不了位。改一個、量一次、記一次。

02前提:先建立「乾淨的對照基準」

沒有一把不會動的尺,改完無法判斷是改善還是運氣。動手前先固定這三件事。

固定 hold-out 測試集

絕不參與訓練/調參,人工逐筆確認標記正確。這是你唯一的真相尺

可重現

固定種子 + 記 config

每次實驗記下資料版本 / 標記版本 / 超參數 / commit,否則無法歸因。

變因控制

一次一變

每輪只動一個東西,量同一把尺,差異才能歸給那個改動。

⛔ 最常見的致命錯:測試集本身就是髒的

若 hold-out 沒人工確認、或與訓練集有重複/近似樣本(同一段影片切片分到不同集合),你量出來的分數是假的——上線必崩。先把尺修好,再談模型。

03分層歸因:把「不準」拆成三層

先假設「模型沒問題,是資料在騙它」,由後往前查。順序=資料 → 標記 → 訓練。

先查
第一層 · DATA
資料層

分布、洩漏、垃圾樣本。最常見、最該先查,成本最低。

再查
第二層 · LABEL
標記層

標記一致性是模型準確率的天花板。人都標不準,模型學不會。

最後
第三層 · TRAIN
訓練層

前兩層排除後再查。過擬合/欠擬合、pipeline 對齊、學習率。

模型輸出錯
症狀
① 資料分布/洩漏對嗎?
否 → 修資料,停
② 標記一致&正確嗎?
否 → 修標記,停
◆ 才輪到訓練層
overfit / pipeline / lr
由後往前:每一關都先假設「這層沒問題」,被推翻就停在那層修,不要跳關。 ▸ 多數「模型不準」的真因落在 ①②,但大家習慣先去調模型(③)——順序反了就會白做工。

04第一層 · 資料層(先查、最划算)

假設「模型沒問題,是資料在騙它」。三件事:看分布、看洩漏、看垃圾。

看分布

訓練 vs 線上一致嗎

類別是否嚴重不均衡?線上常見場景在訓練集是否夠多?分布偏移=線下高分、線上崩。

看洩漏

train/val/test 有重複嗎

同一段影片切片分到不同集合 → 指標虛高、上線崩。影片/連續幀資料極常見。

看垃圾

抽樣肉眼檢查

抽 50–100 筆看壞圖、空標、錯類、重複。最笨但最有效的一招。

05第二層 · 標記層(用「一致性」量化)

標記錯誤直接設定模型準確率的天花板——人都標不一致的地方,別指望模型學會

手段怎麼做看什麼
雙標重疊 (量一致性)抽一批讓兩人(或同一人隔幾天)重標一致率 / IoU / Cohen's Kappa
高信心錯誤回查 (CP 值最高)找出模型「很確定卻答錯」的樣本,回頭查標記常常是標記錯,不是模型錯
檢查規範邊界 case 有沒有書面定義(部分遮擋算不算、模糊算哪類)規範不清 → 矛盾訊號
✔ 性價比最高的單一動作

把「模型高信心、但答錯」的樣本拉出來逐筆看。這些絕大多數是標記錯或規範模糊——修標記比調模型便宜十倍,且直接抬高天花板。

06第三層 · 訓練層(前兩層排除後再查)

資料、標記乾淨了還是不準,才動模型。三個動作就能定位大半。

診斷怎麼看指向
過擬合 vs 欠擬合看 train loss 與 val loss 曲線train 好 val 差 = 過擬合/洩漏;兩者都差 = 容量/特徵/學習率
能不能背起來拿極小子集(~20 筆)train 到 100%背不起來 = pipeline/標記對齊有 bug(label 對不上、前處理錯位),不是模型不夠強
錯誤分桶測試集錯誤按類別/場景/光線/角度分組錯誤集中某桶 → 該切片資料/標記不足,回到第 1、2 層
⚠️ 「背不起來」是極強的訊號

一個模型連 20 筆都背不到 100%,幾乎可以斷定是 pipeline bug(資料沒對齊 label、augmentation 把標籤弄壞、loss 接錯)——這種 bug 你怎麼調超參都沒用。先過這關再談其他。

07最快的單一動作:建一張「錯誤分析表」

把測試集每一筆錯誤列出來,逐筆標歸因。通常一兩百筆就看得出主因——靠證據,不靠感覺。

輸入真值標記模型預測信心人工複判:標記對嗎?歸因分類
img_0142yesno0.91標記其實錯了標記錯
img_0377helmetno_helmet0.55標記正確模型弱
img_0890yesnv0.62遮擋,兩者皆可規範模糊
img_1203yesno0.88正確(罕見角度)資料缺
逐筆歸類後,統計各類佔比:  標記錯 多 → 回 §05 修標記+訂規範書  資料缺 多 → 回 §04 補該切片資料(特定角度/光線/場景)  規範模糊 多 → 寫判定指引,重標邊界 case  模型弱 多(前三類都少)→ 才真的回 §06 調訓練
✔ 為什麼這招有效

它把「模型不準」這個不可行動的抱怨,變成「45% 是標記錯、30% 是資料缺、只有 15% 是模型弱」這種可直接排序工作的數字。你會發現大部分時候根本不該去調模型。

08症狀 → 病因 速查

常見症狀對應到最可能的層,當快速指路用(仍以 §07 錯誤分析表為準)。

症狀最可能病因先查哪層
線下分數高、線上一上就崩資料洩漏 / 分布偏移資料層
模型很有自信卻答錯標記錯 / 規範矛盾標記層
train loss 降、val loss 不降過擬合(或仍是洩漏)訓練層
train loss 都降不下去pipeline bug / lr / 容量訓練層
某類別/某場景特別爛該切片資料或標記不足資料層
每次重訓結果差很多沒固定種子 / 資料太少基準