36.4 IX. ellenőrző pont: lektorálható modellállítás

36.4.1 1. Cél, előismeret és induló kérdés

Ez a IX. ellenőrző pont: a 36.3. Szakirodalmi reprodukció és attribúció alfejezetben felépített forráskövetést és a 36.2. Ismétlések és eredménybizonytalanság alfejezetben rögzített eredménybizonytalanság-kezelést egyetlen, lektorálható modellállítás-csomaggá zárjuk. A cél nem új réteg vagy veszteség bevezetése, hanem annak bemutatása, hogy egy reprodukálható kísérlet és egy matematikai levezetés akkor válik bírálhatóvá, ha hat komponense együtt, ellenőrizhető formában áll rendelkezésre. Előismeret: a 36.3. Szakirodalmi reprodukció és attribúció attribúciós szabályai, a 35.4. Korlátok, eredet és döntési felelősség korlát- és felelősségi kerete, a 32.4. VIII. ellenőrző pont: célhoz illő neurális modell modellválasztási döntési lapja és a 24.4. VI. ellenőrző pont: megbízható CNN-training megbízható training-csomagja.

Értékelés. A közös 0–4 rubrikát, a PASS-szabályt és a hibatípusonkénti visszautakat az 1.4. Tanulási diagnózis és kísérleti napló „Tanulási főút és ellenőrző pontok” szakasza adja meg; itt csak az eltérés: ez az egység maga vezeti be a közös riportszabály hat komponensét; a súlypont a D4 és a D5.

Induló kérdés: elegendő-e egy Jupyter notebook tiszta kimenete ahhoz, hogy egy neurális modellről szóló állítást lektorálhatónak nevezzünk? Becslés: nem. A tiszta kimenet a code komponens egy szelete; hiányzik a matematikai állítás feltételrendszere, a forrásnyom, a futási környezet, a páros eredmény és a következtetési korlát.

36.4.2 2. A bírálható csomag hat komponense

A továbbiakban a következő hat komponenst követeljük meg, és mindegyikhez megadjuk a lektor kérdését:

Komponens Mit tartalmaz A lektor kérdése
proof Állítás, feltételek, bizonyítás vagy jelölt átvétel, ellenpélda A feltételek elégségesek és kimondottak-e?
source trace Olvasott forrás, változat, szakasz, átvétel és saját rész A státusz őrzi-e az ellenőrzés mélységét?
code Teljes futtatható kód, input, seed, dtype, device, parancs Végrehajtható-e az itt leírt környezetben?
run manifest Környezet, verziók, adatsha, parancs, nyers metrika Újrafuttatható-e, és látszik-e a nyers adat?
paired result Ugyanazon megfigyelési egységre vonatkozó páros összevetés A párosítás a helyes szinten történik-e?
limits Mire nem következtethetünk az eredményből A következtetés nem lép-e túl az adaton?

Egy komponens hiánya nem feltétlenül teszi hamissá az állítást, de nem lektorálhatóvá teszi a csomagot: a lektor nem tudja megkülönböztetni a bizonyított, a mért és a feltételezett állítást.

36.4.3 3. A kiválasztott állítás és bírálata (proof)

A csomag matematikai magjának egy gyakran pontatlanul kimondott CNN-állítást választunk: az eltolási ekvivarianciát. A feladat nem az állítás puszta elfogadása, hanem a feltételek, a jelölés és az ellenpéldák bírálata.

Először rögzítsük a főút cross-correlation definícióját egyetlen képre, groups=1 mellett. Legyen

X∈ℝCin×H×W,K∈ℝCout×Cin×kh×kw, X\in\mathbb{R}^{C_{in}\times H\times W},\qquad K\in\mathbb{R}^{C_{out}\times C_{in}\times k_h\times k_w},

szimmetrikus zero padding ph,pwp_h,p_w, stride ss. A paddingolt bemenetet X̃[c,r,s]\tilde X[c,r,s]-sel jelöljük, ahol X̃[c,r,s]=X[c,r,s]\tilde X[c,r,s]=X[c,r,s], ha 0≤r<H0\le r<H és 0≤s<W0\le s<W, különben 00. A kimenet

Y[o,i,j]=b[o]+∑c=0Cin−1∑u=0kh−1∑v=0kw−1K[o,c,u,v]X̃[c,si+u−ph,sj+v−pw]. Y[o,i,j]=b[o]+\sum_{c=0}^{C_{in}-1}\sum_{u=0}^{k_h-1}\sum_{v=0}^{k_w-1} K[o,c,u,v]\,\tilde X[c,\; si+u-p_h,\; sj+v-p_w]. \tag{1}

Definiáljuk a diszkrét eltolást: (TΔX)[c,r,s]=X[c,r−Δh,s−Δw](T_\Delta X)[c,r,s]=X[c,r-\Delta_h,s-\Delta_w], ahol a definíciós tartományon kívüli indexre az érték 00. A kérdés: mikor teljesül

YTΔX[o,i,j]=YX[o,i−Δh,j−Δw]? Y_{T_\Delta X}[o,i,j]=Y_X[o,i-\Delta_h,j-\Delta_w]\;? \tag{2}

A (2) egyenletet nem mondhatjuk ki feltétel nélkül. A pontos állítás a következő.

Állítás (belső shift-ekvivariancia, s=1s=1). Legyen s=1s=1, Δ=(Δh,Δw)∈ℤ2\Delta=(\Delta_h,\Delta_w)\in\mathbb{Z}^2. Tegyük fel, hogy minden olyan (i,j)(i,j) kimeneti indexre, amelyre a (2) jobb oldala értelmes, a TΔXT_\Delta X számításakor használt teljes kh×kwk_h\times k_w bemeneti ablak az eredeti kép definíciós tartományába esik, vagyis a kernel egyetlen pozícióban sem olvas a zero padding területéről. Ekkor (2) fennáll.

Bizonyítás. A feltevés miatt TΔXT_\Delta X paddingolt változatára TΔX̃[c,r,s]=X[c,r−Δh,s−Δw]\widetilde{T_\Delta X}[c,r,s]=X[c,r-\Delta_h,s-\Delta_w] minden szükséges (r,s)(r,s) indexre, és a padding nem lép be. Helyettesítsük be (1)-be:

YTΔX[o,i,j]=∑c,u,vK[o,c,u,v]X[c,i+u−ph−Δh,j+v−pw−Δw]. Y_{T_\Delta X}[o,i,j] =\sum_{c,u,v}K[o,c,u,v]\,X[c,\;i+u-p_h-\Delta_h,\;j+v-p_w-\Delta_w].

Az összegzési indexeket változatlanul hagyva a kifejezés éppen YX[o,i−Δh,j−Δw]Y_X[o,i-\Delta_h,j-\Delta_w], feltéve, hogy az utóbbi index a kimeneti tartományban van. Ez a (2) egyenlet. ▫\square

A bírálat három ponton talál hibát a naiv megfogalmazásban.

(a) A véges kép határán az állítás hamis. Ha a shiftelt bemenet kernel-ablaka a paddinget érinti, ott TΔX̃\widetilde{T_\Delta X} értéke 00, míg az eredeti kimenet eltoltja az eredeti képértékeket használná. A zero padding nem a shiftelt jel, hanem egy másik, nullával kiterjesztett jel.

(b) Stride s>1s>1 esetén a pontos állítás a stride-részcsoportra vonatkozik. A kimeneti rácsot ss tizedeli; egy Δ\Delta bemeneti eltolás a kimenetben Δ/s\Delta/s eltolásnak felel meg, ami csak akkor egész, ha Δ=s⋅m\Delta=s\cdot m, m∈ℤ2m\in\mathbb{Z}^2. A nem osztható eltolásokra a páros és páratlan fázisú mintavétel más bemeneti pixeleket lát, ezért (2) nem is értelmezhető ugyanazon a rácson.

(c) A paddingelt shift nem azonos a shiftelt paddinggel. Ha a shift műveletet a padding után végezzük, akkor a padding nullái is eltolódnak; ha a paddingot a shift után adjuk hozzá, akkor más jelet kapunk. A (2) állítás a második konvenciót rögzíti, és ezt a szövegben mindig ki kell mondani.

Ellenpélda a feltétel szükségességére. Legyen Cin=Cout=1C_{in}=C_{out}=1, H=W=4H=W=4, kh=kw=3k_h=k_w=3, ph=pw=0p_h=p_w=0, s=1s=1, b=0b=0, és K[0,0,u,v]=1K[0,0,u,v]=1 minden (u,v)(u,v)-re. Legyen X[0,0,0]=1X[0,0,0]=1, minden más 00. Az (1) képletből:

Hout=⌊(4+0−3)/1⌋+1=2, H_{out}=\lfloor(4+0-3)/1\rfloor+1=2,

és hasonlóan Wout=2W_{out}=2. Az egyetlen nemnulla bemeneti érték hatására:

Y[0,0,0]=X[0,0,0]+0+⋯=1,Y[0,0,1]=X[0,0,1]+X[0,0,2]+X[0,0,3]=0. Y[0,0,0]=X[0,0,0]+0+\cdots=1,\qquad Y[0,0,1]=X[0,0,1]+X[0,0,2]+X[0,0,3]=0.

Most legyen Δ=(1,0)\Delta=(1,0). A shiftelt bemenet X′[0,1,0]=1X'[0,1,0]=1, minden más 00. A shiftelt bemenetből számított kimenet:

Y′[0,0,0]=X′[0,0,0]+X′[0,0,1]+X′[0,0,2]=0+1+0=1, Y'[0,0,0]=X'[0,0,0]+X'[0,0,1]+X'[0,0,2]=0+1+0=1,

és

Y′[0,0,1]=X′[0,0,1]+X′[0,0,2]+X′[0,0,3]=1+0+0=1. Y'[0,0,1]=X'[0,0,1]+X'[0,0,2]+X'[0,0,3]=1+0+0=1.

Ha (2) teljesülne, akkor Y′[0,0,0]=Y[0,0,−1]Y'[0,0,0]=Y[0,0,-1] értelmezhetetlen lenne, és Y′[0,0,1]=Y[0,0,0]=1Y'[0,0,1]=Y[0,0,0]=1; de a kapott Y′[0,0,0]=1Y'[0,0,0]=1 eltérést mutat, mert a kernel a határról „behúz” egy új értéket. A belső feltétel tehát nem elhagyható.

36.4.4 4. Eredeti kézi példa és ellenőrző kód

A kézi példa két esetet ellenőriz: egy belső shiftet, ahol (2) teljesül, és a fenti határ-shift ellenpéldát, ahol nem. A kód a főút NumPy-referenciáját használja, groups=1, NCHW, float32, CPU. A kimenet a szövegben számított érték, nem mért futás.

# Munkakönyvtár: lab/
# Futtatás: python equivariance_check.py
import numpy as np

def cross_corr_np(x, k, p, s=1):
    """groups=1, NCHW, szimmetrikus zero padding, float32 NumPy referencia."""
    x = np.asarray(x, dtype=np.float32)
    k = np.asarray(k, dtype=np.float32)
    N, C, H, W = x.shape
    O, _, kh, kw = k.shape
    Hout = (H + 2 * p - kh) // s + 1
    Wout = (W + 2 * p - kw) // s + 1
    xp = np.pad(x, ((0, 0), (0, 0), (p, p), (p, p)))
    y = np.zeros((N, O, Hout, Wout), dtype=np.float32)
    for n in range(N):
        for o in range(O):
            for i in range(Hout):
                for j in range(Wout):
                    si, sj = i * s, j * s
                    y[n, o, i, j] = np.sum(
                        xp[n, :, si:si + kh, sj:sj + kw] * k[o]
                    )
    return y

# 1. Belső shift: H=W=5, p=1, 3x3 delta kernel (középső súly 1)
x_inner = np.zeros((1, 1, 5, 5), dtype=np.float32)
x_inner[0, 0, 2, 2] = 1.0
k_delta = np.zeros((1, 1, 3, 3), dtype=np.float32)
k_delta[0, 0, 1, 1] = 1.0

y_inner = cross_corr_np(x_inner, k_delta, p=1)          # (1,1,5,5)
x_shift = np.zeros_like(x_inner)
x_shift[0, 0, 3, 2] = 1.0                               # Delta=(1,0)
y_shift = cross_corr_np(x_shift, k_delta, p=1)

# A delta kernel középső súlya identitásként viselkedik a belső tartományon:
assert y_inner[0, 0, 2, 2] == 1.0
assert y_shift[0, 0, 3, 2] == 1.0
assert y_shift[0, 0, 2, 2] == 0.0
print("Belső shift-ekvivariancia: OK")

# 2. Határ-shift ellenpélda: H=W=4, p=0, 3x3 sum kernel
x_edge = np.zeros((1, 1, 4, 4), dtype=np.float32)
x_edge[0, 0, 0, 0] = 1.0
k_sum = np.ones((1, 1, 3, 3), dtype=np.float32)

y_edge = cross_corr_np(x_edge, k_sum, p=0)              # (1,1,2,2)
x_edge_shift = np.zeros_like(x_edge)
x_edge_shift[0, 0, 1, 0] = 1.0                          # Delta=(1,0)
y_edge_shift = cross_corr_np(x_edge_shift, k_sum, p=0)

# A naiv ekvivariancia azt jósolná: y_edge_shift[0,0,0,1] == y_edge[0,0,0,0]==1
# és y_edge_shift[0,0,0,0] == 0. A tényleges érték ehelyett 1.
assert y_edge_shift[0, 0, 0, 0] == 1.0, "a határ-shift megtöri az ekvivarianciát"
print("Határ-shift ellenpélda: a feltétel nélküli állítás cáfolva")

A kód mindkét ága determinisztikus, seedre nincs szükség; a környezet NumPy 1.x, CPU. A PyTorch Conv2d ugyanezt a cross-correlationt számolja, ezért az ellenpélda a könyvtári rétegre is érvényes.

36.4.5 5. Labor: technikai riport, forrásnapló, futási jegyzőkönyv

A labor a GlyphLab szerződés egy szűkített, CPU-n futtatható osztályozási kísérletét csomagolja be. A jelen kézirat nem futtatta a kísérletet; a mérési tábla ezért jelölt szemléltetés. A hallgatói futáshoz a pontos protokoll:

A run manifest mintája:

környezet: Python 3.12, NumPy 1.26, PyTorch 2.2 CPU
adat: data/manifest.json SHA-256 egyezés ellenőrizve
parancs: python train_cnn.py --epochs 20 --batch 16 --lr 1e-3 --seed 20261020
kimenet: lab/nyers_metrika.json, lab/best_model.pt

A nyers mérési tábla jelölt szemléltetés, nem mért futás:

Epoch Train loss Val acc Test clean acc Test corrupt acc Páros delta átlag
20 0,31 0,92 0,90 0,72 −0,18-0,18

A paired result értelmezése: a delta negatív előjele azt mutatja, hogy a corrupt bemenetek rontják a helyes predikciót; a párosítás kizárja, hogy a clean és corrupt halmaz összetételének különbsége magyarázza az eltérést. A képenkénti bootstrap itt nem független, mert a megfigyelési egység a scene; a megbízható intervallumhoz scene-szintű, osztály-stratifikált resampling kell (5.4. Függő képek, seedek és resampling, S02).

A forrásnapló a csomag része:

Kulcs Ellenőrzött státusz Átvett tartalom Saját adaptáció
S01 kurzusjegyzet releváns oldala olvasva cross-correlation, stride, padding, receptive field fogalma a belső shift-ekvivariancia bizonyítása és az ellenpélda eredeti
S02 hivatalos módszertani oldal olvasva a CI feltételes, ismételt mintavételi értelmezése a scene-szintű páros delta értelmezése
P25 eredeti arXiv-rekord és absztrakt ellenőrizve motiváció: automatikus metrika nem helyettesíti a sanity checket a lektorálási kapu megfogalmazása

A P25 státusza nem teszi lehetővé, hogy részletes módszerállítást alapozzunk rá; erre a forrásnaplóban külön figyelmeztetünk.

A limits szakasz rögzíti: a GlyphLab eredménye nem természetes képi benchmark és nem termelési validáció; a softmax kimenet nem bizonytalansági garancia; a corrupt teszt csak a definiált zaj- és fényességgradiens-korrupcióra vonatkozik; high-stakes döntéshez emberi felülvizsgálat és a 35.4. Korlátok, eredet és döntési felelősség szerinti modellkártya szükséges.

36.4.6 6. Feladatok

F1 (fogalmi, nehézség 1). Sorolja fel a bírálható csomag hat komponensét, és indokolja meg, miért nem elegendő a tiszta kódkimenet önmagában. Adjon egy konkrét példát egy olyan hibára, amelyet a kód kimenete nem tár fel.

F2 (levezetési, nehézség 2). Vezesse le a stride s=2s=2 esetre a pontos shift-ekvivariancia állítást az s=1s=1-hez hasonló indexhelyettesítéssel. Mondja ki, mely Δ\Delta eltolásokra értelmes az állítás, bizonyítsa a belső tartományra, és adjon ellenpéldát Δ=(1,0)\Delta=(1,0)-ra H=4H=4, kh=1k_h=1, ph=0p_h=0, s=2s=2 mellett.

F3 (implementációs, nehézség 2). A 4. szakasz kódját egészítse ki egy check_stride2 függvénnyel, amely a stride 2 esetre ellenőrzi: Δ=(2,0)\Delta=(2,0)-ra a belső tartományon a shiftelt kimenet megegyezik az eredeti kimenet eltoltjával, Δ=(1,0)\Delta=(1,0)-ra viszont nem. Adja meg a teljes függvényt, a bemeneteket, a várt assert üzeneteket és a futtatási parancsot.

F4 (hibakeresési, nehézség 2). Az alábbi két hibát tartalmazó riportrészletben lokalizálja a hibákat, írja le a következményt és a javítást: (a) a forrásnapló a P25 absztraktjára hivatkozva részletes sanity-check protokollt állít; (b) a páros delta konfidenciaintervallumát képenkénti bootstrapből számítják, pedig a scene_id a független egység.

F5 (kísérleti/transzfer, nehézség 3). Egy mérnök a GlyphLab-on elért 0,90 test accuracy alapján azt állítja, hogy a modell alkalmas valós ipari felületi hibák osztályozására. Tervezzen ellenőrzési protokollt a domain shift kezelésére: mi legyen a baseline, a split, az adaptációs szabály, a metrika, és mit kell dokumentálni a 35.4. Korlátok, eredet és döntési felelősség modellkártyájában? Indokolja, miért nem elég a GlyphLab accuracy.

36.4.7 7. Megoldások és indoklás

F1 megoldás. A hat komponens: proof, source trace, code, run manifest, paired result, limits. A kód kimenete az implementációt ellenőrzi, de nem mutatja meg (i) a matematikai állítás érvényességi tartományát, (ii) a forrás ellenőrzési mélységét, (iii) a környezet reprodukálhatóságát, (iv) a párosítás egységét, (v) a következtetés korlátait. Példa: egy notebook 0,90 accuracyt mutat, de a test halmazt a tanítás előtt használták modellválasztásra; a kimenet önmagában ezt a szivárgást nem fedi fel.

F2 megoldás. Legyen s=2s=2. Az (1) képletben a kimeneti (i,j)(i,j) pozíció az si+usi+u és sj+vsj+v bemeneti indexeket olvassa. Ha a bemenetet Δ\Delta-val toljuk, a kimeneti pozíciók által látott értékek az eredeti bemenet si+u−Δsi+u-\Delta indexeinek felelnek meg. A (2) típusú egyenlőség azt követelné meg, hogy az új kimeneti rács az eredeti kimeneti rács Δ/s\Delta/s eltolásával essen egybe. Ez pontosan akkor lehetséges, ha Δ=s⋅m\Delta=s\cdot m valamely m∈ℤ2m\in\mathbb{Z}^2 egész vektorra, mert a kimeneti rács osztása ss. A bizonyítás ezután szó szerint megegyezik a 3. szakasz indexhelyettesítésével, az si→s(i−mh)si\to s(i-m_h) és sj→s(j−mw)sj\to s(j-m_w) helyettesítéssel.

Ellenpélda Δ=(1,0)\Delta=(1,0)-ra: legyen H=4H=4, WW tetszőleges, kh=1k_h=1, ph=0p_h=0, s=2s=2. Ekkor Hout=⌊(4−1)/2⌋+1=2H_{out}=\lfloor(4-1)/2\rfloor+1=2. A kimenet az Y[i]=X[2i]Y[i]=X[2i] mintavételezés. Legyen X[0]=1X[0]=1, minden más 00; ekkor Y=(1,0)Y=(1,0). A shiftelt bemenet X′[1]=1X'[1]=1, tehát Y′[0]=X′[0]=0Y'[0]=X'[0]=0, Y′[1]=X′[2]=0Y'[1]=X'[2]=0, azaz Y′=(0,0)Y'=(0,0). Ha az ekvivariancia a Δ=(1,0)\Delta=(1,0) eltolásra is fennállna, akkor a Y′Y' a YY valamilyen félegész eltoltja lenne, ami a kimeneti rácson nem létezik; a kapott csupa nulla vektor minden lehetséges egész eltolttól különbözik. Ezzel az állítás érvényességi köre pontosan a stride-részcsoport.

F3 megoldás. A függvény a 4. szakasz cross_corr_np-jét használja:

def check_stride2():
    # Belső tartomány, Delta=(2,0): ekvivariancia teljesül
    x = np.zeros((1, 1, 6, 6), dtype=np.float32)
    x[0, 0, 3, 3] = 1.0
    k = np.ones((1, 1, 1, 1), dtype=np.float32)
    y = cross_corr_np(x, k, p=0, s=2)          # (1,1,3,3)
    x2 = np.zeros_like(x)
    x2[0, 0, 5, 3] = 1.0                       # Delta=(2,0)
    y2 = cross_corr_np(x2, k, p=0, s=2)
    assert y[0, 0, 1, 1] == 1.0 and y2[0, 0, 2, 1] == 1.0
    assert y2[0, 0, 1, 1] == 0.0
    # Nem osztható eltolás, Delta=(1,0): nincs tiszta shift
    x1 = np.zeros_like(x)
    x1[0, 0, 4, 3] = 1.0
    y1 = cross_corr_np(x1, k, p=0, s=2)
    # y1[0,0,2,1]=1, de y[0,0,1,1]=1 is; a két kimenet nem egymás egész eltoltja
    assert y1[0, 0, 2, 1] == 1.0
    assert not np.allclose(y1[0, 0], y[0, 0])
    print("Stride-2 részcsoport-ekvivariancia: OK")

A futtatás: python equivariance_check.py; a várt kimenet a három OK üzenet. A tolerancia itt szigorú egyenlőség, mert a műveletek egész értékű float32 összegek.

F4 megoldás. (a) Hiba: a P25 státusza „absztrakt ellenőrizve”, ezért részletes módszerállítás forrásaként nem használható. Következmény: a riport olyan eljárást tulajdonít a cikknek, amelyet a szerző nem ellenőrzött, sérül az attribúciós lánc. Javítás: a P25-öt csak motivációként idézni, a konkrét protokollhoz a teljes releváns szakaszt elolvasni, vagy a saját eljárást önálló adaptációként feltüntetni. (b) Hiba: a CI-t képenkénti bootstrapből számítják, de a GlyphLab független egysége a scene, és egy scene két nézete összefügg. Következmény: a CI szűkebbnek mutatja a bizonytalanságot, mint amit az adat igazol. Javítás: scene-szintű, osztály-stratifikált resampling, a páros delta ugyanazon scene/view páron számítva.

F5 megoldásminta. Lehetséges terv: (1) baseline: a GlyphLab modellt fagyasztott feature extractorként használni, és egy logisztikus regressziós fejet tanítani; (2) split: a valós adatot gyártási tétel vagy idő szerint csoportosítva bontani, hogy a szivárgást elkerüljük; (3) adaptáció: először a fej tanítása alacsony tanulási rátával, majd szükség esetén finomhangolás, minden lépés előre rögzített val-loss választással; (4) metrika: a feladathoz illő pontosság mellett confusion matrix, osztályonkénti recall, és a téves döntés költségének megfelelő küszöb; (5) dokumentáció: adateredet, domain eltérések, súlylicenc, a modell határai, emberi felülvizsgálati pont. A GlyphLab accuracy azért nem elég, mert a procedurális szintetikus alakzatok és a valós felületi hibák eloszlása, textúrája és annotációs hibája különbözik; a transzfer csak új, független valós méréssel igazolható.

36.4.8 8. Tipikus tévedés, önellenőrzés és visszahívás

A tipikus tévedés: az automatikus ellenőrzést lektorálásnak tekinteni. A gradiensellenőrzés, az assert és a CI-számítás a csomag implementációs és numerikus bizonyítékai, de nem helyettesítik a matematikai feltételvizsgálatot. Ellenpélda: a 4. szakasz kódja a belső shiftre áthaladó assertet ad; ha ebből általánosítjuk az ekvivarianciát, a határ-shift assertje a cáfolatot is lefuttatja. Az automatikus ellenőrzés tehát szükséges, de nem elégséges kapu.

Önellenőrzés: (1) Mind a hat komponens szerepel-e? (2) Az állítás feltételei és az ellenpélda ugyanabban a jelölésben vannak-e? (3) A nyers tábla jelöli-e, hogy szemléltetés vagy mért futás? (4) A forrásnapló őrzi-e a státuszkülönbséget? (5) A páros eredmény a scene szintjén párosul-e?

Visszahívás: a 36.3. Szakirodalmi reprodukció és attribúció attribúciós elve, a 35.4. Korlátok, eredet és döntési felelősség modellkártya és döntési felelősség, a 32.4. VIII. ellenőrző pont: célhoz illő neurális modell célhoz illő modellválasztási lap, valamint a 24.4. VI. ellenőrző pont: megbízható CNN-training megbízható training-csomag. Ez a négy előzmény a jelen csomag hat komponensének közvetlen előzménye.

36.4.9 9. Rövid összefoglaló

A IX. ellenőrző pont egyetlen csomagba rendezi a modellállítás hat bizonyítéktípusát: a feltételeivel kimondott matematikai állítást, a forrásnyomot, a futtatható kódot, a futási jegyzőkönyvet, a páros eredményt és a következtetési korlátokat. A belső shift-ekvivariancia példája megmutatja, hogy ugyanaz az állítás feltétel nélkül hamis, pontos feltételekkel bizonyítható, a stride esetén pedig részcsoportra szorul. A labor kimenete nem mért futás, hanem jelölt szemléltetés; a hallgatói riportnak a nyers adatot, a forrásnaplót és a javítási listát együtt kell tartalmaznia. Az automatikus ellenőrzés szükséges, de a szakmai lektorálást nem helyettesíti. A következő egység a teljes konvolúciós projektet nyitja.

Források: S01, S02, P25.