36.2 Ismétlések és eredménybizonytalanság

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

A 36.1. Állításból kísérleti terv egységben rögzített kísérleti terv most kapja meg a mérési bizonytalanság részét. A cél annak eldöntése, hogy két konfiguráció különbsége valódi hatás-e, vagy csupán a tanítási véletlen, azaz a seedek ingadozása. Szükséges előismeret a preregisztrált terv fogalma, a hypothesis, control és változó tényező megkülönböztetése. Induló becslés: öt seeddel futtatott kis CNN-en a legjobb és legrosszabb validációs pontosság különbsége gyakran több százalékpont; ha ennél kisebb hatást várunk, egyetlen futás nem dönt.

36.2.2 A független egység: a seed-futás

Egy seed-futás (seed run) egy teljes tanítási folyamat egy rögzített seeddel, változatlan kóddal, adatsplit-tel és hardveren. Az ismétlés független egysége (independent unit) itt a futás: a seedek egymástól független véletlen állapotokat indítanak, ezért az eredményeket egy közös „seed-populáció” mintájának tekintjük. Ez a populáció idealizáció: az adott hardveren, adaton és kódon értelmes; más hardveren más populációról beszélünk.

A GlyphLab scene_id-je itt nem a független egység, mert a train/val/test split rögzített. A scene-alapú újramintavételezés az adatbizonytalanságot mérné; a seed-ismétlés a tanítási véletlent. A kettőt a szerződés szerint külön kell jelölni: a jelen egység csak a seed-szórást vizsgálja, a prediktív bizonytalanság és a bootstrap más fogalom.

36.2.3 Párosított seedek és a becsült különbség modellje

Két konfiguráció legyen AA és BB. Párosított seedeken (paired seeds) azt értjük, hogy ugyanazt a sis_i seedet használjuk mindkét konfigurációhoz, így az ii-edik pár (Ai,Bi)(A_i,B_i) közös véletlen környezetet kap. A különbség

Di=Bi−Ai,i=1,…,m.D_i=B_i-A_i,\qquad i=1,\ldots,m.

A mintavételi modell feltételei:

  1. a párok függetlenek, tehát D1,…,DmD_1,\ldots,D_m független azonos eloszlású;
  2. DiD_i-nek véges μD\mu_D várható értéke és σD2>0\sigma_D^2>0 varianciája van;
  3. a konfidenciaintervallumhoz a Di∼N(μD,σD2)D_i\sim N(\mu_D,\sigma_D^2) normális közelítést is feltesszük.

A párosítás előnye a varianciaképletből látszik. Ha ρ=Corr(Ai,Bi)\rho=\operatorname{Corr}(A_i,B_i) a páron belüli korreláció, akkor

Var(Di)=σA2+σB2−2ρσAσB.\operatorname{Var}(D_i)=\sigma_A^2+\sigma_B^2-2\rho\,\sigma_A\sigma_B.

A párosított átlag becsült szórásnégyzete ezért SD2/mS_D^2/m, míg független minták különbségénél SA2/m+SB2/mS_A^2/m+S_B^2/m állna. Pozitív ρ\rho esetén — ami gyakori, mert egy „nehéz” seed mindkét konfigurációt rontja — a párosított becslés varianciája kisebb.

A becslők:

D‾m=1m∑i=1mDi,SD2=1m−1∑i=1m(Di−D‾m)2,SE=SDm.\bar D_m=\frac1m\sum_{i=1}^mD_i,\qquad S_D^2=\frac1{m-1}\sum_{i=1}^m(D_i-\bar D_m)^2,\qquad \operatorname{SE}=\frac{S_D}{\sqrt m}.

Tétel (párosított hatásintervallum, normális modell). Ha D1,…,DmD_1,\ldots,D_m független N(μD,σD2)N(\mu_D,\sigma_D^2) minta, akkor

T=D‾m−μDSD/m∼tm−1,T=\frac{\bar D_m-\mu_D}{S_D/\sqrt m}\sim t_{m-1},

ahol tν,qt_{\nu,q} a qq-kvantilist jelöli: P(T≤tν,q)=qP(T\le t_{\nu,q})=q. Következésképpen a μD\mu_D hatásra vonatkozó 100(1−α)%100(1-\alpha)\%-os konfidenciaintervallum

D‾m±tm−1,1−α/2SDm.\bar D_m\pm t_{m-1,1-\alpha/2}\frac{S_D}{\sqrt m}.

Bizonyítási státusz: a tétel standard valószínűségszámítási eredmény; a t-eloszlás a normális átlag és a független χ2\chi^2-eloszlású varianciabecslés hányadosából származik. A feltételeket és az ismételt mintavételi értelmezést a [S02] módszertani oldal tárgyalja. A normalitás itt közelítés, mert a pontosságkülönbség korlátos; kis mm-re az intervallumot nem szabad precíziós garanciaként kezelni.

Az ismételt mintavételi értelmezés: ha a teljes, mm seedes kísérletet sokszor megismételnénk új seedhalmazokkal, a kiszámított intervallumok körülbelül 1−α1-\alpha része tartalmazná μD\mu_D-t. Azt nem állítja, hogy az igazi hatás 95%95\% valószínűséggel éppen a most kapott konkrét intervallumban van.

36.2.4 Hatásintervallum: eredeti kézi példa

Legyen AA a súlyregularizálás nélküli, BB az AdamW weight_decay=1e-4 beállítású futás; a metrika validációs pontosság arányban. Az öt párosított seed eredménye szemléltető számítás, nem mért futás:

seed AA BB Di=Bi−AiD_i=B_i-A_i
1 0.80 0.81 +0.01+0.01
2 0.78 0.83 +0.05+0.05
3 0.84 0.85 +0.01+0.01
4 0.82 0.82 0.000.00
5 0.81 0.84 +0.03+0.03

A különbségvektor m=5m=5 eleme:

ii 1 2 3 4 5
DiD_i 0,010{,}01 0,050{,}05 0,010{,}01 0,000{,}00 0,030{,}03

Átlaga D‾5=0.020\bar D_5=0.020. Az eltérések Di−D‾5=(−0,01;0,03;−0,01;−0,02;0,01)D_i-\bar D_5=(-0{,}01;\ 0{,}03;\ -0{,}01;\ -0{,}02;\ 0{,}01), négyzetösszegük 0.00160.0016, így SD2=0.0016/4=0.0004S_D^2=0.0016/4=0.0004, SD=0.020S_D=0.020. A standard hiba SE=0.020/5≈0.008944\operatorname{SE}=0.020/\sqrt 5\approx 0.008944. A t4,0.975=2.776t_{4,0.975}=2.776 kritikus értékkel a 95%95\%-os hatásintervallum

0.020±2.776⋅0.008944=[−0.0048,0.0448].0.020\pm 2.776\cdot 0.008944=[-0.0048,\;0.0448].

A különbség mértékegysége százalékpontban ugyanez: −0.48-0.48 és +4.48+4.48 százalékpont között. Az intervallum tartalmazza a 00-t, tehát ez negatív eredmény az előre rögzített „BB jobb, mint AA” hipotézisre nézve: a hatást ezzel az öt seeddel nem tudjuk megkülönböztetni a seed-zajtól. A felső határ körülbelül +4,48+4{,}48 százalékpont: e küszöbnél nagyobb pozitív hatások nem szerepelnek a közölt 95%-os konfidenciaintervallumban a modellfeltevések mellett. Ugyanakkor a minta a +3+3 százalékpontos javulást sem zárja ki.

36.2.5 Negatív eredmény és annak határa

A negatív eredmény (negative result) definíciója: az előre specifikált hatásirányra a konfidenciaintervallum tartalmazza a nullát, ezért a nullhipotézist nem vetjük el. Ez hiányzó bizonyíték (absence of evidence), nem a hatás hiányának bizonyítéka (evidence of absence). Ha a gyakorlatban csak a δ\delta küszöbnél nagyobb javulás érdekes, akkor ekvivalencia-intervallumot vagy a CI és δ\delta összevetését kell protokollba foglalni; a fenti intervallum például nem zárja ki a +0.03+0.03 hatást sem.

A negatív eredményt ugyanúgy rögzíteni kell, mint a pozitívat: nyers táblázat, CI, kód és környezet. A kísérleti naplóban a negatív eredmény nem kudarc, hanem a keresési tér egy pontjának korrekt kiértékelése.

36.2.6 Többszörös összehasonlítás

Ha kk konfigurációt vagy több, utólag kiválasztott hipotézist hasonlítunk, és a legkedvezőbb eredményt emeljük ki, a nyers intervallum már nem érvényes kiválasztáskorrekció nélkül. A seedek mint ismétlések száma önmagában nem jelent többszörös hipotézistesztet; akkor lép fel kiválasztási torzítás, ha a legkedvezőbb seed eredményét választjuk ki. A torzítás oka: a kiválasztás maga is véletlen változó. Ugyanez a helyzet, ha több hipotézist tesztelünk ugyanazon a kiértékelő halmazon. A családi hibavalószínűség annak valószínűsége, hogy legalább egy igaz nullhipotézist tévesen elvetünk.

Lemma (Boole–Bonferroni). Tetszőleges E1,…,EkE_1,\ldots,E_k eseményekre

P(⋃j=1kEj)≤∑j=1kP(Ej).P\left(\bigcup_{j=1}^k E_j\right)\le\sum_{j=1}^k P(E_j).

Bizonyítás. Két eseményre P(E1∪E2)=P(E1)+P(E2)−P(E1∩E2)≤P(E1)+P(E2)P(E_1\cup E_2)=P(E_1)+P(E_2)-P(E_1\cap E_2)\le P(E_1)+P(E_2), mert a metszet valószínűsége nemnegatív; kk-ra teljes indukcióval. Ha minden egyedi teszt szintje α/k\alpha/k, akkor az unió valószínűsége legfeljebb k⋅(α/k)=αk\cdot(\alpha/k)=\alpha. ▫\square

Példa: ha k=5k=5 összehasonlítást végzünk és α=0.05\alpha=0.05 családi szintet akarunk, az egyedi intervallumhoz α′=0.01\alpha'=0.01 tartozik. A kézi példában t4,0.995=4.604t_{4,0.995}=4.604, tehát a korrigált intervallum

0.020±4.604⋅0.008944=[−0.0212,0.0612].0.020\pm 4.604\cdot 0.008944=[-0.0212,\;0.0612].

A Bonferroni-korrekció konzervatív, de garantált felső korlát. A helyes gyakorlat a fő összehasonlítás előzetes kijelölése; a többi elemzés feltáró jellegét külön kell jelenteni.

36.2.7 Labor: párosított seed-ismétlés a GlyphLab kis CNN-jén

A labor a 36.1. Állításból kísérleti terv tervét követi: a változó tényező a súlyregularizálás, a kontroll AA a weight_decay=0, a vizsgált BB a weight_decay=1e-4; a metrika validációs pontosság; a döntési szabály a fenti hatásintervallum. A seedlista előre rögzített: 20261020, 20261021, 20261022, 20261023, 20261024. A hardver főút: CPU, float32, NCHW [0,1] bemenet, int64 címke. A compute budget: 55 seed ×2\times 2 konfiguráció ×5\times 5 epoch, kis CPU-n néhány perc.

Inputok: data/images.npy, data/labels.npy, data/metadata.csv. Futtatás előtt a python quickcheck.py ellenőrzi a hash-t, alakot és splitet. A következő szkript munkakönyvtára lab/:

# munkakönyvtár: lab/
# Futtatás: python n142_seed_repeats.py --seeds 20261020,20261021,20261022,20261023,20261024
import argparse, csv
from pathlib import Path
import numpy as np
import torch
from torch import nn
from torch.utils.data import DataLoader, Subset, TensorDataset
from scipy.stats import t as student_t

DATA = Path("data")

def load_split():
    tr, va = [], []
    with open(DATA / "metadata.csv", newline="") as f:
        for row in csv.DictReader(f):
            i = int(row["index"])
            if row["split"] == "train":
                tr.append(i)
            elif row["split"] == "val":
                va.append(i)
    return np.asarray(tr, dtype=np.int64), np.asarray(va, dtype=np.int64)

class TinyCNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Conv2d(1, 8, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Conv2d(8, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
            nn.Flatten(), nn.Linear(16 * 6 * 6, 3))
    def forward(self, x):
        return self.net(x)

def train_eval(seed, X, y, tr_idx, va_idx, weight_decay, epochs=5, lr=1e-3):
    torch.manual_seed(seed)  # CPU float32 főút; ez adja a párosítást
    model = TinyCNN()
    opt = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=weight_decay)
    ds = TensorDataset(torch.from_numpy(X), torch.from_numpy(y))
    dl = DataLoader(Subset(ds, tr_idx), batch_size=16, shuffle=True)
    for _ in range(epochs):
        model.train()
        for xb, yb in dl:
            opt.zero_grad()
            loss = nn.functional.cross_entropy(model(xb), yb)
            loss.backward()
            opt.step()
    model.eval()
    with torch.no_grad():
        xv = torch.from_numpy(X[va_idx])
        yv = torch.from_numpy(y[va_idx])
        acc = (model(xv).argmax(1) == yv).float().mean().item()
    return acc

def paired_ci(diffs, alpha=0.05):
    diffs = np.asarray(diffs, dtype=np.float64)
    m = diffs.size
    mean_d = float(diffs.mean())
    sd = float(diffs.std(ddof=1))
    se = sd / np.sqrt(m)
    tcrit = float(student_t.ppf(1 - alpha / 2, df=m - 1))
    return mean_d, se, mean_d - tcrit * se, mean_d + tcrit * se, m - 1

def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--seeds", default="20261020,20261021,20261022,20261023,20261024")
    ap.add_argument("--epochs", type=int, default=5)
    ap.add_argument("--alpha", type=float, default=0.05)
    ap.add_argument("--out", default="")
    args = ap.parse_args()
    seeds = [int(s) for s in args.seeds.split(",")]
    X = np.load(DATA / "images.npy").astype(np.float32)  # (360,1,24,24)
    y = np.load(DATA / "labels.npy").astype(np.int64)    # (360,)
    tr_idx, va_idx = load_split()
    rows = []
    for s in seeds:
        a = train_eval(s, X, y, tr_idx, va_idx, weight_decay=0.0, epochs=args.epochs)
        b = train_eval(s, X, y, tr_idx, va_idx, weight_decay=1e-4, epochs=args.epochs)
        rows.append((s, a, b, b - a))
        print(f"seed={s} A={a:.4f} B={b:.4f} d={b-a:+.4f}")
    mean_d, se, low, high, df = paired_ci([r[3] for r in rows], args.alpha)
    print(f"mean d={mean_d:+.4f} SE={se:.4f} df={df} CI=[{low:.4f},{high:.4f}]")
    if args.out:
        with open(args.out, "w", newline="") as f:
            w = csv.writer(f)
            w.writerow(["seed", "A_acc", "B_acc", "d_B_minus_A"])
            w.writerows(rows)

if __name__ == "__main__":
    main()

A következő kimeneti táblázat jelölt szemléltetés, nem elvégzett futás; a számok a kézi példát ismétlik a kimeneti forma bemutatására:

seed=20261020 A=0.8000 B=0.8100 d=+0.0100
seed=20261021 A=0.7800 B=0.8300 d=+0.0500
seed=20261022 A=0.8400 B=0.8500 d=+0.0100
seed=20261023 A=0.8200 B=0.8200 d=+0.0000
seed=20261024 A=0.8100 B=0.8400 d=+0.0300
mean d=+0.0200 SE=0.0089 df=4 CI=[-0.0048,0.0448]

Értelmezés: a nyers táblázat mind az öt sort közli, nem csak a legjobb seedet. A CI tartalmazza a nullát, tehát a weight decay hatása ezzel a protokollal nem különböztethető meg a seed-zajtól; a közölt 95%-os intervallum a +4,48+4{,}48 százalékpontnál nagyobb javulást nem tartalmazza, miközben a mérsékelt javulás és a nulla hatás is összeegyeztethető vele a feltevések mellett. A hardver szerepe itt rögzített: a 24.2. CPU/GPU profiling és helyes időmérés alfejezetben tanult mérési logikához hasonlóan a hardver a protokoll része, és a CPU/GPU vagy AMP-váltás nem a seed-szórás része, hanem külön környezeti tényező, amelyet külön mátrixban kell jelenteni.

36.2.8 Feladatok

F1 (fogalmi, nehézség 1). A GlyphLab train splitje 120 jelenetből származó 240 képet tartalmaz, és egy kísérlet öt seeddel tanít ugyanazon a spliten. Mi a független egység a seed-ismétlésben, és miért nem a kép vagy a jelenet? Átadandó: két-három mondatos indoklás a három jelölt megkülönböztetésével.

F2 (levezetési, nehézség 2). Adott m=6m=6 párosított seed különbsége, Di=Bi−AiD_i=B_i-A_i:

ii 1 2 3 4 5 6
DiD_i −0,02-0{,}02 −0,01-0{,}01 0,000{,}00 −0,03-0{,}03 −0,01-0{,}01 −0,04-0{,}04

Számítsa ki a 95%95\%-os hatásintervallumot, és döntsön a „BB jobb, mint AA” előre rögzített hipotézisről. Átadandó: D‾\bar D, SDS_D, SE\operatorname{SE}, tt-kritikus érték, CI és egy mondatos döntés.

F3 (implementációs, nehézség 2). Írjon egy paired_effect(diffs, alpha) függvényt, amely float64 bemenetből az átlagot, standard hibát és a kétoldali CI határait adja vissza; a t-kvantilishez használhatja a scipy.stats.t.ppf függvényt. Ellenőrizze az F2 példáján. Átadandó: futtatható kód, a visszatérési értékek, shape-ellenőrzés: diffs alakja (m,), az eredmény négy skalár, a df m-1.

F4 (hibakeresési, nehézség 2). Valaki ezt a kódot írja:

sd = np.std(diffs)      # a population-szórás
se = sd / np.sqrt(len(diffs))

Mi a hiba, mi a következménye a CI szélességére, és hogyan javítandó? Átadandó: a hiba oka, iránya és a javított sor, majd a visszaellenőrzés az F2 adatain.

F5 (kísérleti/transzfer, nehézség 3). Tervezze meg három konfiguráció — baseline, dropout 0.20.2, weight decay 1e−41e-4 — összehasonlítását öt párosított seeddel a GlyphLab-on. Adja meg a fő összehasonlítást, a többszörös összehasonlítás kezelését, a negatív eredmény definícióját és a nyers átadandó táblázatot. Átadandó: protokoll-leírás, indoklás és következtetési korlát.

36.2.9 Megoldások és indoklás

F1. A független egység a seed-futás, mert az ismétlés a tanítási véletlent változtatja, miközben a split rögzített. A kép nem független, mert minden futás ugyanazokat a képeket látja; a jelenet sem, mert a scene-struktúra az adatmintavétel egysége lenne, de itt nem sorsolunk új splitet. Ha új splitet is sorsolnánk, a független egység a (seed, split) pár lenne.

F2. Részletes számítás:

∑Di=−0.11,D‾6=−0.11/6≈−0.018333.\sum D_i=-0.11,\qquad \bar D_6=-0.11/6\approx -0.018333.

Az eltérések Di−D‾D_i-\bar D rendre −0.001667-0.001667, 0.0083330.008333, 0.0183330.018333, −0.011667-0.011667, 0.0083330.008333, −0.021667-0.021667; négyzetösszegük ≈0.0010833\approx 0.0010833. Így

SD2=0.00108335≈0.00021667,SD≈0.01472.S_D^2=\frac{0.0010833}{5}\approx 0.00021667,\qquad S_D\approx 0.01472.

A standard hiba SE=0.01472/6≈0.006009\operatorname{SE}=0.01472/\sqrt 6\approx 0.006009. A kritikus érték t5,0.975=2.5706t_{5,0.975}=2.5706. A CI:

−0.018333±2.5706⋅0.006009=[−0.03378,−0.00288].-0.018333\pm 2.5706\cdot 0.006009=[-0.03378,\;-0.00288].

A CI nem tartalmazza a 00-t, ezért a „BB jobb, mint AA” hipotézis itt éppen elvethető: a jelölt irány szerint D=B−AD=B-A, és a teljes intervallum negatív, tehát a minta szerint BB szignifikánsan rosszabb ebben a szemléltető példában.

F3. Egy lehetséges megoldás:

import numpy as np
from scipy.stats import t as student_t

def paired_effect(diffs, alpha=0.05):
    d = np.asarray(diffs, dtype=np.float64)   # alak: (m,)
    m = d.shape[0]                             # skalár
    mean_d = d.mean()                          # skalár
    sd = d.std(ddof=1)                         # skalár
    se = sd / np.sqrt(m)                       # skalár
    tcrit = student_t.ppf(1 - alpha / 2, df=m - 1)
    return mean_d, se, mean_d - tcrit * se, mean_d + tcrit * se

diffs = [-0.02, -0.01, 0.00, -0.03, -0.01, -0.04]
mean_d, se, low, high = paired_effect(diffs)
print(mean_d, se, low, high)
# -0.018333... 0.006009... -0.03378 -0.00288

Ellenőrzés: diffs hossza 66, a df 55; a négy visszatérési érték skalár; a CI határai 10−310^{-3} abszolút toleranciával egyeznek az F2 értékeivel.

F4. Az np.std alapértelmezett ddof=0 értéke a populációs szórást adja, amely 1/m1/m-es osztást használ; a mintából becsült szóráshoz 1/(m−1)1/(m-1) osztás kell. Következmény: a szórás és a standard hiba kisebb a szükségesnél, ezért a CI túl szűk, és a fals pozitív arány megnő. Javítás: sd = np.std(diffs, ddof=1). Visszaellenőrzés az F2 adatain: ddof=0 esetén SD≈0.01344S_D\approx 0.01344, ddof=1 esetén 0.014720.01472; a helyes CI szélesebb.

F5. Protokollminta: a fő összehasonlítás a dropout 0.20.2 és a baseline között párosított seedekkel, öt előre rögzített seeddel; a weight decay csak másodlagos feltáró elem. A három összehasonlításhoz a Bonferroni-korrekció α′=0.05/3≈0.0167\alpha'=0.05/3\approx 0.0167 egyedi szintet ad, tehát a fő CI 98.33%98.33\%-os. Az átadandó nyers táblázat minden seedre három pontosságot és a fő különbséget tartalmazza. Negatív eredmény: a fő CI tartalmazza a nullát, tehát a dropout hatását nem tudjuk megkülönböztetni a seed-zajtól. Következtetési korlát: a GlyphLab adat nem természetes képi benchmark, és a hardver CPU/float32; GPU-ra vagy más adatra az eredmény nem vihető át bizonyítás nélkül.

36.2.10 Tipikus tévedés ellenpéldával

Gyakori hiba, hogy tíz seedből csak a legjobbat jelentik, és azt állítják: „a módszer pontossága 0.910.91”. Ellenpélda: a tíz nyers pontosság legyen 0.80,0.81,0.80,0.84,0.82,0.83,0.80,0.82,0.81,0.910.80,0.81,0.80,0.84,0.82,0.83,0.80,0.82,0.81,0.91; a legjobb 0.910.91, de az átlag ≈0.824\approx 0.824, és a tapasztalati szórás alapján a seed-átlag CI-ja nem tartalmazza a 0.910.91-et. A kiválasztott futás a maximum statisztikája, amelynek eloszlása felfelé torzított; a stabil teljesítmény jellemzéséhez az átlagot és a hatásintervallumot kell közölni.

36.2.11 Önellenőrzés és visszahívás

A kézi számítás ellenőrzése: a df mindig m−1m-1, az ötös példában 44; a CI szélessége mm növelésével m\sqrt m-szeres ütemben szűkül; a tt-kritikus érték nagyobb a normális 1.961.96-nál kis mm-re. A 35.2. Magyarázat sanity check alfejezetben tanult randomizált kontroll logikája itt a seed-randomizálásban tér vissza: a kontroll nem bizonyítja a hatás mechanizmusát, csak a modellfüggőséget teszteli. A 32.2. Scaled dot-product attention alfejezetben használt alakellenőrzés itt is kötelező: a különbségvektor alakja (m,)(m,), a standard hiba skalár. A 24.2. CPU/GPU profiling és helyes időmérés alfejezetben rögzített mérési fegyelem szerint a hardvert expliciten rögzítjük, és a hardverváltást nem számoljuk bele a seed-szórásba.

36.2.12 Rövid összefoglaló

A seed-ismétlés független egysége a teljes futás, nem a kép vagy a jelenet. Párosított seedekkel azonos véletlen környezetben mérjük a két konfigurációt, és a páronkénti különbségek átlagát, standard hibáját, valamint tt-alapú hatásintervallumát közöljük. A nulla befoglalása negatív eredmény: hiányzó bizonyíték, nem a hatás hiányának bizonyítéka. Több összehasonlítás esetén a családi hiba a Boole–Bonferroni korláttal kontrollálható. A labor öt előre rögzített seeddel, CPU/float32 főúton tanít kis CNN-t, és a nyers futásokat teljes táblázatban adja át.

36.2.13 Következő alkalmazás

A 36.3. Szakirodalmi reprodukció és attribúció a szakirodalmi reprodukciót és attribúciót vizsgálja: a „reprodukáltuk” állítás ott csak akkor lesz megalapozott, ha a cikk protokollja mellett a seed-ismétlést, a nyers futásokat és a hatásintervallumot is közöljük a forrás pontos megjelölésével.

36.2.14 Felhasznált források