32.3 Vision Transformer és hibrid felhasználás

32.3.1 Cél, előismeret és induló kérdés

Ez az alfejezet a Vision Transformer (ViT) képfeldolgozási szerződését építi fel: miként lesz egy N×C×H×WN\times C\times H\times W képtensorból tokensorozat, milyen induktív feltevéseket épít be a modell, és miben tér el a CNN lokális feltevésétől. Előismeret a 32.2. Scaled dot-product attention attention-definíciója (Q/K/V, softmax, skálázás, multi-head, pozíciókódolás), valamint a 13.2.–16.1. konvolúciós és ekvivariancia-fogalmai rövid visszahívással. Induló becslés: egy 24×2424\times 24 méretű GlyphLab-kép 8×88\times 8 patchekkel hány tokent ad, és hány paramétere van egy D=32D=32 dimenziós patch-beágyazásnak? A fejezet végére ennek pontos, alakellenőrzött válaszát és az ekvivalens konvolúciós megvalósítást is megadjuk.

32.3.2 Patch embedding mint tanult tokenizáció

Definíció (patch embedding). Legyen X∈ℝN×C×H×WX\in\mathbb R^{N\times C\times H\times W} egy képbatch. Rögzített patch-mérethez Ph,Pw>0P_h,P_w>0 tegyük fel, hogy Ph∣HP_h\mid H és Pw∣WP_w\mid W. Ekkor a térbeli rács:

nh=HPh,nw=WPw,L=nhnw.n_h=\frac{H}{P_h},\qquad n_w=\frac{W}{P_w},\qquad L=n_h n_w.

Az (i,j)(i,j) patchvektor xn,i,j∈ℝCPhPwx_{n,i,j}\in\mathbb R^{C P_h P_w} a

X[n,c,iPh+a,jPw+b],0≤a<Ph,0≤b<Pw,0≤c<CX[n,c,iP_h+a,jP_w+b],\qquad 0\le a<P_h,\ 0\le b<P_w,\ 0\le c<C

elemek rögzített sorrendű felsorolása. A teljes patch-mátrix Xp∈ℝN×L×(CPhPw)X_p\in\mathbb R^{N\times L\times(C P_h P_w)}. A beágyazás egy W∈ℝD×(CPhPw)W\in\mathbb R^{D\times(C P_h P_w)} súlyú, b∈ℝDb\in\mathbb R^D torzítású affin leképezés:

Z=XpW⊤+b,Z∈ℝN×L×D,Z=X_p W^\top+b,\qquad Z\in\mathbb R^{N\times L\times D},

ahol bb az NN és LL dimenziók mentén broadcastolódik. A ViT-ben ehhez a sorozathoz egy tanulható zcls∈ℝ1×1×Dz_{cls}\in\mathbb R^{1\times 1\times D} osztálytokent és egy Epos∈ℝ1×(L+1)×DE_{pos}\in\mathbb R^{1\times(L+1)\times D} pozícióbeágyazást adnak, így a bemenő tokensorozat Z0=[zcls;Z]+Epos∈ℝN×(L+1)×DZ^0=[z_{cls};\, Z]+E_{pos}\in\mathbb R^{N\times(L+1)\times D}.

Lemma (a patch embedding mint nem átfedő konvolúció). Legyen Ph∣HP_h\mid H, Pw∣WP_w\mid W, C,DC,D tetszőleges. A fenti affin patch-beágyazás pontosan ugyanazt a ZZ kimenetet adja, mint egy Conv2d(C, D, kernel_size=(P_h,P_w), stride=(P_h,P_w), padding=0) réteg, amelynek kimenetét (N,D,nh,nw)(N,D,n_h,n_w) alakról (N,D,L)(N,D,L)-re lapítjuk, majd (N,L,D)(N,L,D)-re permutáljuk — feltéve, hogy a konvolúciós súly K∈ℝD×C×Ph×PwK\in\mathbb R^{D\times C\times P_h\times P_w} és a lineáris súly WW azonos indexsorrendben tartalmazza ugyanazokat a skalárokat.

Bizonyítás. Írjuk ki a konvolúció kimenetét egy rögzített (n,o,i,j)(n,o,i,j) pozícióra, ahol oo a kimeneti csatorna, (i,j)(i,j) a 3×33\times3-as térbeli rács koordinátája. Mivel kh=Phk_h=P_h, kw=Pwk_w=P_w, sh=Phs_h=P_h, sw=Pws_w=P_w és p=0p=0, a 14.1. Stride, padding, dilation és outputméret alakképlete szerint a kimeneti rács éppen nh×nwn_h\times n_w, és a bemeneti ablak az (i,j)(i,j) patch:

Y[n,o,i,j]=∑c=0C−1∑a=0Ph−1∑b=0Pw−1K[o,c,a,b]X[n,c,iPh+a,jPw+b]+b[o].Y[n,o,i,j]=\sum_{c=0}^{C-1}\sum_{a=0}^{P_h-1}\sum_{b=0}^{P_w-1} K[o,c,a,b]\,X[n,c,iP_h+a,jP_w+b]+b[o].

Az összeg ugyanaz a CPhPwC P_h P_w skalár szorzatösszege, mint a Z[n,inw+j,o]=∑rW[o,r]Xp[n,inw+j,r]+b[o]Z[n,i n_w+j,o]=\sum_{r}W[o,r]X_p[n,in_w+j,r]+b[o] kifejezés, ha W[o,(cPh+a)Pw+b]=K[o,c,a,b]W[o,(cP_h+a)P_w+b]=K[o,c,a,b]. Mivel az ablakok nem fednek át, más patch nem szól bele az adott tokenbe. A két kimenet elemenként egyenlő. ▫\square

Költség-összehasonlítás. A lemma két fontos következményt rögzít:

  1. Paraméterszám: mindkét oldalon D(CPhPw+1)D(CP_hP_w+1).
  2. MAC-kép száma: képenként L⋅CPhPw⋅DL\cdot C P_h P_w\cdot D.

Ha a stride kisebb a kernelnél, a tokenek száma és a recepciós mezők átfedése nő. Nem átfedő, s=ks=k esetén érdekes állandóság lép fel: L=HW/(PhPw)L=H W/(P_h P_w), ezért a beágyazás teljes MAC-száma N⋅HW⋅C⋅DN\cdot H W\cdot C\cdot D, független a patch-mérettől — csak a tokenek száma és az attention későbbi költsége változik. Átfedő ablaknál (s<ks<k vagy p>0p>0) a képnkénti MAC az ablakméret és a tokenszám szorzataként nő.

32.3.3 A ViT architektúra alakjai

A ViT egy tiszta transzformer-encoder képklasszifikációra [P22]. Blokkonként, z∈ℝN×(L+1)×Dz\in\mathbb R^{N\times(L+1)\times D} bemenetre a pre-norm reziduális szerkezet:

u=z+MHA(LN(z)),z′=u+MLP(LN(u)).u=z+\operatorname{MHA}\big(\operatorname{LN}(z)\big),\qquad z'=u+\operatorname{MLP}\big(\operatorname{LN}(u)\big).

Az MHA\operatorname{MHA} a 32.2. Scaled dot-product attention alfejezetben definiált többfejű scaled dot-product attention: Q=zWQ⊤Q=zW_Q^\top, K=zWK⊤K=zW_K^\top, V=zWV⊤V=zW_V^\top mind (N,L+1,D)(N,L+1,D) alakú, a figyelmi mátrix QK⊤/Dhead∈ℝN×(L+1)×(L+1)QK^\top/\sqrt{D_{head}}\in\mathbb R^{N\times(L+1)\times(L+1)}, a kimenet pedig VV konvex kombinációja. Az MLP két lineáris vetítésből és GELU-aktivációból áll, közbülső Dff>DD_{ff}>D szélességgel; a pontos DffD_{ff} az eredeti publikáció hiperparamétere. A végső osztályozás a CLS-token zcls∈ℝN×Dz_{cls}\in\mathbb R^{N\times D} kimenetén egy Whead∈ℝK×DW_{head}\in\mathbb R^{K\times D} fejjel számol logitot: Z=zclsWhead⊤+bhead∈ℝN×KZ=z_{cls}W_{head}^\top+b_{head}\in\mathbb R^{N\times K}.

A laborméretű példában D=32D=32, L=9L=9, Dff=64D_{ff}=64 egyetlen blokk paraméterszáma: QKV-vetítés 3⋅32⋅32=30723\cdot32\cdot32=3072, kimeneti vetítés 32⋅32+32=105632\cdot32+32=1056, MLP 2⋅(64⋅32)+64+32=41922\cdot(64\cdot32)+64+32=4192, két LayerNorm 128128; összesen mintegy 8,48{,}4 ezer paraméter. Ez csak a blokk; a teljes hálóhoz a beágyazás (20802080), a CLS- és pozícióbeágyazás (32+32032+320) is hozzáadódik.

32.3.4 Inductive bias: lokális és globális feltevés

Az inductive bias a modellcsaládba beépített, adattól független szerkezeti feltevés, amely leszűkíti a reprezentálható függvények halmazát. Két szinten érdemes elkülöníteni:

Ebből következik a szakirodalom absztraktszintű állítása [P22]: a ViT kevesebb kép-specifikus induktív feltevést épít be, ezért nagy előtanító adat és számítás mellett a tanulás jó eredményt érhet el, Kis adaton viszont a CNN beépített lokalitása gyakran előnyösebb. Fontos: ez a szerzők absztraktjában megfogalmazott empirikus állítás, nem a jelen könyvben bizonyított tétel, és konkrét benchmarkszámot itt nem idézünk.

32.3.5 Adat- és számításigény

A két család számítási profilja eltérően skálázódik. Egy hagyományos konvolúciós réteg költsége a pixelek számában lineáris marad: O(HW⋅khkw⋅CinCout)O(HW\cdot k_h k_w\cdot C_{in}C_{out}). A ViT attention-része tokenpárokat számol, tehát O((L+1)2D)O\big((L+1)^2D\big) művelet blokkonként, ami a patch-méret csökkenésével négyzetesen nő. A 24×2424\times24-es példán:

Az így számított skálázást szemlélteti az alábbi diagram (képletből számolt értékek, nem mért futás):

Attention-párok száma a patch-méret függvényében - Képletből: L=(24/P)^2 és (L+1)^2; CLS-tokennel. Számított szemléltetés, nem mérés.

Vegyük észre a fenti lemma következményét: a beágyazás teljes költsége s=ks=k mellett független a patch-mérettől, tehát a patch-méret csökkentése elsősorban az attention-költséget növeli, nem a tokenizációt. A patch-méret ezért számítási döntés, nem pusztán felbontási kérdés.

32.3.6 CNN-hybrid felhasználás

A hibrid modell a két induktív feltevés kompozíciója: egy CNN gerinc először lokális jellemzőtérképet állít elő, majd ennek térbeli cellái lesznek a transzformer tokenjei. Formálisan F=CNN(X)∈ℝN×Cf×Hf×WfF=\operatorname{CNN}(X)\in\mathbb R^{N\times C_f\times H_f\times W_f}, a tokenek L′=HfWfL'=H_f W_f darab CfC_f dimenziós vektor, amelyeket egy Wproj∈ℝD×CfW_{proj}\in\mathbb R^{D\times C_f} vetítés képez DD dimenzióba:

Zhyb=FflatWproj⊤+bproj∈ℝN×L′×D.Z_{hyb}=F_{flat}W_{proj}^\top+b_{proj}\in\mathbb R^{N\times L'\times D}.

A GlyphLab-példán: egy 3×33\times3-as, stride 2, padding 1 konvolúció 1→161\to16 csatornával 12×1212\times12-es térképet ad; egy második 16→3216\to32 csatornával 6×66\times6-ot; ez L′=36L'=36 token, szemben a nyers kép P=8P=8 patchelésének 99 tokenjével. A hibrid tehát sűrűbb, már feldolgozott tokeneket ad, és a kezdeti lokális szűrők megtartják a CNN kedvező kisadatos viselkedésének egy részét. A globális kontextus másik útját a 31.3. Diffúziós zajmodell és CNN-denoiser U-Net-mély encoderében láttuk; az attention itt ezt a globális keverést minden blokkban közvetlenül elvégzi.

32.3.7 Foundation-use szerződés

Nagy előtanított ViT-ek felhasználása a 20.3. Preprocessing, domain shift és súlylicenc alfejezetben rögzített szerződést örökli: a súlycsomag enumja azonosítja a pontos változatot, a licenc a felhasználási feltételt, a preprocessing-szerződés pedig a bemeneti elvárást. Egy külső ViT általában rögzített felbontásra, RGB-csatornaszámra és normalizálásra van előtanítva; a 24×2424\times24 egycsatornás GlyphLab-kép közvetlen betáplálása domain shiftet jelent, és a teljesítményre semmilyen garancia nem vonatkozik automatikusan. A 28.3. Retrieval-értékelés és adatfelosztás alfejezetből ismert globális embedding-használathoz hasonlóan a CLS-token kimenete egy globális képdeszkriptor, de ennek minősége az előtanítási eloszláshoz kötött. Ebben a laborban külső súlyt nem töltünk be; a foundation-use csak szerződésszintű előkészítés.

32.3.8 Labor: CNN/ViT döntési lap azonos inputon

A labor célja nem modellverseny, hanem egy alak- és költségalapú döntési lap: ugyanarra a determinisztikus, [0,1][0,1]-beli 24×2424\times24 float32 NCHW képre felépítjük a konvolúciós és a lineáris patch-beágyazást, ellenőrizzük az ekvivalenciát, majd kiszámítjuk a token-, paraméter- és attention-alakokat. A kimenet itt kézzel számított várt referencia, nem rögzített mért futás — a kódot a hallgató futtatja le, és a max |diff| értéket neki kell ellenőriznie.

# munkakönyvtár: lab/n127_decision/
import torch

torch.manual_seed(20261020)          # véletlen súlyok reprodukálhatóságához
dtype = torch.float32
device = torch.device("cpu")

N, C, H, W, D, P = 1, 1, 24, 24, 32, 8
x = torch.arange(H * W, dtype=dtype, device=device).view(N, C, H, W) / (H * W - 1)

# 1) konvolúciós beágyazás: k=P, s=P, p=0
conv = torch.nn.Conv2d(C, D, kernel_size=P, stride=P, padding=0,
                       bias=True, device=device, dtype=dtype)

# 2) ekvivalens lineáris patch-beágyazás: a konvolúciós súly átrendezésével
lin = torch.nn.Linear(C * P * P, D, bias=True, device=device, dtype=dtype)
with torch.no_grad():
    lin.weight.copy_(conv.weight.reshape(D, C * P * P))
    lin.bias.copy_(conv.bias)

patches = x.unfold(2, P, P).unfold(3, P, P)      # (N, C, 3, 3, P, P)
patches = patches.permute(0, 2, 3, 1, 4, 5).reshape(N, -1, C * P * P)  # (N,9,64)

z_conv = conv(x).flatten(2).transpose(1, 2)       # (N,9,D)
z_lin = lin(patches)                               # (N,9,D)
diff = (z_conv - z_lin).abs().max().item()

print("konv súly:", tuple(conv.weight.shape), "bias:", tuple(conv.bias.shape))
print("linear súly:", tuple(lin.weight.shape), "bias:", tuple(lin.bias.shape))
print("tokenek:", z_conv.shape[-2], "D:", z_conv.shape[-1])
print("paraméterek konv/linear:",
      sum(p.numel() for p in conv.parameters()),
      "/", sum(p.numel() for p in lin.parameters()))
print("max |z_conv - z_lin|:", diff)

cls = torch.zeros((N, 1, D), dtype=dtype, device=device)
z = torch.cat([cls, z_lin], dim=1)                 # (N, 10, D)
qkv = torch.nn.Linear(D, 3 * D, bias=False, device=device, dtype=dtype)
q, k, v = qkv(z).chunk(3, dim=-1)                  # (N,10,D) mind
attn = (q @ k.transpose(1, 2)) * (D ** -0.5)       # (N,10,10)
print("attention-párok:", attn.shape[-1] * attn.shape[-2],
      "alak:", tuple(attn.shape))

Várt, képletekből számolt kimenet: konvolúciós súly (32,1,8,8)(32,1,8,8), lineáris súly (32,64)(32,64); tokenek száma 99, D=32D=32; paraméterszám mindkét oldalon 20802080; a lemma szerint max |z_conv - z_lin| konstrukcióból 00 várható, float32 kerekítés miatt 10−610^{-6} alatt fogadjuk el. Az attention-párok száma 100100, alak (1,10,10)(1,10,10). A futtatás parancsa a lab/n127_decision/ könyvtárból: python decision_patch_conv.py.

A döntési lap tényrögzítő táblája:

Sor CNN-beágyazás ViT patch-beágyazás
Tokenek (P=8P=8) 99 99
Paraméterek (D=32D=32) 20802080 20802080
Tokenenkénti recepció 8×88\times8 8×88\times8
Rétegek közti interakció lokális, mélységgel nő attention, globális páronként
Beépített geometria eltolási ekvivariancia tanulandó pozíciókód

A táblázat szándékosan nem tartalmaz minőségi rangsort: ilyen állításhoz adat, modellméret, tréningrecept és kiértékelési protokoll kell, amelyet itt nem tételezünk fel.

32.3.9 Feladatok

F1 — fogalmi (nehézség 1, előfeltétel: 32.2. Scaled dot-product attention, 16.1. Eltolási equivariance és invariance). Definiálja az inductive bias fogalmát, adjon egy-egy konkrét példát a CNN-re és a ViT-re, és magyarázza el, miért mondjuk, hogy a ViT kevesebb kép-specifikus induktív feltevést épít be. Átadandó: 200–400 szavas saját magyarázat, benne az eltolási ekvivariancia és a tokenpermutáció-szimmetria megkülönböztetése, valamint egy mondatban az adatmennyiségtől való várható függés.

F2 — levezetési (nehézség 2, előfeltétel: 14.1. Stride, padding, dilation és outputméret, 14.3. Paraméterszám, MAC és aktivációmemória). Egy 32×3232\times32-es, egycsatornás képre (N=1N=1, C=1C=1) számolja ki (a) a P=8P=8, D=48D=48 patch-beágyazás és (b) a k=8k=8, s=4s=4, p=0p=0, Cout=48C_{out}=48 konvolúciós beágyazás tokenszámát, paraméterszámát és képenkénti MAC-számát. Mutassa meg, melyik paraméterválasztás mellett lenne a konvolúció pontosan ekvivalens a patch-beágyazással, és indokolja a lemma feltételeiből. Átadandó: minden közbülső számítás, a 14.1. Stride, padding, dilation és outputméret alakképletének explicit alkalmazása és alakellenőrzés.

F3 — implementációs (nehézség 2, előfeltétel: 11.1.–11.2.). Írjon teljes, futtatható PyTorch-szkriptet, amely egy 1×1×16×161\times1\times16\times16 méretű, determinisztikus arange-alapú float32 bemeneten ellenőrzi a lemma állítását P=8P=8, D=16D=16 mellett: a Conv2d(kernel_size=8, stride=8, padding=0) és az ekvivalens Linear kimenetének maximális abszolút eltérését 10−510^{-5} toleranciával kontrollálja. A súlyátvitelt a laborban látott módon végezze. Átadandó: teljes kód, seed, dtype, device, a szélsőeset (P=HP=H) token- és alakeseménye, valamint a tolerancia indoklása.

F4 — hibakeresési (nehézség 2, előfeltétel: 13.1. Kép mint diszkrét többcsatornás jel, 32.3. Vision Transformer és hibrid felhasználás). Az alábbi töredék RGB-képen akar patch-tokeneket létrehozni, de a kimenet alakja (1,27,64)(1,27,64) lett a várt (1,9,192)(1,9,192) helyett. Lokalizálja a hibát, írja le a következményét az attention-bemenetre, javítsa a kódot, és adja meg a javítás utáni ellenőrző alakot:

x = torch.randn(1, 3, 24, 24)          # NCHW
pat = x.unfold(2, 8, 8).unfold(3, 8, 8) # (1,3,3,3,8,8)
tok = pat.reshape(1, -1, 8 * 8)         # (1,27,64) -- hibás

Átadandó: az ok, a szemantikai következmény (csatornák külön tokenként), a javított kód és a javítás utáni alak.

F5 — kísérleti/transzfer (nehézség 3, előfeltétel: 1.3. Adatfelosztás és a megfigyelési egység, 22.4. Augmentációs kísérlet és domainváltozás, 23.3. Páros összehasonlítás és csoportszintű intervallum). Tervezzen kis CPU-s kísérletet a GlyphLab adathalmazon egy rögzített kis CNN és egy azonos paraméterkeretű hibrid CNN–ViT összehasonlítására. A terv kötelező elemei: megfigyelési egység (scene_id), splitbetartás, baseline, egyetlen változó tényező, azonos tréningrecept, val-alapú checkpoint-választás, pontosság és jelenet-alapú bootstrap-CI, valamint a korrupt teszt csak a modellválasztás utáni használata. Tüntesse fel, mit nem állítunk a kísérletből. Átadandó: 1–2 oldalas protokollterv, keresési és erőforráskerettel, előre megjelölt nyertes nélkül.

32.3.10 Megoldások és indoklás

F1. Az inductive bias a tanuló modellcsalád szerkezetébe épített feltételezés, amely adat nélkül is leszűkíti a reprezentálható függvények körét. A CNN példája: a súlymegosztott kis kernel miatt a háló már definíció szerint eltolási-ekvivariáns, tehát egy 3×33\times3-as minta felismerését nem kell minden pozícióban külön megtanulni. A ViT példája: pozíciókód nélkül a tokenek sorrendjére nézve ekvivariáns, tehát a térbeli viszonyok ismerete nincs beépítve; abszolút pozíciókóddal a modellnek ezt adatból kell megtanulnia. Kevés adaton a CNN erős feltevése csökkenti a varianciát, míg a ViT gyengébb feltevése több adatot igényelhet, cserébe rugalmasabban tanulhat globális összefüggéseket.

F2. (a) A 32×3232\times32, P=8P=8 kép nh=nw=4n_h=n_w=4 patchre bomlik, L=16L=16 token. A beágyazási bemenet din=CPhPw=64d_{in}=C P_h P_w=64, a kimenet D=48D=48; paraméterszám 48⋅64+48=312048\cdot64+48=3120; MAC L⋅din⋅D=16⋅64⋅48=49152L\cdot d_{in}\cdot D=16\cdot64\cdot48=49152 képenként. (b) A 14.1. Stride, padding, dilation és outputméret képletével Hout=⌊(32+2⋅0−8)/4⌋+1=⌊24/4⌋+1=7H_{out}=\lfloor(32+2\cdot0-8)/4\rfloor+1=\lfloor24/4\rfloor+1=7, tehát L=49L=49 token. Paraméterszám D(Ckhkw+1)=48⋅65=3120D(Ck_hk_w+1)=48\cdot65=3120, azonos (a)-val, mert az ablakméretek is 6464 skalárt fednek. MAC képenként L⋅Ckhkw⋅D=49⋅64⋅48=150528L\cdot Ck_hk_w\cdot D=49\cdot64\cdot48=150528, ami 49/16≈3,0649/16\approx3{,}06-szorosa (a)-nak az átfedő ablakok miatt. A lemma feltétele szerint k=Pk=P és s=Ps=P, p=0p=0 mellett lenne ekvivalens a két beágyazás, tehát (b) csak k=8,s=8,p=0k=8,s=8,p=0 választással egyezne meg (a)-val.

F3. A szkript vázlata a laborkód 16×1616\times16-ra módosított változata; a kimeneti kontroll: tokenek 44 (nh=nw=2n_h=n_w=2), a lineáris súly (16,64)(16,64), a konvolúciós súly (16,1,8,8)(16,1,8,8), paraméterszám 16⋅64+16=104016\cdot64+16=1040 mindkét oldalon. Szélsőeset P=H=16P=H=16: L=1L=1, tehát egyetlen token az egész kép, és az attention-párok száma CLS-sel 44. A 10−510^{-5} tolerancia bőven a float32 kerekítési hibája fölött van, de kiszűri a hibás indexsorrendet; a konstrukcióból adódó eltérés 00 vagy 10−710^{-7} nagyságrendű.

F4. A hiba a reshape előtti permute hiánya. Az unfold kimenete (N,C,Lh,Lw,P,P)(N,C,L_h,L_w,P,P) sorrendű, ezért a közvetlen reshape(N,-1,P*P) a csatornákat külön tokenként kezeli: 3⋅3⋅3=273\cdot3\cdot3=27 token jön létre 6464 dimenzióval, és egy-egy patch csatornái szétválnak. Következmény: az attention háromszor annyi, csatornafosztott tokenen fut, a per-token recepciós mező egycsatornás 8×88\times8 lesz, és a modell nem látja a színes patch teljes 192192 skalárját együtt. Javítás: tok = pat.permute(0, 2, 3, 1, 4, 5).reshape(1, 9, 192). Az ellenőrző alak (1,9,192)(1,9,192).

F5. A terv gerince: adat = GlyphLab images.npy/metadata.csv, train/val/test a jelenetalapú split szerint, a validáció és a CI egysége mindenütt scene_id. A vizsgált tényező kizárólag a modellcsalád: (A) kis CNN (például két konvolúciós blokk, azonos beágyazási paraméterszámmal), (B) hibrid CNN–ViT (a CNN utolsó térképe P=6P=6 tokenre lapítva, egy attention-blokk). Rögzített tényezők: seedek, batch, epoch, optimizáló, augmentáció, célmetrika (pontosság), 24×2424\times24 input, CPU. A modellválasztás val-veszteség szerint történik, a teszt és a korrupt teszt csak utána kerül kiértékelésre; a bizonytalanságot jelenet-alapú bootstrap-CI-vel adjuk meg. Nem állítjuk: természetes képi általánosítást, a modellcsaládok általános fölényét, GPU- vagy nagyadatos viselkedést; ez egy kontrollált, kis méretű adaptációs megfigyelés.

32.3.11 Gyakori tévedés ellenpéldával

A leggyakoribb hiba azt állítani, hogy „a ViT jobb a CNN-nél” vagy fordítva. Az állítás helyes formája mindig feltételes: melyik adat-, méret- és receptosztályon, milyen metrikával. Ellenpélda-pár a modellcsalád-fölény ellen: (i) ha a valódi címkefüggvény tisztán lokális, például a label csak a kép 3×33\times3-as középső sávjának átlagától függ, egy kis CNN már a beépített lokalitással ezt meg tudja tanulni, míg a ViT-nek ugyanehhez előbb ki kell tanulnia, hogy a távoli tokenpárok irrelevánsak; (ii) ha a label két távoli pixel szorzatától függ, egyetlen attention-réteg közvetlenül képes a két pozíciót összekötni, míg egy sekély, kis kernelű CNN recepciós mezője ezt nem fedi. Ez a két konstrukció heurisztikus ellenpélda, nem formális lehetetlenségi tétel: elég mély CNN vagy elegendő adat mindkét esetben változtathat a képen. A tanulság: a fölény adat-, méret- és receptfüggő, és csak rögzített protokollú méréssel állítható — mint [P22] absztraktjában is, nagy előtanítás feltételéhez kötve.

32.3.12 Önellenőrzés

32.3.13 Rövid összefoglaló

A patch embedding az N×C×H×WN\times C\times H\times W képet N×L×DN\times L\times D tokensorozatra vetíti; osztható méretnél ez pontosan egy k=Pk=P, s=Ps=P, p=0p=0 konvolúcióval azonos lineáris leképezés, azonos paraméter- és MAC-számmal. A ViT ehhez CLS-tokent és tanulható pozíciókódot ad, majd pre-norm attention-blokkokat alkalmaz, amelyek globális tokenpár-interakciót számolnak. A CNN lokális, eltolás-ekvivariáns feltevést épít be; a ViT kevesebb kép-specifikus feltevéssel, adatból tanulja a geometriát. Hogy melyik család vezet, az adattól, mérettől és tréningrecepttől függ; a labor ezért csak alakeseményeket és költségeket rögzítő döntési lapot ad. A hibrid CNN–ViT a két feltevést kompozícióként egyesíti.

32.3.14 Következő alkalmazás és források

A következő egység, 32.4. VIII. ellenőrző pont: célhoz illő neurális modell, a VIII. ellenőrző pont: a CNN, a hibrid ViT és más modellcsaládok közötti választást a feladathoz, adathoz, mérethez és szerződéshez kell kötni; a jelen alfejezet alak-, költség- és induktívfeltevés-lapja ehhez ad döntési nyelvet.

Felhasznált források: