
不確定性估計與 Conformal Prediction - 讓模型誠實說「這題我不會,請人來看」
模型答錯的時候,信心分數照樣可以是 0.98——這是所有「AI 建議、人類決策」系統的地基問題:到底哪些案子該交給人?本篇實測兩把工具:溫度校準把說謊的信心分數扳回誠實(ECE 0.186 → 0.008,而且我們的小模型竟是「信心不足」而非過度自信);Conformal Prediction 給出帶統計保證的預測集合——恰好一個候選就自動放行(92.7% 的畫面,準確率 0.982),空集合就交人工。最後誠實打臉:鏡頭一髒,90% 保證無聲死亡,45.3% 的畫面仍被自動放行、正確率只剩 0.219。
WRITTEN BY

- Name
- Harry Chang
核心貢獻者
Vladimir Vovk 與 Alexander Gammerman、Glenn Shafer(Royal Holloway, University of London)自 1990 年代末發展出 Conformal Prediction,並於 2005 年出版《Algorithmic Learning in a Random World》——核心主張激進而優雅:不用對資料分布做任何假設,就能給機器學習的預測掛上數學保證。這套理論冷門了十幾年,直到 Anastasios Angelopoulos 與 Stephen Bates(UC Berkeley)在 2021 年的《A Gentle Introduction to Conformal Prediction》把它翻譯成十行程式碼就能落地的工程配方,才在深度學習時代翻紅。校準端的代表作則是 Chuan Guo 等人 2017 年的溫度縮放(Temperature Scaling)——一個參數就能修好神經網路的信心分數。
為什麼信心分數不可信?
Day 49 結尾埋了一個問題:模型再小再快,答錯時毫無自覺。門禁放錯人、儀表讀錯數,softmax 的信心分數照樣可以是 0.98——你不能拿一個會說謊的數字,去決定「這個案子要不要交給人看」。
而「交給人看」正是這整個系列反覆出現的主題(HITL:AI 建議、人類決策)。問題是:門檻怎麼訂才科學?「信心低於 0.9 就轉人工」——為什麼是 0.9?誰保證 0.9 以上就安全?本篇的兩把工具,就是把這件事從拍腦袋變成數學:
1. 資料集來源
資料集:Digits (scikit-learn)
備註:1797 張 8×8 手寫數字,當作「巡檢儀表數字判讀」的代理情境——巡檢員拍下壓力表,系統自動讀數,讀不準的照片轉人工。玩具規模,但校準與 conformal 的數學在任何真實模型上一字不改。
實驗設計:三塊資料,各司其職
- 訓練集 500 張:訓練一個小 CNN(測試準確率 0.956)。
- 校準集 500 張:模型沒看過的「模擬考」,再拆兩半——250 張配溫度(校準)、250 張算分位數(conformal),避免資料重用汙染保證。
- 測試集 797 張:最終驗收;另外複製一份加上雜訊與遮擋,模擬鏡頭髒掉的分布偏移。
2. 原理
2.1 第一幕:信心分數是歪的,溫度可以扳正
校準 (Calibration) 問的是:模型說 80% 有把握的那些預測,實際上是不是真的對 80%?落差用 ECE (Expected Calibration Error) 量化。修法出奇簡單——溫度縮放:所有 logits 除以一個常數 T 再過 softmax,T 在校準集上用最大似然找,一個參數,不動模型本體,不影響準確率(argmax 不變)。
2.2 第二幕:Conformal Prediction——不修模型,改輸出形式
Conformal 的洞見是換掉輸出的「形狀」:不再回答「這是 7」,而是回答一個集合,並附帶數學保證:
設 α = 0.1,流程只有三步(split conformal):
- 在校準集上打分:每張圖的「不合格分數」= 1 − 模型給真實類別的機率(答對且有把握 → 分數低)。
- 取分位數:找出讓 90% 校準樣本過關的門檻 (本實驗 0.544)。
- 上線組集合:新圖片的集合 = 所有機率大於 1 − 的類別。
集合有三種長相,直接對應決策:恰好一個(有把握,自動放行)、空集合(連一個候選都不敢背書——模型正式棄權)、多個(候選並列)。後兩種,交給人。
它和校準是互補的兩把工具:conformal 的覆蓋保證不需要機率被校準過(對任何爛分數都成立);校準修的是「平均誠實度」,conformal 給的是「逐筆保證」。
2.3 保證的前提(伏筆)
這個 90% 不是魔法,它建立在一個假設上:校準集和上線資料來自同一個分布(可交換性)。記住這句話,第三幕要收。
3. 實戰
Python 程式碼實作
# 第一幕:溫度縮放 —— 在校準集 A 上網格搜尋 T,最小化 NLL
Ts = np.linspace(0.3, 5.0, 95)
T_best = Ts[np.argmin([nll(logit_calA, y_calA, T) for T in Ts])]
# 第二幕:split conformal(校準集 B,alpha=0.1)
p_calB = softmax(logit_calB)
scores = 1 - p_calB[np.arange(len(y_calB)), y_calB] # 真類別的不合格分數
q_level = np.ceil((n + 1) * (1 - ALPHA)) / n # 有限樣本修正
qhat = np.quantile(scores, q_level, interpolation='higher')
def conformal_sets(p):
return p >= (1 - qhat) # (N, 10) 布林矩陣
# HITL 政策:恰好一個候選 -> 自動;空集合或多候選 -> 人工
sizes = conformal_sets(p_test).sum(1)
auto = sizes == 1
程式碼重點:
- conformal 核心真的只有四行:打分、取分位數、比門檻、看集合大小——沒有重訓、不挑模型,任何吐機率的分類器都能套。
- 分位數的 修正不能省,這是有限樣本下保證成立的關鍵細節。
- 溫度與分位數必須用不同的校準資料,重用同一批會讓保證悄悄失效。
4. 模型評估
第一幕的意外:我們的模型不是騙子,是膽小鬼

- 教科書(Guo 2017)說深度網路過度自信——但我們的長條全在對角線上方:說 70% 把握的題實際對了 95% 以上。這個小模型是信心不足,最佳溫度 T = 0.35(小於 1 = 銳化)洩露了一切:BatchNorm + 雜訊增強的小網路,常常反而膽小。
- 溫度一調,ECE 從 0.186 掉到 0.008——一個參數,23 倍的誠實度改善。誠實補充:過度自信才是大模型的常態,方向不同、藥方相同。
第二幕:90% 保證,如約而至
| 指標 | 數值 |
|---|---|
| 目標覆蓋率 (1 − α) | 0.90 |
| 實測覆蓋率 | 0.911 ✓ |
| 集合大小分布 | 空 7.3% / 恰好一個 92.7% / 多個 0% |
| 自動放行(集合恰好一個) | 92.7% 的畫面,準確率 0.982 |
| 轉人工(空集合) | 7.3% 的畫面——若硬用 argmax 猜,只有 0.621 |

這張表就是 HITL 的科學版:攔下來的 7.3% 正是模型最容易錯的那批(0.621 vs 全體 0.956)——不確定性把「該給人看的案子」自動挑了出來,而且整體漏網率有 90% 的數學保證背書。門檻 0.544 不是拍腦袋,是校準集算出來的分位數。
第三幕(誠實的打臉):鏡頭一髒,保證無聲死亡

給測試集加上感測器雜訊與污漬遮擋(模擬鏡頭髒掉),同一套 conformal 門檻繼續跑:
- 覆蓋率 0.911 →
0.099:90% 保證徹底死亡——因為 2.3 節的前提(同分布)被打破了,而系統不會報錯,只會安靜地錯。 - 危險數字:髒鏡頭下仍有 45.3% 的畫面拿到「恰好一個候選」被自動放行,實際正確率只剩
0.219——光靠 conformal 政策,擋不住分布偏移。 - 免費的警報器:但注意空集合率——從 7.3% 飆到 54.7%。集合大小的分布本身就是一個內建的漂移偵測器:不用任何額外模型,監控「棄權率」就能在保證失效時拉警報。
工安視角的解讀
- HITL 門檻的科學化:「不確定就交人工」終於有了數學形式——目標漏網率 α 是管理層可以直接拍板的參數(「我們接受 10% 還是 5%?」),門檻由校準集自動推導,不再是工程師拍腦袋。
- 校準集是活的:保證只對「同一台攝影機、同樣光線、同個季節」的資料成立。鏡頭清潔、產線改造、換班光線改變——都該觸發重新校準(只要 250 張新標註,不用重訓模型)。
- 把棄權率放進儀表板:空集合率突然飆高 = 資料變了 = 保證可能已死。這是本篇最便宜、最實用的一條工程建議。
- 回扣系列主線:Day 45 門禁的「門檻外轉人工」、ERP 幕僚的「AI 建議人類核准」——本篇給了這套哲學缺的最後一塊:「該交給人的比例與名單,可以帶著統計保證自動產生」。
落地案例:品檢 AI 為什麼需要這一篇
工廠裝了 AI 品檢相機,準確率 96%。老闆問:「AI 判良品的,能不能直接包裝出貨?」品保主管只回一句:「漏檢率多少?你敢簽名嗎?」——信心門檻是拍腦袋訂的、分數又會說謊,答不出來。於是 AI 永遠停在「輔助參考」,品檢人力一個都減不了。
換上本篇的做法,流程變成:
- 出考卷:拿 500 件已知良/不良的檢驗紀錄當校準集。
- 主管拍板 α:「我最多接受 5% 漏網」——風險容忍度變成管理參數,不是工程師的手感。
- 上線看集合:
{良品}→ 直接出貨;{不良}→ 退;不確定(空集合)→ 輸送到人工複檢台。
結果:九成產品自動處理,且**「自動放行部分漏檢率不超過 5%」有數學保證**——這句話可以寫進 SOP 與客戶稽核文件;人工只看被攔下的那一成,正好是模型最會錯的難題;哪天複檢台突然爆量,就是換料或光源變了的警報。
050 的真正產品不是準確率,是一句品保敢簽名的話——沒有它,AI 只能當參考;有了它,AI 才能真的接手工作。
5. 總結
我們學習了不確定性估計與 Conformal Prediction:
- 信心分數天生不可信:我們的小模型是「信心不足」(教科書上的大模型則多半過度自信);溫度縮放一個參數把 ECE 從 0.186 修到 0.008。
- Conformal 四行程式碼:打分、分位數、組集合——輸出從單一答案變成帶 90% 覆蓋保證的集合,不挑模型、不用重訓。
- HITL 的數學化:恰好一個候選 → 自動(92.7% @ 0.982);空集合 → 轉人工(正好攔到最難的 7.3%)。
- 誠實結論:保證的命門是「同分布」——鏡頭一髒覆蓋率從 0.911 崩到 0.099,45.3% 被自動放行的畫面只剩 0.219 正確;監控空集合率是最便宜的保命符。
下一篇換一種資料形狀:員工、機台、工單、事故——它們不是表格,是一張關係網。誰跟誰共用設備、哪台機器是事故的樞紐?圖神經網路 (GNN)——讓模型直接在「人員-機台-事故」的關聯圖譜上學習。