21.4 Osztályarány, súlyozás és céleloszlás

21.4.1 1. Cél, előismeret és induló becslés

A 21.3. Dropout, súlyregularizálás és augmentáció egységben a dropout, a weight decay és az augmentáció mellett a label smoothing is megjelent mint a cél eloszlásának módosítása. Itt azt vizsgáljuk, hogyan befolyásolja a tanulást, ha az egyes osztályok gyakorisága a tanítóhalmazban erősen eltér. A GlyphLab train halmazában mindhárom osztályból 80–80 kép van, tehát kiegyensúlyozott. Valós alkalmazásokban azonban gyakori, hogy a „vertical” osztály a megfigyelések 90%-át teszi ki, a „horizontal” és „diagonal” pedig csak 5–5%-ot. Ilyenkor a naiv empirical risk minimization a többségi osztályra optimalizál, mert a hibák átlagában a gyakori osztály dominál.

Előismeret: a cross-entropy és a softmax definíciója a 7.2. Softmax és többosztályos cross-entropy alfejezetből, a tanítási célfüggvény a 6.1. Objektív, reguláris tag és gradienslépés alfejezetből, a fair comparison és a seed–protokoll a 17.4. Architektúra összehasonlítása kontrollált keretben alfejezetből, valamint az aktivációk és a gradiensskálázás a 9.4. Aktivációk és gradiensáramlás alfejezetből.

Induló kérdés. Tegyük fel, hogy egy tanítóhalmazon az osztályarány 0.8,0.1,0.10.8, 0.1, 0.1. Mekkora súlyokat kell választanunk ahhoz, hogy a veszteség az osztályonkénti hibák súlyozatlan átlaga legyen? A választ a 3. szakasz levezetése adja meg; induló becslésként a ritka osztályok súlya a gyakori osztály súlyának nyolcszorosa.

21.4.2 2. Definíciók és jelölés

Legyen KK az osztályok száma, yi∈{0,…,K−1}y_i\in\{0,\dots,K-1\} a cél, és p̂k(xi;θ)\hat p_k(x_i;\theta) a modell által adott posterior valószínűség a kk-adik osztályra. A többosztályos cross-entropy veszteség egyetlen megfigyelésre

ℓi(θ)=−logp̂yi(xi;θ). \ell_i(\theta)=-\log \hat p_{y_i}(x_i;\theta).

A modell logitsot ad ki, a softmax a loss belsejében történik a [D07] szerződés szerint; a cél int64 osztályindex.

Osztályarány és empirikus gyakoriság. A tanítóhalmaz NN megfigyeléséből az nkn_k darab tartozik a kk osztályhoz, nk>0n_k>0 minden kk-ra. Az empirikus osztálygyakoriság

p̂k=nkN,∑k=0K−1p̂k=1. \hat p_k=\frac{n_k}{N}, \qquad \sum_{k=0}^{K-1}\hat p_k=1.

A populációszintű pk=P(Y=k)p_k=P(Y=k) értékek általában ismeretlenek; a tanítóhalmazbeli p̂k\hat p_k a becslésük.

Súlyozott cross-entropy, gradient scaling konvenció. Legyen w=(w0,…,wK−1)∈ℝ>0Kw=(w_0,\dots,w_{K-1})\in\mathbb R_{>0}^K pozitív osztálysúly-vektor. A batchre vett súlyozott empirikus veszteség az

LW(θ)=1N∑i=1Nwyiℓi(θ) L_W(\theta)=\frac{1}{N}\sum_{i=1}^N w_{y_i}\ell_i(\theta)

képlet, ahol a nevező a batch mérete, nem a súlyok összege. Ez a konvenció azt jelenti, hogy a gradiensben az yi=ky_i=k osztályú példák wkw_k-szoros szorzót kapnak. A PyTorch CrossEntropyLoss(weight=..., reduction='mean') ezzel szemben a

Ltorch(θ)=∑i=1Nwyiℓi(θ)∑i=1Nwyi L_{\mathrm{torch}}(\theta)=\frac{\sum_{i=1}^N w_{y_i}\ell_i(\theta)}{\sum_{i=1}^N w_{y_i}}

súlyozott átlagot számítja. A két mennyiség csak konstans szorzóban tér el, ha a batch súlyösszege rögzített; az optimum θ\theta-ban azonos, de a gradiens léptéke és az optimáló beállítása különbözik. A fejezet a gradient scaling konvenciót használja, és minden numerikus kódban explicit módon megadja a reductiont.

Sampler. A sampler a batch összetételét változtatja meg: nem a tanítóhalmaz eredeti p̂k\hat p_k eloszlásával mintavételez, hanem egy megcélzott qkq_k eloszlással. A leggyakoribb választás a class-balanced sampler, ahol qk=1/Kq_k=1/K minden kk-ra. Az osztályonkénti mintavételi valószínűség ekkor πk∝1/p̂k\pi_k\propto 1/\hat p_k, így a mintavételezett batchben az osztályarány közel egyenletes lesz.

Focal loss, áttekintés. A focal loss a példánkénti nehézséget súlyozza, nem az osztályt:

FLi(θ)=−(1−p̂yi(xi;θ))γlogp̂yi(xi;θ),γ≥0. \mathrm{FL}_i(\theta)=-(1-\hat p_{y_i}(x_i;\theta))^\gamma\log \hat p_{y_i}(x_i;\theta), \qquad \gamma\ge 0.

Ha γ=0\gamma=0, visszakapjuk a standard cross-entropy-t. Ha γ>0\gamma>0, akkor a magas konfidenciájú, könnyen osztályozott példák relatív súlya csökken, a bizonytalan, nehéz példáké nő. A focal loss önmagában nem osztályarány-korrekció, de kombinálható osztálysúlyozással.

Kalibráció. A modell akkor jól kalibrált, ha a p̂k\hat p_k prediktált valószínűségek közelítik a tényleges feltételes gyakoriságot. Egy gyakorlati mérőszám az Expected Calibration Error: a validációs halmaz példáit a maximális prediktált konfidencia szerint intervallumokra bontjuk, majd binenként a konfidenciaátlag és a pontosság abszolút különbségét az elemszám arányával súlyozzuk:

ECE=∑b=1B|Db|N|acc(Db)−conf(Db)|. \mathrm{ECE}=\sum_{b=1}^B \frac{|D_b|}{N}\left|\mathrm{acc}(D_b)-\mathrm{conf}(D_b)\right|.

A súlyozott loss vagy a sampler megváltoztatja azt az eloszlást, amelyre a modell poszteriorjait illeszti; ezért a kalibrációt a tényleges teszteloszláson, nem az eltolt tanítóhalmazon kell mérni.

21.4.3 3. Levezetés: milyen empirikus kockázatot minimalizál a súlyozás?

Állítás (weighted ERM célfüggvény). Legyen a tanítóhalmaz D={(xi,yi)}i=1ND=\{(x_i,y_i)\}_{i=1}^N, yi∈{0,…,K−1}y_i\in\{0,\dots,K-1\}, az osztályonkénti elemszám nk>0n_k>0. Definiáljuk az osztályon belüli empirikus átlagos veszteséget

R̂k(θ)=1nk∑i:yi=kℓi(θ). \hat R_k(\theta)=\frac{1}{n_k}\sum_{i:y_i=k}\ell_i(\theta).

A wkw_k osztálysúlyokkal definiált súlyozott empirikus kockázat

R̂W(θ)=1N∑i=1Nwyiℓi(θ). \hat R_W(\theta)=\frac{1}{N}\sum_{i=1}^N w_{y_i}\ell_i(\theta).

Ekkor a

wk=1Kp̂k=NKnk w_k=\frac{1}{K\hat p_k}=\frac{N}{K n_k}

választás mellett

R̂W(θ)=1K∑k=0K−1R̂k(θ). \boxed{\hat R_W(\theta)=\frac{1}{K}\sum_{k=0}^{K-1}\hat R_k(\theta).}

Levezetés. Bontsuk az összeget osztályonként:

R̂W(θ)=1N∑k=0K−1wk∑i:yi=kℓi(θ)=∑k=0K−1nkNwk1nk∑i:yi=kℓi(θ)=∑k=0K−1p̂kwkR̂k(θ). \hat R_W(\theta) =\frac{1}{N}\sum_{k=0}^{K-1} w_k \sum_{i:y_i=k}\ell_i(\theta) =\sum_{k=0}^{K-1} \frac{n_k}{N}\, w_k\, \frac{1}{n_k}\sum_{i:y_i=k}\ell_i(\theta) =\sum_{k=0}^{K-1} \hat p_k w_k \hat R_k(\theta).

Helyettesítsük be a fenti wkw_k értéket:

∑k=0K−1p̂k1Kp̂kR̂k(θ)=1K∑k=0K−1R̂k(θ). \sum_{k=0}^{K-1}\hat p_k\frac{1}{K\hat p_k}\hat R_k(\theta) =\frac{1}{K}\sum_{k=0}^{K-1}\hat R_k(\theta).

A levezetés tisztán definíciós átrendezés; nincs szükség valószínűségszámítási konvergenciatételre. A feltételek: nk>0n_k>0 minden kk-ra, wk>0w_k>0, és minden ℓi\ell_i véges. A populációszintű analóg állítás ugyanígy igaz: ha a valódi pk>0p_k>0 ismert, akkor wk=1/(Kpk)w_k=1/(Kp_k) mellett a súlyozott kockázat a 1K∑k𝔼X∣Y=k[ℓ(X,k;θ)]\frac{1}{K}\sum_k \mathbb E_{X\mid Y=k}[\ell(X,k;\theta)] class-balanced kockázatot adja.

Milyen kockázatot minimalizálunk tehát? A súlyozatlan empirikus kockázat R̂(θ)=∑kp̂kR̂k(θ)\hat R(\theta)=\sum_k \hat p_k\hat R_k(\theta) a mintában szereplő arányok szerinti átlag, így a többségi osztály hibája dominálja. Az iménti wkw_k választással a minimalizált célfüggvény az osztályonkénti hibák súlyozatlan átlaga: minden osztály azonos 1/K1/K súllyal szerepel. Ez a döntés akkor indokolt, ha a felhasználási szerződés szerint az osztályok egyenlő fontosságúak, például a GlyphLab kiegyensúlyozott tesztjén. Ha a teszt eloszlása valójában ugyanaz az eltolt mix, akkor a súlyozatlan ERM a helyes cél; a súlyozás ekkor a többségi osztályt alulreprezentálja.

Fontos tehát kimondani: a class-balanced súlyozás nem mindig javítja a kalibrációt vagy a valós pontosságot; a választott súlyozás a választott kockázatfüggvény. A levezetés nem állítja, hogy a súlyozás javítja a generalizációt, csak azt, hogy mit tesz a célfüggvénnyel.

21.4.4 4. Eredeti kézi kis példa

Legyen K=3K=3, N=10N=10, n=(8,1,1)n=(8,1,1), tehát p̂=(0.8,0.1,0.1)\hat p=(0.8,0.1,0.1). A class-balanced súlyok

w0=103⋅8=512≈0.4167,w1=w2=103⋅1=103≈3.333. w_0=\frac{10}{3\cdot 8}=\frac{5}{12}\approx 0.4167, \qquad w_1=w_2=\frac{10}{3\cdot 1}=\frac{10}{3}\approx 3.333.

Tegyük fel, hogy egy adott θ\theta mellett az osztályonkénti empirikus veszteségek

R̂0=0.2,R̂1=1.0,R̂2=1.5. \hat R_0=0.2,\qquad \hat R_1=1.0,\qquad \hat R_2=1.5.

A súlyozatlan empirikus kockázat

R̂=0.8⋅0.2+0.1⋅1.0+0.1⋅1.5=0.16+0.10+0.15=0.41. \hat R=0.8\cdot 0.2+0.1\cdot 1.0+0.1\cdot 1.5=0.16+0.10+0.15=0.41.

A súlyozott empirikus kockázat a fenti ww-vel

R̂W=13(0.2+1.0+1.5)=2.73=0.90. \hat R_W=\frac{1}{3}(0.2+1.0+1.5)=\frac{2.7}{3}=0.90.

A különbség jól mutatja, hogy a súlyozott cél a ritka osztályok hibáját sokkal erősebben bünteti: a R̂W\hat R_W értéke több mint kétszerese a súlyozatlannak, mert a két ritka osztály átlagos hibája nagy. Ha a modell a többségi osztályra specializálódik, a súlyozatlan cél kicsi, a súlyozott nagy marad; a súlyozott optimum tehát más kompromisszumot keres.

21.4.5 5. Labor: mesterségesen eltolt class-mix

A labor célja, hogy a class-balanced súlyozás, a sampler és a kiinduló súlyozatlan baseline hatását mérje egy mesterségesen eltolt tanítóhalmazon. A futást ez a könyv nem hajtotta végre; az alábbi kód teljes protokoll, a táblázat pedig jelölt szemléltetés, nem mért eredmény. A hallgató a saját környezetében futtatja, és a nyers eredményeket a kísérleti naplójában rögzíti.

Adat. A GlyphLab train felosztásában osztályonként 40 jelenet, jelenetenként 2 nézet, azaz 80 kép van. A laborhoz csoportszinten választunk osztályonként rendre 40, 5 és 5 teljes jelenetet: így 100 kép marad (80 vertical, 10 horizontal, 10 diagonal), azaz 0.8/0.1/0.1 az osztályarány. A többi 140 train képet kizárjuk ebből a laborkísérletből. Azonos scene_id-jú két nézet nem kerülhet különböző részhalmazba. A validációs halmaz változatlanul a teljes 60 kép (20–20–20 osztályonként), így kiegyensúlyozott, és a kiegyensúlyozott metrika értelmes.

Modell és recept. Ugyanaz a kis CNN, mint a 21.3. Dropout, súlyregularizálás és augmentáció laborjában. A batch méret 24, epoch 30, AdamW (lásd [P02]) tanulási ráta 10−310^{-3}, seed 20261020. Minden konfigurációra öt seedet használunk (20261020, 20261021, …, 20261024), és a validációs balanced accuracy átlagát és szórását közöljük.

Konfigurációk. (1) Baseline: súlyozatlan CrossEntropyLoss(reduction='mean'). (2) Weighted CE: súlyok N/(3nk)N/(3n_k) a fenti eltolt gyakoriságból. (3) WeightedRandomSampler osztályonkénti kiegyensúlyozó mintavétellel, súlyozatlan loss mellett.

Protokoll és kiértékelés. A modellválasztás kizárólag a validációs balanced accuracy maximumán történik. A tesztet nem használjuk a labor összehasonlításában. A kalibrációt a validációs halmazon ECE-vel mérjük, 8 egyenlő szélességű konfidenciaintervallummal.

A tanítási eljárás implementációs váza (az ... jelölésű részeket a hallgatónak kell kiegészítenie, ezért nem önállóan futtatható program):

# lab_084_imbalance.py — munkakönyvtár: lab/
import numpy as np
import torch
from torch.utils.data import DataLoader, WeightedRandomSampler

# images: (360,1,24,24), labels: (360,) — GlyphLab tömbök
images = np.load("data/images.npy")
labels = np.load("data/labels.npy")
meta = np.loadtxt("data/metadata.csv", delimiter=",", skiprows=1, dtype=str)
# A teljes kód a metadata split oszlopát olvassa; itt csak a váz szerepel.

def make_model():
    # A n083 laborjából ismert kis CNN: Conv(1,8,k=3), ReLU, MaxPool(2),
    # Conv(8,16,k=3), ReLU, MaxPool(2), Flatten, Linear(16*4*4,3)
    ...

def run(imbalance_idx, mode, seed):
    torch.manual_seed(seed)
    # mode: "base", "weighted", "sampler"
    ...

A labor jelentésben három táblázatot kérünk: train loss utolsó epochban, validációs accuracy, balanced accuracy, macro-F1 és ECE. Példaként, nem mért futás:

Módszer val acc (átlag±szórás) balanced acc ECE
baseline 0.72±0.030.72\pm0.03 0.58±0.050.58\pm0.05 0.100.10
weighted CE 0.70±0.020.70\pm0.02 0.77±0.030.77\pm0.03 0.060.06
sampler 0.69±0.030.69\pm0.03 0.76±0.040.76\pm0.04 0.050.05

A kísérleti állítást csak a tényleges futtatás után szabad megfogalmazni. A fenti táblázat pusztán a várt mintázat illusztrációja: a class-balanced módszerek általában javítják a kiegyensúlyozott metrikát, de a nyers accuracy kissé romolhat, és a kalibráció a kiegyensúlyozott validáción javulhat.

21.4.6 6. Feladatok

21.4.6.1 F1 — Fogalmi, nehézség 1

Magyarázza el, mi a lényegi különbség a loss weighting és a batch sampler hatásmechanizmusa között. Adjon egy olyan esetet, amikor a két módszer eltérő viselkedést eredményez ugyanakkora átlagos osztályarány mellett.

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

Legyen N=6N=6, K=2K=2, n0=4n_0=4, n1=2n_1=2. Írja fel a class-balanced súlyokat, és vezesse le a 3. szakasz képletéből, hogy a súlyozott empirikus kockázat valóban 12(R̂0+R̂1)\frac{1}{2}(\hat R_0+\hat R_1). Ellenőrizze az indexhatárokat, és mondja ki, melyik feltétel sérül, ha n1=0n_1=0.

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

Írjon PyTorch-kódot, amely kiszámítja egy rögzített logit- és célbatchre a súlyozott cross-entropy-t mind a gradient scaling konvencióban, mind a PyTorch reduction='mean' beépített változatában. Ellenőrizze, hogy a két érték aránya a batch súlyösszegétől függ. Használjon torch.manual_seed(0)-t, float32 tensort, és adja meg a kódot.

21.4.6.4 F4 — Hibakeresési, nehézség 3

A következő kódrészlet a tanítási loop egy részlete:

# target_train: az imbalanced dataset minden példájához tartozó osztályindex
sample_weights = 1.0 / class_counts[target_train]
sampler = WeightedRandomSampler(weights=sample_weights, num_samples=len(dataset), replacement=True)
loss_fn = nn.CrossEntropyLoss(weight=1.0 / class_counts)

A fejlesztő célja a class-balanced tanítás. Azonosítsa a kettős, egymásra rakódó osztályarány-korrekciót, értelmezze a következményét, és mutassa meg a javítást. A sample_weights minden tanítópéldához külön súlyt ad, ezért hossza len(dataset). Ellenőrizze a javítást egy kis logit- és célbatchre úgy, hogy kiszámítja az osztályonkénti effektív súlyozást.

21.4.6.5 F5 — Kísérlettervezési, nehézség 3

Tervezzen protokollt annak mérésére, hogy a class-balanced weighted CE javítja-e a ritka osztályok recallját egy olyan teszteloszláson, ahol a célmix 90% vertical, 5% horizontal, 5% diagonal. Adja meg a megfigyelési egységet, splitet, baseline-t, változó tényezőt, metrikákat, seed-kezelést, választási szabályt és a következtetés korlátját. Az F5 nyitott: legalább egy teljes tervet kell adni, és indokolni, miért nem elegendő a sima accuracy.

21.4.7 7. Megoldások és indoklás

21.4.7.1 F1 megoldás

A loss weighting a célfüggvényben a gradiens osztályonkénti skáláját módosítja: egy wkw_k súlyú osztályból származó példa hibájának gradiense wkw_k-szoros. A batch-sampler ezzel szemben a batch összetételét változtatja: a ritka osztály gyakrabban kerül a batchbe, így a gradienslépés nagyobb arányban tartalmazza azt az osztályt. Az eltérés jól látszik abban az esetben, ha a batch méret kicsi és a loss weighting mellett a ritka osztály könnyen eltűnik a mini-batchből, mert a mintavétel továbbra is a többségi eloszlást követi. A WeightedRandomSampler csak az egyes húzások valószínűségét módosítja, így még kiegyensúlyozott várható gyakoriság mellett sem garantálja, hogy minden osztály megjelenik minden minibatchben; a loss weighting pedig csak akkor hat, ha az adott osztályból ténylegesen szerepel példa. Ugyanakkor a loss weighting determinisztikus célfüggvényt ad, míg a sampler a sztochasztikus gradiens varianciáját növelheti.

21.4.7.2 F2 megoldás

N=6N=6, n0=4n_0=4, n1=2n_1=2, K=2K=2, p̂0=4/6=2/3\hat p_0=4/6=2/3, p̂1=1/3\hat p_1=1/3. A súlyok:

w0=NKn0=62⋅4=34,w1=62⋅2=32. w_0=\frac{N}{K n_0}=\frac{6}{2\cdot 4}=\frac{3}{4}, \qquad w_1=\frac{6}{2\cdot 2}=\frac{3}{2}.

A súlyozott empirikus kockázat

R̂W=16∑i:yi=034ℓi+16∑i:yi=132ℓi=3/46⋅(4R̂0)+3/26⋅(2R̂1)=12R̂0+12R̂1. \hat R_W =\frac{1}{6}\sum_{i:y_i=0}\frac{3}{4}\ell_i+\frac{1}{6}\sum_{i:y_i=1}\frac{3}{2}\ell_i =\frac{3/4}{6}\cdot(4\hat R_0)+\frac{3/2}{6}\cdot(2\hat R_1) =\frac{1}{2}\hat R_0+\frac{1}{2}\hat R_1.

Az utolsó egyenlőség onnan jön, hogy 3/46⋅4=36=12\frac{3/4}{6}\cdot 4=\frac{3}{6}=\frac{1}{2} és 3/26⋅2=12\frac{3/2}{6}\cdot 2=\frac{1}{2}. A súlyozott összeg tehát éppen az osztályonkénti átlagok átlaga. Ha n1=0n_1=0, akkor p̂1=0\hat p_1=0, a w1=1/(Kp̂1)w_1=1/(K\hat p_1) osztás nullával nem értelmezett; a class-balanced súlyozás ezért csak akkor használható, ha minden osztályból van legalább egy tanítópélda. A levezetés indexhatárai az i:yi=ki:y_i=k részhalmazokra a [0,N)[0,N) tartományon érvényesek.

21.4.7.3 F3 megoldás

# lab/f3_weighted_ce.py — futtatható lokálisan
import torch
import torch.nn.functional as F

torch.manual_seed(0)
logits = torch.randn(6, 3, dtype=torch.float32)  # N x K
target = torch.tensor([0, 0, 0, 0, 1, 2], dtype=torch.int64)
train_counts = torch.tensor([80, 10, 10], dtype=torch.float32)
K = 3
# A súlyokat a TRAIN teljes osztálygyakorisága, nem ez a mini-batch adja.
w = train_counts.sum() / (K * train_counts)  # shape (3,)

# 1) gradient scaling konvenció
loss_each = F.cross_entropy(logits, target, reduction='none')  # shape (6,)
L_gradscale = torch.mean(w[target] * loss_each)

# 2) PyTorch beépített mean reduction súllyal
L_torch = F.cross_entropy(logits, target, weight=w, reduction='mean')

# Ellenőrzés: L_torch = sum(w_i*l_i) / sum(w_i)
L_numerator = torch.sum(w[target] * loss_each)
L_denom = torch.sum(w[target])
L_expected = L_numerator / L_denom

print(f"Gradient scaling : {L_gradscale.item():.6f}")
print(f"PyTorch mean     : {L_torch.item():.6f}")
print(f"Elvárt torch mean: {L_expected.item():.6f}")
print(f"Arány           : {L_gradscale.item() / L_torch.item():.6f}")
print(f"Batch súlyösszeg : {L_denom.item():.6f}")

Ellenőrzés: a kimenetben a második és harmadik érték bitre azonos kell legyen (torch.allclose). Az arány a batch súlyösszege osztva batch mérettel. A rögzített train-gyakoriságokra w=(5/12,10/3,10/3)w=(5/12,10/3,10/3); a hat példás minibatch négy nullás és egy-egy ritka osztálycímkéje mellett ∑iwyi=25/3\sum_i w_{y_i}=25/3, így a két érték aránya (25/3)/6=25/18≈1,3889(25/3)/6=25/18\approx1{,}3889, nem 1. Ha a súlyokat hibásan az adott minibatch saját gyakoriságából becsülnénk, a két normalizálás e speciális példában véletlenül éppen megegyezne.

21.4.7.4 F4 megoldás

Hiba: a sampler és a loss weighting ugyanazt az inverse frequency súlyozást alkalmazza egyszerre. A sampler már a batch szintjén kiegyensúlyozza az osztályarányt, a loss súly pedig ezen felül még wkw_k-szoros gradiensszorzót ad. Következmény: a ritka osztály kétszeresen fel van súlyozva; az effektív osztálysúly qkwkq_k w_k lesz, ahol qkq_k a sampler által beállított batchgyakoriság. Ha a sampler osztályeloszlása várhatóan qk=1/Kq_k=1/K, és a loss súly wk=1/(Kp̂k)w_k=1/(K\hat p_k), akkor a normalizálás előtti osztály-hozzájárulás qkwk=1/(K2p̂k)q_kw_k=1/(K^2\hat p_k); a célzott, egyenlő osztály-hozzájárulás ezzel szemben mindegyik osztályra 1/K1/K. Az osztályok egymáshoz viszonyított hozzájárulása ezért fordítottan arányos lesz az eredeti p̂k\hat p_k gyakorisággal. A CrossEntropyLoss(weight=..., reduction='mean') batchszinten a súlyok összegével oszt, ami a relatív eltolást nem szünteti meg. Javítás: a két módszer közül csak az egyiket használjuk; ha a sampler alkalmazása a cél, a loss maradjon súlyozatlan. Ha a loss weighting mellett döntünk, ne használjunk mintavételező-módosítást a batchben. Ellenőrzés: egy olyan kis batchben, ahol ismert az osztályarány, számítsuk ki az osztályonkénti gradiens-átlag beszorzóját; a helyes javítás után a populációszintű osztály-hozzájárulás minden osztály esetén 1/K1/K, nem a ritka osztály fordított gyakoriságával újra felskálázott érték.

21.4.7.5 F5 megoldás

Egy lehetséges terv:

21.4.8 8. Tipikus tévedés ellenpéldával

A leggyakoribb hiba a kettős korrekció: a loss weighting és a sampler ugyanazzal az osztályarányú súllyal való együttes alkalmazása indoklás nélkül. Az F4 feladatban látott effektív osztálysúly qkwkq_k w_k könnyen a ritka osztály túlzott felhangsúlyozásához vezet, ami túlillesztést okoz a ritka osztályon, és romolhat a kalibráció. Ellenpélda: ha a sampler közel egyenletes qk=1/Kq_k=1/K-t ad, és a loss súly wk=1/(Kp̂k)w_k=1/(K\hat p_k), akkor az osztályonkénti relatív hozzájárulás qkwk∝1/p̂kq_k w_k\propto1/\hat p_k, nem pedig azonos minden osztálynál. Az eredetileg ritka osztályok így a class-balanced célhoz képest is aránytalanul felértékelődnek. A kettős korrekció tehát nem azonos a class-balanced célfüggvénnyel. A helyes eljárás: válasszunk egy mechanizmust, és dokumentáljuk a döntést a kísérleti naplóban.

Önellenőrzés. Ellenőrizze, hogy a súlyok pozitívak, az összegük nem feltétlenül 1, a mini-batch loss redukciója a választott konvenciót követi, és a kalibráció mérése a cél eloszláson történik. Visszahívás: a fair comparison 17.4. Architektúra összehasonlítása kontrollált keretben szellemében a baseline és a súlyozott változat csak a vizsgált tényezőben térhet el; a seed, a batch méret, az optimalizáló és a modellválasztási szabály azonos kell legyen.

21.4.9 9. Rövid összefoglaló

A nem egyenletes osztályarány a naiv ERM-et a többségi osztály felé tolja. A class-balanced súlyozás a veszteségben az osztályonkénti hibákat egyenlő arányban átlagolja: választással wk=N/(Knk)w_k=N/(Kn_k), a minimalizált célfüggvény 1K∑kR̂k\frac{1}{K}\sum_k\hat R_k. A sampler a batch összetételét módosítja, a focal loss példánkénti nehézséget súlyoz; a három mechanizmus nem felcserélhető. A súlyozás megváltoztatja a kalibráció cél-eloszlását, ezért az értékelést a tényleges felhasználási eloszláson kell végezni. A súlyozást és a samplert indoklás nélkül együtt alkalmazni kettős korrekció, amely túlillesztéshez vezethet.

21.4.10 10. Következő alkalmazás és források

A következő egység, 22.1. Adateredet, címke és csoportos split, az adateredet, a címke és a csoportos split kérdéseit tárgyalja: ott a scene_id szerinti függetlenség és az annotációs hibák kezelése épít a fenti osztályarány- és értékelési megfontolásokra. A súlyozott empirical risk levezetése saját definíciós levezetés, nincs szüksége külső tételre. A PyTorch CrossEntropyLoss súlyozási viselkedését a [D06] általános torch.optim hivatkozás nem fedi; a fejezet a [D07] keretjegyzet loss-szerződését és a JELOLESEK.md konvencióját alkalmazza. A [P02] az AdamW decoupled weight decay forrása, amely a laborkísérlet optimalizálójának megválasztásához kapcsolódik.

Felhasznált források: