A 35.2. Magyarázat sanity check egységben a paraméter- és címkerandomizálás megmutatta, hogy egy Grad-CAM vagy saliency hőtérkép önmagában nem bizonyítja a modell mechanizmusát. Ebben az alfejezetben a kérdést kiterjesztjük: mely feltételek mellett szabad a tanított modell kimenetét valódi döntésben felhasználni? A cél annak a három fogalomnak a pontos elválasztása, amelyet a mérnöki gyakorlat gyakran összemos: a mért benchmarkpontosság, a felhasználási körre vonatkozó állítás és a döntési felelősség.
Induló becslés: egy csapat a GlyphLab clean tesztjén 98%-os osztályozási pontosságot mér. Jogos-e ebből azt állítani, hogy a modell egy valódi beléptetési terminálban is 98%-ban jól dönt? A válasz a becslés szerint igen, a valóságban nem. A fejezet ezt a különbséget teszi operatívvá.
Legyen a tanított modell. A leggyakoribb hiba az, hogy az mérőszámot a adathalmazt leíró eloszlástól elszakítjuk. Az alábbi fogalmak mind a -t és a felhasználást rögzítik.
Felhasználási kör (use context). Az ötös , ahol az automatizált döntés leírása, a bemenet, a kimenet, a rendszer által a kimenetre végrehajtott beavatkozás, pedig a hibás döntés következménye. A GlyphLab tanulási környezetben például = „orientációfelismerés gyakorlófeladat”, = „naplóbejegyzés”, = „gyakorlópontvesztés”. Ugyanaz a modell más mellett más felhasználási kör, és más validációt igényel.
Modellkártya (model card). Strukturált, verziózott dokumentum, amely legalább a következőket rögzíti: rendeltetés és felhasználási kör; bemeneti specifikáció (alak, dtype, intenzitástartomány, kamerafeltétel); kimeneti specifikáció és a kimenetből képzett döntési szabály; tanító/validáló/teszt adat eredete, splitprotokollja és jelenetszintű csoportosítása; mért metrikák a szeletbontásokkal; ismert korlátok és tiltott felhasználások; a súly- és kódváltozat lenyomata; karbantartási és újravalidálási feltétel.
Adathatár (data boundary). Az a eloszlás, illetve eloszláscsalád, amelyre az empirikus teljesítmény állítást igazoltuk. Formálisan: ha a teszt a eloszlásból származik, akkor a -re vonatkozó becslés. A -n kívüli pontokra semmilyen numerikus garanciát nem ad a teszt. A GlyphLab esetében a 24×24, egy csatornás, -intenzitású szintetikus alakzatképek eloszlása, osztályonként kiegyensúlyozott mintavétellel.
Privacy és licenc. A privacy az adatvédelmi követelmények gyűjtőneve: milyen azonosítót tárol a rendszer, meddig, kinek van hozzáférése, mi a törlési út. Az adatminimalizálás a privacy egyik implementációja: csak a célhoz szükséges legkisebb felbontást, legrövidebb megőrzést és legkevesebb azonosítót használjuk. A licenc ezzel szemben jogi felhasználási engedély: a tanítóadat, a kód és a mentett súly licencét külön kell nyilvántartani, mert ezek eltérő jogi státuszúak.
Nagy tétű alkalmazás (high-stakes). Olyan döntés, amelyben a modell hibája alapjogot, egészséget, szabadságot, biztonságot vagy jelentős vagyoni érdeket érint. A gyakorlati határjelölés az következmény függvénye: ha a hiba visszafordíthatatlan vagy személyre szóló, az alkalmazás nagy tétű.
Emberi felülvizsgálat (human review). Olyan folyamat, amelyben a modell kimenetét egy emberi döntéshozó előre rögzített szabály szerint felülvizsgálhatja. A felülvizsgálat maga is mérendő folyamat: ugyanúgy van saját accuracy-ja, késleltetése és döntési torzítása, mint a modellnek. A „van ember a hurokban” önmagában nem bizonyíték, csak akkor, ha a felülvizsgálati pontosságot és a beavatkozási arányt mértük.
A levezetési kötelezettség egy cáfolat: megmutatjuk, hogy két modell azonos clean tesztpontossága nem határozza meg a shift utáni pontosságukat. Az állítás, amelyet cáfolunk, a következő.
Téves állítás. Legyen teszt és egy labelmegőrző transzformáció. Ha , akkor is teljesül.
Ellenpélda. Legyen a bemenet , azaz egy csatornás, 2×2-es bináris kép; a cél , ahol 0 a függőleges, 1 a vízszintes osztály. A teszt két eleme
Minden képre legyen , ahol a 2×2 mátrix eleme. Két modellt definiálunk:
A clean teszt levezetése:
Így . Legyen elemenként, az intenzitásinverzió. A geometriai orientáció nem változik, tehát labelmegőrző ebben a példában. A shiftelt képek:
A képre , ezért , így (helyes), de , ezért (hiba). A képre , így mindkét modell -et ad (helyes). Tehát , míg . Az azonos clean pontosság ellenére a shiftelt pontosságok eltérnek, a téves állítás cáfolva.
A cáfolat módszertani tanulsága: a clean teszt pontossága csak a eloszlásra vonatkozó becslés. A shift új eloszlást definiál; annak méréséhez új, előre rögzített teszt és új metrika kell. A GlyphLab saját corrupt tesztje is ilyen: a fényességgradiens és a hozzáadott zaj egyetlen konkrét shiftosztály, nem a „valós világ” reprezentánsa.
A következő kód a fenti 2×2-es példát reprodukálja, független implementációként. A kimenet a képletből számított, nem mért futás.
# labs/n140/line_shift_counterexample.py
# Munkakönyvtár: project/labs/n140/
import numpy as np
def pred_f1(a):
s = float(a[0,0] + a[1,0] - a[0,1] - a[1,1])
return 0 if abs(s) > 0 else 1
def pred_f2(a):
s = float(a[0,0] + a[1,0] - a[0,1] - a[1,1])
return 0 if s > 0 else 1
x1 = np.array([[1, 0], [1, 0]], dtype=np.float64)
x2 = np.array([[0, 0], [1, 1]], dtype=np.float64)
D = [(x1, 0), (x2, 1)]
T = lambda x: 1.0 - x
for name, f in [("f1", pred_f1), ("f2", pred_f2)]:
acc_clean = np.mean([f(x) == y for x, y in D])
acc_shift = np.mean([f(T(x)) == y for x, y in D])
print(name, "clean=", acc_clean, "shift=", acc_shift)Várt, számított kimenet:
f1 clean= 1.0 shift= 1.0
f2 clean= 1.0 shift= 0.5
A dtype float64, a device a CPU, seed nincs, mert a
számítás determinisztikus. Az alakellenőrzés: mindkét kép 2×2, az egy
csatornás 1×2×2 tensorból a csatornaindexet elhagytuk, ez a példában
jelölt konvenció.
Az alkalmazás PageTurn: fiktív szolgáltatás, amely beszkennelt formanyomtatványok oldalait automatikusan elforgatja. A modell a GlyphLab tanuló CNN, 24×24 grayscale bemenettel. A labor célja nem a modell leszállítása, hanem két dokumentum előállítása, mielőtt bármilyen valós használatba kerülne. A PageTurn nem klinikai, jogi vagy személyazonosító alkalmazás; erről a korlátjegyzékben explicit tiltó mondat szerepel.
Korlátjegyzék, 1. vázlat.
float32,
-intenzitású,
szintetikus alakzatképekre validált. A PageTurn 300 dpi szkennelt,
szöveges, színes oldalakat adna; ez kívül esik a határon, amíg külön
kísérlet nem méri.Adatminimalizálási terv, 1. vázlat.
float32 képpé alakítja; az eredeti felbontású kép nem
hagyja el a kliens gépet.A korlátjegyzék accuracy-bontásának ellenőrzésére szolgáló sablon, feltételezett pilotértékekkel; a kimenet számított, nem mért:
# labs/n140/page_turn_limit_check.py
import numpy as np
preds = np.array([0, 0, 1, 1, 2, 2, 0, 1], dtype=np.int64)
labels = np.array([0, 0, 1, 0, 2, 2, 0, 1], dtype=np.int64)
split_ids = np.array(["clean", "clean", "clean", "clean",
"corrupt", "corrupt", "corrupt", "corrupt"], dtype=str)
def report_by_split(preds, labels, split_ids, class_names):
out = {}
for split in np.unique(split_ids):
m = split_ids == split
out[str(split)] = {
"n": int(m.sum()),
"accuracy": float(np.mean(preds[m] == labels[m])),
"class": {
class_names[c]: float(np.mean(preds[m & (labels == c)] == labels[m & (labels == c)]))
for c in sorted(set(labels[m].tolist()))
if (m & (labels == c)).sum() > 0
}
}
return out
print(report_by_split(preds, labels, split_ids,
{0: "vertical", 1: "horizontal", 2: "diagonal"}))Számított kimenet: clean n=4,
accuracy=0.75, osztálybontás vertical=0.6667,
horizontal=1.0; corrupt n=4,
accuracy=1.0. Az ellenőrzés: a clean súlyozott
osztálypontosság
,
ami megegyezik az összesített értékkel. A futás parancsa a fenti
könyvtárból python page_turn_limit_check.py. A kimenetet
nem szabad éles eredménynek nevezni, mert a predikciók feltételezett
értékek.
F1 – fogalmi, nehézség 1. Adja meg a data boundary definícióját, majd két konkrét példát arra, ahogyan a PageTurn megsértené, ha a GlyphLab 98%-os clean tesztpontosságát változatlanul átmásolná a modellkártyájába. Átadandó: definíció és két, a labor 1. és 3. pontjától különböző sértés.
F2 – levezetési, nehézség 2. Az alfejezet 2×2-es példájának mintájára konstruáljon egy új modellpárt és egy új labelmegőrző transzformációt, amelyre a clean tesztpontosságok egyenlők, a shift utáni pontosságok viszont eltérnek. Adja meg a képeket, a szabályokat és a pontosságokat. Átadandó: teljes levezetés, a cáfolt állítás kimondása.
F3 – implementációs, nehézség 2. Írjon teljes Python
függvényt, amely a GlyphLab teszt predikcióiból clean/corrupt és
osztályonkénti accuracy-t számol a metadata split oszlopa
alapján; a corrupt teszt a clean teszt képeinek ugyanabban a sorrendben
vett változata. A függvény inputja preds,
labels, split_ids, mind numpy
tömb; a kimenet a fenti laborformátumú dict. Ellenőrizze a
függvényt a 2×2-es mini példán. Átadandó: kód, dtype-ok, egy kiszámított
ellenőrző eset.
F4 – hibakeresési, nehézség 1. Az alábbi indoklás hibás: „A modell clean teszt accuracy-ja 0.99, ezért a valós dokumentumokon is 0.99 pontossággal működik, és az emberi felülvizsgálatra nincs szükség.” Azonosítsa a három elkülönült hibát, és írja át az állítást korrekt formába. Átadandó: három megnevezett hiba és a javított állítás.
F5 – kísérlettervezési/transzfer, nehézség 3. Tervezzen emberi felülvizsgálati protokollt a PageTurn számára: milyen döntési szabály mellett kér a rendszer emberi jóváhagyást, milyen metrikákat mér a pilotban, mekkora a pilot, és mi a kontroll. Rögzítse a következtetési határt. Átadandó: protokoll, baseline, metrikák, érvényességi korlát.
F1. A data boundary az az eloszláscsalád, amelyre az empirikus teszt replikálható mintavételi eljárással mér; a 0.98 becslés csak -re érvényes. Két sértés a PageTurnben: (a) színes, 300 dpi oldalakat fogad, de a modell egy csatornás, 24×24 alakzatokra tanult; az upscaling és a színcsatorna-eldobás új eloszlást ad. (b) A valós oldalakon aláírás, pecsét és részleges kitakarás jelenik meg, amelyek a GlyphLab generátorban nem szerepelnek, tehát a szintetikus alakzatok eloszlásán kívül esnek.
F2. Legyen ugyanaz a két kép, mint a leckében. Definiáljuk
A -n és is 100%-ot ér el: oszlopai homogének, ; -nél , . oszlopai nem homogének, ; -nél , . Legyen a függőleges tükrözés, az oszlopok felcserélése. Ez labelmegőrző e két képre. A tükrözés az oszlopok homogenitását megtartja, ezért pontossága -n is 100%. A képre , ezért 1-et ad a 0 címke helyett, hiba; képre , helyes. Így pontossága 50%. Az azonos clean 100% nem határozza meg a shift pontosságot.
F3. A kód:
# labs/n140/report_by_split.py
# Munkakönyvtár: project/labs/n140/
import numpy as np
def report_by_split(preds, labels, split_ids, class_names):
assert preds.shape == labels.shape == split_ids.shape
assert preds.dtype in (np.int64, np.int32)
out = {}
for split in np.unique(split_ids):
m = split_ids == split
out[str(split)] = {
"n": int(m.sum()),
"accuracy": float(np.mean(preds[m] == labels[m])),
"class": {}
}
for c in sorted(set(labels[m].tolist())):
mm = m & (labels == c)
if mm.sum() > 0:
out[str(split)]["class"][class_names[c]] = float(
np.mean(preds[mm] == labels[mm]))
return out
# Ellenőrzés a mini példán:
preds = np.array([0, 0, 1, 0, 1, 0], dtype=np.int64)
labels = np.array([0, 0, 1, 1, 1, 1], dtype=np.int64)
split_ids = np.array(["clean", "clean", "clean",
"corrupt", "corrupt", "corrupt"], dtype=str)
print(report_by_split(preds, labels, split_ids,
{0: "vertical", 1: "horizontal"}))Számított kimenet: clean accuracy
,
corrupt accuracy
,
a class-bontások konzisztensek. A függvény a GlyphLab esetén a
preds tömböt a befagyasztott modell 60 tesztképre adott
predikcióiból kapja, split_ids a metadata.csv
split oszlopának a teszt soraira vett értéke; a corrupt
teszt ugyanezt a split_ids tömböt használja, mert a corrupt
képek ugyanabban a sorrendben a clean teszt páros változatai.
F4. A három hiba: (1) a benchmark eloszlásból következtet a valós eloszlásra, ez az adathatár figyelmen kívül hagyása; (2) a 0.99 pontosság kiegyensúlyozott teszten mért, a valós osztályarány ismeretlen vagy ritka esemény; (3) az emberi felülvizsgálat szükségességét a pontosság nem szünteti meg, mert a hiba következménye a felhasználási körben más. Javított állítás: „A modell 0.99 accuracy-t ért el a GlyphLab clean tesztjén, amely 24×24 szintetikus, kiegyensúlyozott alakzatképekből áll; ezért ettől eltérő kamerafeltételre vagy osztályarányra az állítást nem terjesztjük ki. A PageTurn bevezetéséhez külön, előre rögzített pilot méri a valós eloszláson a pontosságot és az emberi felülvizsgálati arányt.”
F5. Egy lehetséges terv. Döntési szabály: a PageTurn csak akkor forgat automatikusan, ha a softmax legnagyobb logitja és a második legnagyobb logitja közti különbség nagyobb, mint ; minden más esetben a rendszer kijelölt emberi felülvizsgálóhoz irányítja az oldalt. Pilot: 200 független, emberileg annotált oldal, amelyek nem vettek részt a küszöb választásában. Baseline: automatikus forgatás nélküli manuális döntés pontossága; a metrika a forgatási accuracy, a felülvizsgálati arány és az emberi felülvizsgálat saját accuracy-ja. A kontroll: ugyanaz a 200 oldal a modell nélküli, vak jelölésben. A következtetési határ: a pilot eredménye csak az adott scannerre, dokumentumtípusra és osztályeloszlásra érvényes; új intézmény vagy formanyomtatvány új pilotot igényel.
Alak- és szélsőeset-ellenőrzés az F3-hoz: üres osztály esetén a
ciklus kihagyja a cellát, a dict nem tartalmaz hamis
nullát; a split_ids dtype str, a
preds int64, így a címkeegyezés logikai tömbbé alakul. A
labor toleranciája: a kimenet float64, az ellenőrzésnél az összegzés
kerekítési hibája
alatt marad, mert a darabszámok kis egész értékek.
A gyakori tévedés pontosan a szintetikus benchmark összekeverése a valós alkalmazással. Ellenpélda a prevalencia-csapda: ha egy beléptető rendszerben a valódi „érvényes token” aránya , akkor a mindig-érvényes osztályozó accuracy-ja . Ezzel a baseline-nal a kiegyensúlyozott GlyphLab 0.98-as érték nem bizonyít védelmi képességet; a releváns metrika a sensitivity/specificity és a következménymátrix. A második ellenpélda a licenchez kötődik: egy letöltött súly 0.99-as publikus benchmarkeredménye nem ad jogot a súly kereskedelmi felhasználására, és nem is igazolja a saját kameraeloszlásra. A [P25] sanity check arra emlékeztet, hogy a magyarázat sem pótolja a modellfüggőség ellenőrzését; a [P23] Grad-CAM lokalizációja nem ok-okozati bizonyíték; a [D21] FGSM-példa pedig oktatási demonstráció, nem éles biztonsági határ.
Önellenőrző kérdések: Meg nevezi-e a modellkártya a bemeneti alakot és intenzitástartományt? A split jelenetszintű-e, és a corrupt teszt ugyanazon párokat használja-e? A valós alkalmazás osztályaránya mért vagy feltételezett? A súly SHA-256-ja és licence a mentési verzióhoz kötött-e? Mit mér az emberi felülvizsgálat? Visszahívás: 23.4. Hibaszeletek és alkalmazási határ megmutatta, hogy az összesített accuracy a szeletbontás nélkül elfedi a koncentrált hibát; 35.2. Magyarázat sanity check pedig azt, hogy a paraméterrandomizálás kontrollja nélkül a hőtérkép nem igazol modellfüggést.
A felhasználási kör, az adathatár és a származás a teljesítményállítás része: a clean teszt accuracy csak a rögzített szintetikus eloszlásra értelmezhető. A 2×2 példa két modellje azonos clean pontosság mellett intenzitásinverzió után 100% és 50% pontosságú volt, tehát a benchmarkeredményből nem következik a shift alatti viselkedés. A modellkártya rögzíti a bemeneti specifikációt, a korrupciós határt, a licencet és az emberi felülvizsgálat feltételeit. Az adatminimalizálás a privacy-kockázatot csökkenti, de nem bizonyítja a klinikai vagy jogi alkalmasságot. Ritka eseményes környezetben a kiegyensúlyozott accuracy félrevezető, ezért a baseline és a következménymátrix kötelező.
A 36.1. Állításból kísérleti terv egységben a dokumentált korlátokból kísérleti tervet készítünk: az itt rögzített adathatár és modellkártya-mezők lesznek a kísérleti hipotézis, a mérőszám és a kiértékelési protokoll forrásai.