32.4 VIII. ellenőrző pont: célhoz illő neurális modell

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

Ez a VIII. ellenőrző pont. A 20.4. V. ellenőrző pont: indokolt CNN-választás alfejezetben bevezetett architektúra-döntési dimenziók, a 28.4. VII. ellenőrző pont: CNN alkalmazási szerződés alfejezetben rögzített alkalmazási szerződés és — ha a mélyítést választotta — a 31.4. Generatív felhasználás és értékelés generatív értékelési kerete itt egyetlen, lektorálható modellválasztási döntési lapba áll össze. Nem új réteget vagy veszteséget vezetünk be: a feladat az, hogy egy új problémahelyzetre a tanult CNN-főútból indokolja a modellcsaládot, megadja az összes tenzoralakot, és minden állításhoz hozzárendelje a bizonyíték típusát.

É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: a riport modellválasztási döntési lap; a súlypont a D5.

A három visszahívás: 4 leckével korábban a 31.4. Generatív felhasználás és értékelés a likelihood, mintaminőség, diversity és memorizáció különválasztását adta; 16 leckével korábban a 28.4. VII. ellenőrző pont: CNN alkalmazási szerződés a cél, target, loss, output, metrika, split és inference szerződését; 48 leckével korábban a 20.4. V. ellenőrző pont: indokolt CNN-választás a classic/residual/efficient, scratch/transfer és budget döntéseket. Ebből a három szálból építjük fel az öt döntési dimenziót.

Induló kérdés: egy új feladat érkezik: 30 000 darab, 32×3232\times32 pixeles, egycsatornás ipari felvételt kell osztályozni két felületi hiba szerint. Elegendő-e azt mondani, hogy „attentiont használunk, mert az a modern megoldás”? Becslés: nem. A modellválasztás öt, egymástól függetlenül ellenőrizhető kérdésből áll: mi a feladat típusa, mi az input/target szerződés, milyen reprezentációs induktív bias illik az adathoz, mekkora a számítási keret, és milyen bizonyíték támasztja alá az állítást. A szakasz végén ezt a becslést a döntési lappal igazoljuk.

32.4.2 2. Definíció és a döntés öt dimenziója

32.4.2.1 Feladattípus: diszkriminatív, generatív, reprezentációs

Definíció szerint a három család célfüggvénye és kimeneti szerződése eltér.

Diszkriminatív modell. A modell a feltételes predikciót közelíti közvetlenül: fθ(x)f_\theta(x) vagy pθ(y∣x)p_\theta(y\mid x) alakban. A target egy osztálycímke vagy folytonos regressziós cél, a loss pedig a predikció és a target közötti diszkriminatív veszteség: cross-entropy, BCE, MSE regresszió. Tipikus CNN-feladatok: osztályozás, detektálás, szegmentálás.

Generatív modell. A modell az input eloszlás p(x)p(x) vagy az együttes p(x,y)p(x,y) modelljét tanulja, és új realizációt tud előállítani. A szűkebb rekonstrukciós célú denoising háló a p(y∣x)p(y\mid x) feltételes modellt tanulja, ahol yy maga a tiszta jel; a generatív értékelésnél a 31.4. Generatív felhasználás és értékelés szerint a likelihood, mintaminőség és diversity külön mérendő.

Reprezentációs modell. A modell eθ:𝒳→ℝde_\theta:\mathcal X\to\mathbb R^d beágyazást ad, ahol a feladat hasonlósági szerkezete egy távolságban (koszinusz vagy ℓ2\ell_2) fejeződik ki. A loss nem közvetlen osztálycímkére, hanem párokra vagy tripletekre épül: contrastive, triplet. A downstream osztályozó vagy retrieval csak a beágyazáson értékelődik.

A határ nem éles: egy denoising CNN felfogható regressziós diszkriminatív modellként is. A besorolást a célfüggvény és a kiértékelési terv dönti el, nem a rétegtípus.

32.4.2.2 Input/target szerződés

A batch átlaga az alapértelmezett reduction; a sum-reductiont külön jelöljük.

32.4.2.3 Reprezentációs induktív bias

A CNN lokális recepciós mezőkkel, súlymegosztással és eltolási equivarianciával dolgozik (13.2. Konvolúció és cross-correlation, 16.1. Eltolási equivariance és invariance); akkor előnyös, ha a feladatban a lokális mintázatok eltolás-invariánsan ismétlődnek. Az MLP globálisan köt össze minden pixelt, de nem kap beépített térszerkezetet; kis felbontáson és kevés adaton baseline-nak alkalmas. Az attention-család globális kölcsönhatást tanul, de a pozícióinformáció kódolástól függ; ennek részletes összevetése a fejezet 32.1.–32.3. mélyítéséhez tartozik, és a főúti checkpointnak nem előfeltétele. A generatív CNN encoder–decoder szerkezetet és gyakran skip-kapcsolatot használ a finom térbeli részletek visszaadására.

32.4.2.4 Számítási keret

Konvolúciós réteg paraméterszáma Cout⋅(Cin/g)⋅kh⋅kw+CoutC_{out}\cdot (C_{in}/g)\cdot k_h\cdot k_w+C_{out}; a MAC-ek száma képenként

N⋅Cout⋅Hout⋅Wout⋅(Cin/g)⋅kh⋅kw.N\cdot C_{out}\cdot H_{out}\cdot W_{out}\cdot (C_{in}/g)\cdot k_h\cdot k_w.

Affin réteg paraméterszáma (d+1)⋅m(d+1)\cdot m; MAC-ek száma N⋅d⋅mN\cdot d\cdot m. A főúti labor kis CPU-s keretben marad; GPU, AMP és külső súly külön jelölt mélyítés.

32.4.2.5 Bizonyíték típusa

Az 1.2. Szakmailag megalapozott modellezési állítások és 8.4. II. ellenőrző pont: korrekt tanulási állítás szerint minden állításhoz meg kell nevezni az ellenőrzés típusát: analitikus (alak- vagy paraméterszám-levezetés), numerikus (gradiensellenőrzés), empirikus (futtatott protokoll nyers eredménnyel), vagy szakirodalmi (olvasott forrásszakasz, attribúcióval). A „modern, mert attention” kijelentés egyikbe sem tartozik.

32.4.3 3. Levezetési kötelezettség: CNN-állítás osztályozása és feltétel-ellenőrzése

A kötelező elem nem új tétel bizonyítása, hanem a tanult állítástípusok alkalmazása egy konkrét CNN-feladatra. Tekintsük a következő három állítást.

(A1) „A GlyphNetMini a GlyphLab teszthalmazon 0,900{,}90 feletti accuracy-t ér el, ha a legjobb val_loss checkpointot értékeljük.”

Osztályozás. Empirikus állítás. Sem az architektúrából, sem a loss definíciójából nem következik; futtatás szükséges.

Feltételek. Adat: GlyphLab manifest 1.0, generátor seed 20261020, 360 kép, jelenet-szintű split 120/30/30. Modell: GlyphNetMini, 2979 tanulható paraméter. Tanítás: Adam, lr=10−3\mathrm{lr}=10^{-3}, batch 32, 30 epoch, CE loss, seed 20261020, float32 CPU. Választás: a legjobb checkpoint kizárólag val_loss alapján; a test csak a választás után kerülhet be. Kiértékelés: model.eval(), torch.no_grad(), int64 target.

Bizonytalanság. Egyetlen seed bitpontos eredménye nem viseli a seed-szórást; a megalapozott állításhoz 3–5 seed és azok szórása kell. A keret 36.2. Ismétlések és eredménybizonytalanság ismétlési protokollját követjük.

(A2) „A GlyphNetMini kimeneti alakja N×3N\times 3 logits a 24×2424\times24 bemenetre.”

Osztályozás. Levezetés. Ellenőrizhető analitikusan, futás nélkül. A rétegsor:

Az alakellenőrzés a 14.2. Több bemeneti és kimeneti csatorna és 14.1. Stride, padding, dilation és outputméret képleteinek közvetlen alkalmazása.

(A3) „A modell 2979 tanulható paramétert tartalmaz.”

Osztályozás. Levezetés. Számítás:

Ez az elemzés mutatja, hogy ugyanarról a modellről szóló állítások három eltérő bizonyítéktípust igényelnek: A1 futtatást, A2 és A3 levezetést. A döntési lapon minden állításhoz külön sorban rögzítjük a típust és a feltételek teljesülését.

32.4.4 4. Három problémahelyzet modellspecifikációja

A labor három helyzetet kér. Az A a kötelező főút, a B és C választható mélyítésből is származtatható, de egyik sem előfeltétele a checkoutnak.

32.4.4.1 A) GlyphLab orientáció-osztályozás — diszkriminatív CNN

32.4.4.2 B) GlyphLab denoising — generatív/rekonstrukciós CNN

32.4.4.3 C) Két nézet összetartozása — reprezentációs CNN

32.4.5 5. Labor: három specifikáció és futó CNN-kontroll

A labor átadandó eredménye: a fenti három specifikációt kitöltő döntési lap, valamint az A modell egy ténylegesen futtatott kontrollja. A kód teljes; a könyvírás környezete nem futtatta, ezért a megjelenített kimenet jelölt szemléltetés, nem mért futás.

import numpy as np
import torch
import torch.nn as nn

seed = 20261020
torch.manual_seed(seed)
np.random.seed(seed)
dtype = torch.float32
device = "cpu"

# GlyphLab adat betöltése (a lab/data könyvtárból)
images = np.load("lab/data/images.npy")          # (360,1,24,24) float32
labels = np.load("lab/data/labels.npy")          # (360,) int64
metadata = np.genfromtxt(
    "lab/data/metadata.csv", delimiter=",", names=True,
    dtype=None, encoding="utf-8"
)

# A metadata sorrendje megegyezik a tömbindex-sorrenddel
train_mask = np.array([row["split"] == "train" for row in metadata])
X_train = torch.tensor(images[train_mask], dtype=dtype, device=device)
y_train = torch.tensor(labels[train_mask], dtype=torch.int64, device=device)

print("X_train shape:", X_train.shape)   # varhato: (240, 1, 24, 24)
print("y_train shape:", y_train.shape)   # varhato: (240,)

class GlyphNetMini(nn.Module):
    def __init__(self, num_classes=3):
        super().__init__()
        self.features = nn.Sequential(
            nn.Conv2d(1, 8, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
            nn.Conv2d(8, 16, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2),
        )
        self.head = nn.Linear(16 * 6 * 6, num_classes)

    def forward(self, x):
        z = self.features(x)
        z = z.reshape(z.size(0), -1)
        return self.head(z)

model = GlyphNetMini().to(device=device, dtype=dtype)
n_params = sum(p.numel() for p in model.parameters())
print("parameter count:", n_params)       # varhato: 2979

# Forward kontroll eval modban
model.eval()
with torch.no_grad():
    logits = model(X_train[:4])
print("logits shape:", logits.shape)      # varhato: (4, 3)

# Backward kontroll kis batchen
model.train()
X_batch = X_train[:2].clone().requires_grad_(True)
logits = model(X_batch)
loss = nn.functional.cross_entropy(logits, y_train[:2])
loss.backward()
print("loss:", loss.item())               # konkret ertek futasfuggo, veges pozitiv
print("dL/dX shape:", X_batch.grad.shape) # varhato: (2, 1, 24, 24)
print("dL/dX max abs:", X_batch.grad.abs().max().item())

Futtatási parancs a lab könyvtárból: python n128_control.py. Ellenőrzések: logits.shape == (4,3), X_batch.grad.shape == (2,1,24,24), n_params == 2979, a loss véges és pozitív. A pontos loss-érték seed- és környezetfüggő; a jegyzőkönyvbe a hallgató saját futtatásának nyers kimenete kerül. Shape-eltérésnél a modell definíciója hibás; n_params != 2979 esetén a rétegsor eltér a specifikációtól.

32.4.6 6. Feladatok

32.4.6.1 F1 — Fogalmi, nehézség 1

Előfeltétel: 28.4. VII. ellenőrző pont: CNN alkalmazási szerződés, 31.4. Generatív felhasználás és értékelés. Sorolja be az A, B, C laborfeladatot diszkriminatív, generatív, illetve reprezentációs családba. Mindegyiknél egy mondatban nevezze meg, hogy a target és a loss melyik definíciót kényszeríti ki. Átadandó: a három besorolás indoklással.

32.4.6.2 F2 — Levezetési, nehézség 2

Előfeltétel: 14.1. Stride, padding, dilation és outputméret, 14.2. Több bemeneti és kimeneti csatorna. Vezesse le a GlyphNetMini kimeneti alakját és paraméterszámát a 3. szakasz rétegsorára. Mutassa meg, hogy a Linear bemenete miért 16⋅6⋅6=57616\cdot6\cdot6=576, és adja meg a paraméterszámot bias nélkül is. Átadandó: a lépésenkénti levezetés, a biasos és bias nélküli összeg, valamint annak ellenőrzése, hogy a biasok összege 27.

32.4.6.3 F3 — Implementációs, nehézség 2

Előfeltétel: 11.1. Tensor és autograd-életciklus, 11.2. nn.Module és paraméterregisztráció. Írjon teljes Python-kódot, amely létrehozza a GlyphNetMini modellt, betölti a GlyphLab train batch-ét, elvégzi a forwardot és egy backwardot, majd kiírja az összes shape-et, a paraméterszámot és a loss értékét. A kódnak tartalmaznia kell a seed, dtype és device rögzítését. Átadandó: futtatható kód és a tényleges futtatás jegyzőkönyve.

32.4.6.4 F4 — Hibakeresési, nehézség 2

Előfeltétel: 7.2. Softmax és többosztályos cross-entropy, 7.4. Numerikus stabilitás és jelentésmegőrző implementáció. A következő részlet hibás:

out = model(x)                       # logits, shape (N,3)
out = torch.softmax(out, dim=1)
loss = nn.CrossEntropyLoss()(out, y)

Mi a hiba, mi a numerikus következménye, hogyan javítja, és milyen kis logit-értékkel ellenőrzi a javítást? Átadandó: az ok, a következmény, a javított kód, és a kontrollérték a javított lossra.

32.4.6.5 F5 — Kísérleti/transzfer, nehézség 3

Előfeltétel: 20.4. V. ellenőrző pont: indokolt CNN-választás, 28.4. VII. ellenőrző pont: CNN alkalmazási szerződés, 36.2. Ismétlések és eredménybizonytalanság. Tervezzen kísérletet, amely a GlyphLab adaton a GlyphNetMini-t egy azonos nagyságrendű paraméterszámú MLP baseline-nal hasonlítja össze. Határozza meg a baseline szerkezetét úgy, hogy a paraméterszám 3000 alatt maradjon, és adja meg a teljes protokollt: split, seedek, választási szabály, metrika, párosítás, korlát. Átadandó: a terv, valamint annak kimondása, hogy a következtetés csak a GlyphLab adatra vonatkozik.

32.4.7 7. Megoldások és indoklás

32.4.7.1 F1 megoldás

A: diszkriminatív, mert a target osztályindex y∈{0,1,2}y\in\{0,1,2\}, a loss cross-entropy a logitokon. B: generatív/rekonstrukciós, mert a target maga a tiszta kép, a loss MSE a pixelrekonstrukció; a modell nem osztályoz, hanem jel-térbe képez. C: reprezentációs, mert a target triplet szerkezet, a loss a beágyazott távolságok kontrasztív rendezése; nincs közvetlen osztálycímke a veszteségben. Ellenpélda a határokra: ha B-t csak denoisingra használjuk és nem mintát generálunk, akkor a generatív címke a célból, nem a rétegtípusból következik.

32.4.7.2 F2 megoldás

A rétegsor: 24→24\to Conv(3,pad=1) →24→\to24\to MaxPool(2) →12→\to12\to Conv(3,pad=1) →12→\to12\to MaxPool(2) →6\to6. A csatornák 1→8→161\to8\to16. A Flatten 16⋅6⋅6=57616\cdot6\cdot6=576 elemet ad. Paraméterek: Conv1 súly 1⋅8⋅9=721\cdot8\cdot9=72 + bias 8=808=80; Conv2 súly 8⋅16⋅9=11528\cdot16\cdot9=1152 + bias 16=116816=1168; Linear súly 576⋅3=1728576\cdot3=1728 + bias 3=17313=1731. Összesen 80+1168+1731=297980+1168+1731=2979. Bias nélkül 72+1152+1728=295272+1152+1728=2952. Biasok összege 8+16+3=27=2979−29528+16+3=27=2979-2952. Alakellenőrzés: a Flatten hossza megegyezik a Linear súlymátrix oszlopszámával.

32.4.7.3 F3 megoldás

Az 5. szakasz kódja a kért elemeket már tartalmazza. A hallgatói változatban egészítse ki a paraméterszám-kiírással és a loss.backward() utáni gradiens-shape ellenőrzéssel. A minimális elvárt kimenet: X_train.shape (240,1,24,24), parameter count 2979, logits shape (4,3), dL/dX shape (2,1,24,24), a loss véges. Shape-ellenőrzés szigorú egyezést kér; a loss értéknél nincs előre rögzített tolerancia, csak a végesség és pozitivitás.

32.4.7.4 F4 megoldás

A nn.CrossEntropyLoss PyTorchban a logitsot várja, és maga alkalmazza a log-softmaxot. A kétszeres softmax után a loss −log(softmax(softmax(z))y)-\log(\mathrm{softmax}(\mathrm{softmax}(z))_y) lesz a helyes −log(softmax(z)y)-\log(\mathrm{softmax}(z)_y) helyett. Következmény: a loss más skálán mozog, a gradiens a hibás összetett leképezésből származik, és a kimenet numerikusan ellaposodik. Javítás: a torch.softmax sor elhagyása. Kontroll: z=[2,1,0]z=[2,1,0], y=0y=0. A helyes loss F.cross_entropy(torch.tensor([[2.,1.,0.]]), torch.tensor([0])) értéke −ln(softmax(z)0)≈0,4076-\ln(\mathrm{softmax}(z)_0)\approx0{,}4076; a hibás változat ettől jól láthatóan eltér. A hallgató futtassa mindkettőt, és rögzítse a két számot.

32.4.7.5 F5 megoldásminta

Baseline MLP: bemenet 24⋅24=57624\cdot24=576, egy rejtett réteg 5 neuronnal, kimenet 3. Paraméterszám: 576⋅5+5+5⋅3+3=2903<3000576\cdot5+5+5\cdot3+3=2903<3000, tehát a GlyphNetMini 2979 paraméteréhez mérhető. Protokoll: GlyphLab 1.0, jelenet-szintű train/val/test 120/30/30; mindkét modell ugyanazon 5 seeddel (pl. 20261020, 20261021, 20261022, 20261023, 20261024) tanul 30 epochig, batch 32, Adam lr=10−3\mathrm{lr}=10^{-3}; a legjobb checkpoint val_loss szerint; a test accuracy seedenként párosítva kerül feljegyzésre. Metrika: test accuracy; bizonytalanság: a seedenkénti accuracy-k átlaga és szórása. A páros összehasonlítás a seedek között párosított, mert mindkét modell ugyanazt az adat- és initsorsot kapja. Következtetési határ: az eredmény kizárólag a GlyphLab kis, szintetikus adatára és a rögzített CPU-keretre vonatkozik; nem általános természetesképi vagy termelési állítás. A kísérlet nem lett lefuttatva; a terv a futtatás előtti protokoll, a nyers eredményt a hallgató a saját jegyzőkönyvében rögzíti.

32.4.8 8. Tipikus tévedés és ellenpélda

A leggyakoribb tévedés: a bővítő generatív vagy transformer labor elvégzése automatikusan kiváltja a főúti checkpoint CNN-kontrollját. Ez hamis. Ellenpélda: X hallgató csak egy attention-alapú osztályozót ad be a GlyphLab adatra, és a döntési lapon az A modell állításait nem osztályozza, a CNN forward/backward kontrollt nem futtatja. Y hallgató a 3. szakasz három állítását osztályozta, a GlyphNetMini kontrollt lefuttatta, és a B/C specifikációt mélyítésként, külön jelölve csatolta. A checkpoint követelményét Y teljesíti, X nem, hiába lehet az attention-modell érdekesebb kutatási irány. Ugyanígy: a denoising CNN generatív labja nem helyettesíti a diszkriminatív A cél–target–loss szerződésének ellenőrzését, mert a két feladat más targetet és más metrikát használ.

32.4.9 9. Önellenőrzés és korábbi fogalom visszahívása

Mielőtt a döntési lapot lezárom, öt kérdést ellenőrzök. (1) Minden állítás mellett szerepel a bizonyíték típusa — analitikus, numerikus, empirikus vagy szakirodalmi? (2) A loss bemenete logits, a target int64, és softmax nincs a modellben? (3) A split a jelenet-szintű függetlenséget tartja, a triplet/denoising párok nem lépnek át spliteken? (4) A legjobb checkpoint kiválasztása kizárólag val_loss alapján történt, a test csak utána jött? (5) A közölt kód ténylegesen futott-e, vagy a kimenet jelölt szemléltetés? Ez utóbbit a jegyzőkönyvben mindig explicit jelölni kell.

Visszahívás: a 16.4. IV. ellenőrző pont: a CNN-operátor teljes megértése CNN-operátor cross-correlationt számol, NCHW bemenettel és OIHW-szerű súlyalakkal; az itt használt Conv2d paraméterszám-képlet ebből következik. A 20.4. V. ellenőrző pont: indokolt CNN-választás három döntési dimenziója itt bővül a feladattípus és a bizonyíték dimenziójával. A 28.4. VII. ellenőrző pont: CNN alkalmazási szerződés szerződésláncának minden eleme a döntési lap külön sora.

32.4.10 10. Rövid összefoglaló

A célhoz illő neurális modell választása nem ízlés, hanem öt dimenzió együttes ellenőrzése: feladattípus (diszkriminatív, generatív, reprezentációs), input/target szerződés, reprezentációs induktív bias, számítási keret és bizonyíték típusa. Egy CNN-állítás lehet empirikus, levezethető vagy szakirodalmi; a feltételek hiányában az állítás érvénytelen. A labor három GlyphLab-helyzethez ad specifikációt, és a főúti GlyphNetMini forward/backward kontrollját kéri. A generatív vagy transformer mélyítés hasznos, de nem helyettesíti a CNN-főút ellenőrzését. A lektorálható döntési lap minden állításhoz feltételt, alakot, splitet és ellenőrzési típust rendel.

32.4.11 11. Következő alkalmazás

A 33.1. Inference-szerződés és modellcsomag inference-szerződésre és modellcsomagra lép. Az itt rögzített input/output alak, dtype, eszköz és kiértékelési mód közvetlenül az exportálandó modell szerződésének bemenete lesz: ugyanaz a GlyphNetMini, amely itt a döntési lapon szerepel, ott előre definiált batch- és kimeneti szerződéssel válik csomaggá.

32.4.12 12. Felhasznált források