8.4 II. ellenőrző pont: korrekt tanulási állítás

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

Ez az ellenőrzőpont egyetlen kérdés köré szervezi az eddigi anyagot: milyen feltételek mellett állítható, hogy a megtanult modell nemcsak a tanítóhalmazon, hanem az új mintán is jól teljesít? A 8.3. Kapacitás, regularizálás és modellválasztás alfejezetben láttuk, hogy a kapacitás, a regularizálás és a modellválasztás protokollja mind a tanulási állítás feltételrendszerét alkotják. Most ezeket egyetlen, teljes specifikációvá zárjuk össze.

É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 itt a bizonyítékjegyzék; a súlypont a D3 és a D5.

A szükséges előismeret: a 6.1. Objektív, reguláris tag és gradienslépés alfejezetben bevezetett empirikus kockázat, a 6.3. Sztochasztikus és minibatch gradiens alfejezetben tárgyalt minibatch gradiens, a 7.4. Numerikus stabilitás és jelentésmegőrző implementáció alfejezetben bizonyított stabil veszteségszámítás, valamint a 4.4. I. ellenőrző pont: matematika és kód megfelelése alfejezetben felépített gradiensellenőrzési protokoll. A 8.3. Kapacitás, regularizálás és modellválasztás nested choice és a felfelé torzított validációs maximum gondolata közvetlenül folytatódik itt.

Induló becslés. Legyen a hipotézisosztály mérete |H|=4|H|=4, a minta mérete m=64m=64, a konfidenciaszint δ=0,05\delta=0{,}05. Mielőtt levezetjük, becsüljük meg: mekkora egyszerű, adattól függetlenül számolható sávot kaphatunk az általánosítási hibára? A választ a következő pont után ellenőrizzük.

8.4.2 Fogalmak: eloszlás, kockázat, cél, gradiens, sztochasztikus frissítés, független teszt

Distribution (eloszlás). Legyen a megfigyelés egy Z=(X,Y)Z=(X,Y) pár, ahol X∈𝒳X\in\mathcal X a bemenet, Y∈𝒴Y\in\mathcal Y a cél. A tanulási feladat mögötti feltételezés egy közös DD eloszlás a párokon. A tanítóhalmaz Sm=((x1,y1),…,(xm,ym))S_m=((x_1,y_1),\ldots,(x_m,y_m)), ahol a párok függetlenek és azonos eloszlásúak DD szerint (iid). A tesztminta ugyanebből a DD-ből származik, de diszjunkt SmS_m-től. A DD a gyakorlatban nem ismert; ami ismert, az a minta.

Risk (kockázat). Az f:𝒳→𝒴f:\mathcal X\to\mathcal Y prediktor kockázata a várható veszteség:

RD(f)=𝔼(X,Y)∼D[ℓ(f(X),Y)].R_D(f)=\mathbb E_{(X,Y)\sim D}\left[\ell(f(X),Y)\right] .

A kockázat egyetlen valós szám, a veszteség dimenziójával. Az empirikus kockázat a tanítóhalmazon vett átlag:

R̂m(f)=1m∑i=1mℓ(f(xi),yi).\hat R_m(f)=\frac1m\sum_{i=1}^m \ell(f(x_i),y_i) .

A két mennyiség szerepe eltér: R̂m\hat R_m az, amit számolni tudunk, RDR_D az, amiről állítani szeretnénk. A 8.1. Kockázat, mintavétel és baseline alfejezetben tárgyalt baseline-tól való eltérés mindig RDR_D és R̂m\hat R_m közötti rés becslésének minőségén múlik.

Objective (célfüggvény). A tanítás a paraméterezett fwf_w modellen egy JλJ_\lambda célfüggvény minimalizálását jelenti. A 6.1. Objektív, reguláris tag és gradienslépés és 8.3. Kapacitás, regularizálás és modellválasztás jelölése szerint:

Jλ(w)=R̂m(fw)+λ2∥w∥22,J_\lambda(w)=\hat R_m(f_w)+\frac{\lambda}{2}\lVert w\rVert_2^2 ,

ahol λ≥0\lambda\ge0 a súlyregularizáló együttható. A célfüggvény kettős: az első tag az adathoz való illeszkedést, a második a kapacitáskorlátot képviseli. A λ\lambda a 8.3. Kapacitás, regularizálás és modellválasztás bias–variance kompromisszum operatív formája.

Gradient (gradiens). A gradiens a ∇wJλ(w)\nabla_w J_\lambda(w) vektor, alakja megegyezik ww alakjával. A gyakorlatban a veszteség összegéből vagy átlagából indulunk ki. Átlagos veszteség esetén, ha az ii-edik minta egyedi vesztesége ℓi\ell_i, a gradiens:

∇wJλ(w)=1m∑i=1m∇wℓi+λw.\nabla_w J_\lambda(w)=\frac1m\sum_{i=1}^m \nabla_w\ell_i+\lambda w .

Az átlag 1/m1/m faktora a 6.3. Sztochasztikus és minibatch gradiens alfejezetben tárgyalt batchskála miatt nem hagyható el, ha a tanulási rátát egy adott konvencióra hangoljuk.

Stochastic update (sztochasztikus frissítés). Az SmS_m-ből vett BtB_t minibatch az {1,…,m}\{1,\ldots,m\} indexek véletlen, b=|Bt|b=|B_t| méretű részhalmaza. A minibatch gradiens:

gt=1|Bt|∑i∈Bt∇wℓi+λwt,g_t=\frac1{|B_t|}\sum_{i\in B_t}\nabla_w\ell_i+\lambda w_t ,

és a frissítés wt+1=wt−ηtgtw_{t+1}=w_t-\eta_t g_t. A frissítés azért sztochasztikus, mert BtB_t véletlen; a teljes ∇wJλ\nabla_w J_\lambda helyett annak egy közelítését használjuk. A sztochasztikus gradiens gtg_t várható értéke a feltételes várható érték linearitása miatt ∇wJλ(wt)\nabla_w J_\lambda(w_t), ha a regularizáló tagot is beleszámítjuk.

Independent test (független teszt). A tesztminta StestS_{test}, mérete ntestn_{test}, diszjunkt a tanító- és validációs halmaztól. A teszt kockázatbecslője:

R̂test(f)=1ntest∑(x,y)∈Stestℓ(f(x),y).\hat R_{test}(f)=\frac1{n_{test}}\sum_{(x,y)\in S_{test}}\ell(f(x),y) .

Ha ff független StestS_{test}-től, akkor R̂test(f)\hat R_{test}(f) torzítatlan becslése RD(f)R_D(f)-nek:

𝔼[R̂test(f)]=1ntest∑i=1ntest𝔼[ℓ(f(Xi),Yi)]=RD(f)\mathbb E\left[\hat R_{test}(f)\right] =\frac1{n_{test}}\sum_{i=1}^{n_{test}}\mathbb E\left[\ell(f(X_i),Y_i)\right] =R_D(f)

a függetlenség és az azonos eloszlás miatt. Ez a torzítatlanság azonnal megszűnik, ha a modellt a teszt eredménye alapján választjuk ki; ezt a 8.3. Kapacitás, regularizálás és modellválasztás adaptivitási protokollja már kimondta.

8.4.3 A kiválasztott elméleti állítás és feltételeinek ellenőrzése

A jelen egység levezetési kötelezettsége: vegyünk egy konkrét elméleti állítást, soroljuk fel az összes feltételét, és ellenőrizzük azokat egy példán. A kiválasztott állítás a véges hipotézisosztály egyenletes korlátja, amelyet a 8.2. Véges hipotézisosztály egyenletes korlátja vezetett le a Hoeffding-koncentrációból és az uniókorlátból.

Tétel (véges HH egyenletes általánosítási korlátja, Hoeffding-alapú). Tegyük fel, hogy

  1. H={h1,…,hN}H=\{h_1,\ldots,h_N\} véges, előre rögzített hipotézisosztály;
  2. a minta SmS_m iid a DD eloszlásból;
  3. a veszteség minden h∈Hh\in H és minden (x,y)(x,y) párra a [0,1][0,1] intervallumba esik;
  4. a δ∈(0,1)\delta\in(0,1) konfidenciaszint előre rögzített.

Ekkor:

P(∀h∈H:RD(h)≤R̂m(h)+log|H|+log(1/δ)2m)≥1−δ.P\left(\forall h\in H:\; R_D(h)\le \hat R_m(h)+\sqrt{\frac{\log |H|+\log(1/\delta)}{2m}}\right)\ge 1-\delta .

A bizonyítás két lépésből áll. (i) Egyetlen rögzített hh-ra a [0,1][0,1]-be eső veszteségek független összegére alkalmazott Hoeffding-állítás [P27] adja P(RD(h)−R̂m(h)≥ϵ)≤e−2mϵ2P(R_D(h)-\hat R_m(h)\ge\epsilon)\le e^{-2m\epsilon^2}. (ii) Az uniókorlát szerint P(maxh∈H(RD(h)−R̂m(h))≥ϵ)≤|H|e−2mϵ2P(\max_{h\in H}(R_D(h)-\hat R_m(h))\ge\epsilon)\le |H|e^{-2m\epsilon^2}. A δ=|H|e−2mϵ2\delta=|H|e^{-2m\epsilon^2} egyenletet ϵ\epsilon-ra megoldva kapjuk a tétel sávját. A teljes Hoeffding-bizonyítás nem része ennek a kéziratnak; a [P27] eredeti kiadói rekordja ellenőrzött, de a bizonyítás szövege nem lett olvasva. Az uniókorlátos levezetés saját, a 8.2. Véges hipotézisosztály egyenletes korlátja alfejezetben történt meg.

A tétel kimondásakor különösen fontos, mit nem állítunk: nem állítja, hogy a tanult ĥ\hat h kockázata alacsony; csak azt, hogy a kockázat nem haladja meg az empirikus értéket plusz a sávot, 1−δ1-\delta valószínűséggel. Ha R̂m(ĥ)=0,9\hat R_m(\hat h)=0{,}9, a korlát a 0,9+ϵ0{,}9+\epsilon értékre vonatkozik, ami használhatatlan lehet.

Feltétel-ellenőrzés a példán. Válasszuk a következő játékfeladatot. Legyen a bemenettér 𝒳=[−1,1]2\mathcal X=[-1,1]^2, a cél 𝒴={0,1}\mathcal Y=\{0,1\}. A generáló DD: X∼Uniform([−1,1]2)X\sim\mathrm{Uniform}([-1,1]^2), és determinisztikus címke Y=1[X1>0]Y=1[X_1>0]. A hipotézisosztály négy előre rögzített tengelyirányú küszöbszabály:

h1(x)=1[x1>0],h2(x)=1[x1≤0],h3(x)=1[x2>0],h4(x)=1[x2≤0].h_1(x)=1[x_1>0],\quad h_2(x)=1[x_1\le0],\quad h_3(x)=1[x_2>0],\quad h_4(x)=1[x_2\le0] .

A feltételek ellenőrzése:

  1. HH véges és előre rögzített: |H|=4|H|=4, a négy szabály a minta generálása előtt adott. A feltétel teljesül.
  2. A minta iid: az XiX_i-k független egyenletesek, és YiY_i determinisztikus függvénye XiX_i-nek, ezért a párok függetlenek és azonos eloszlásúak. A feltétel teljesül.
  3. A veszteség [0,1][0,1]-be esik: a 0/1 veszteséget használjuk, amelynek értéke mindig 0 vagy 1. A feltétel teljesül.
  4. A δ=0,05\delta=0{,}05 konfidenciaszint a számítás előtt rögzített. A feltétel teljesül.

A valódi kockázatok ebben a modellben zárt alakban ismertek: RD(h1)=0R_D(h_1)=0, mert h1h_1 a generáló szabály; RD(h2)=1R_D(h_2)=1, mert h2h_2 mindenütt ellentmond; RD(h3)=RD(h4)=0,5R_D(h_3)=R_D(h_4)=0{,}5, mert X1X_1 és X2X_2 függetlenek, így a második koordináta előjele a címkétől független. Ez a tudás a szimulációban használható, valós adatnál viszont nem áll rendelkezésre; ezt a különbséget a laborban kifejezetten megőrizzük.

8.4.4 Kézi példa és minimális kód

Kézi példa. Legyen m=4m=4, δ=0,05\delta=0{,}05. A sáv:

log4+log208=1,3863+2,99578=0,740.\sqrt{\frac{\log 4+\log 20}{8}} =\sqrt{\frac{1{,}3863+2{,}9957}{8}} =0{,}740 .

A minta legyen:

x1=(0,2,0,3),x2=(−0,4,0,1),x3=(0,6,−0,7),x4=(−0,2,−0,5),x_1=(0{,}2,0{,}3),\quad x_2=(-0{,}4,0{,}1),\quad x_3=(0{,}6,-0{,}7),\quad x_4=(-0{,}2,-0{,}5),

y1=1,y2=0,y3=1,y4=0.y_1=1,\quad y_2=0,\quad y_3=1,\quad y_4=0 .

hh döntés R̂4\hat R_4 RDR_D
h1h_1 x1>0x_1>0 00 00
h2h_2 x1≤0x_1\le0 11 11
h3h_3 x2>0x_2>0 0,50{,}5 0,50{,}5
h4h_4 x2≤0x_2\le0 0,50{,}5 0,50{,}5

A tétel garantálja, hogy minden hh-ra RD(h)≤R̂4(h)+0,740R_D(h)\le\hat R_4(h)+0{,}740. A négy egyenlőtlenség ezen az egyetlen realizáción teljesül. Ez azonban nem a 95%95\%-os lefedettség bizonyítéka: a tétel valószínűségi állítás, egyetlen realizáció nem igazolja. A lefedettséget Monte Carlo szimulációval tudjuk empirikusan vizsgálni, amelyet a labor kódja tartalmaz.

Minimális kód a korlát és a lefedettség kiszámítására.

import numpy as np


def uniform_bound(n_h, m, delta):
    return float(np.sqrt((np.log(n_h) + np.log(1.0 / delta)) / (2.0 * m)))


def simulate_coverage(n_sim=2000, m=64, delta=0.05, seed=123):
    rng = np.random.default_rng(seed)
    b = uniform_bound(4, m, delta)
    true_risk = np.array([0.0, 1.0, 0.5, 0.5])
    covered = 0
    for _ in range(n_sim):
        X = rng.uniform(-1.0, 1.0, size=(m, 2))
        y = (X[:, 0] > 0).astype(np.float64)
        pred = np.vstack([
            X[:, 0] > 0,
            X[:, 0] <= 0,
            X[:, 1] > 0,
            X[:, 1] <= 0,
        ])
        err = (pred != y).mean(axis=1)
        if np.all(true_risk <= err + b):
            covered += 1
    return covered / n_sim, b

A uniform_bound(4, 64, 0.05) értéke 0,1850{,}185, ami az induló becslésre adott válasz. A szimuláció a kockázatok ismeretében számolja a lefedettséget; a várt érték legalább 0,950{,}95.

8.4.5 Labor: end-to-end osztályozási kísérlet bizonyítékjegyzékkel

A labor kis logisztikus regressziót tanít szintetikus 2D adaton. Szándékosan nem a GlyphLab-képeket használjuk, mert azok a CNN-részekben kerülnek elő; itt a cél a 7.4. Numerikus stabilitás és jelentésmegőrző implementáció alfejezetből ismert stabil BCE, a 4.4. I. ellenőrző pont: matematika és kód megfelelése gradiensellenőrzési elve és a 8.3. Kapacitás, regularizálás és modellválasztás független tesztelési protokoll összezárása.

Munkakönyvtár és futtatás. A fájl: lab/n032/checkpoint_lab.py. Parancs:

python lab/n032/checkpoint_lab.py

A kód végig CPU-n fut, NumPy-val; nincs GPU- vagy keretrendszerfüggés.

import json
import numpy as np

SEED = 20261020
rng = np.random.default_rng(SEED)


def bce_logits_stable_f64(z, y):
    """z: (N,) logits, y: (N,) float cél {0,1}. Átlagos BCE, stabil."""
    z = np.asarray(z, dtype=np.float64)
    y = np.asarray(y, dtype=np.float64)
    return float(np.mean(np.maximum(z, 0) - y * z + np.log1p(np.exp(-np.abs(z)))))


def make_data(n, rng):
    X = rng.normal(0.0, 1.0, size=(n, 2)).astype(np.float32)
    logit_p = (2.0 * X[:, 0] - X[:, 1]).astype(np.float32)
    p = 1.0 / (1.0 + np.exp(-logit_p))
    y = (rng.random(n) < p).astype(np.float32)
    return X, y

A tanítási lépés float32-ben, a 7.4. Numerikus stabilitás és jelentésmegőrző implementáció stabil BCE-formulát a kiértékelésnél float64-ben használjuk. A paramétergradiens a logitokra vett σ(z)−y\sigma(z)-y vektorból adódik; ez a 4.4. I. ellenőrző pont: matematika és kód megfelelése affin backward speciális esete logisztikus célra.

def train_one(X, y, lr, epochs, batch, lam):
    n, d = X.shape
    w = np.zeros(d, dtype=np.float32)
    b = np.float32(0.0)
    for _ in range(epochs):
        idx = rng.permutation(n)
        for start in range(0, n, batch):
            bi = idx[start:start + batch]
            Xb = X[bi].astype(np.float32)
            yb = y[bi]
            z = Xb @ w + b
            p = 1.0 / (1.0 + np.exp(-z))
            g = (p - yb) / len(bi)
            gw = Xb.T @ g + lam * w
            gb = np.sum(g)
            w -= lr * gw
            b -= lr * gb
    return w, b

A gradiensellenőrzés a 4.4. I. ellenőrző pont: matematika és kód megfelelése protokoll szerint: kis float64 batch, középső differencia, ϵ=10−6\epsilon=10^{-6}, stabil abszolút/relatív hibamérce.

def loss_and_grad(w, b, X, y, lam):
    z = X @ w + b
    p = 1.0 / (1.0 + np.exp(-z))
    loss = bce_logits_stable_f64(z, y) + 0.5 * lam * float(w @ w)
    g = (p - y) / len(y)
    return loss, X.T @ g + lam * w, np.sum(g)


def grad_check(X8, y8, lam=1e-3):
    w0 = rng.normal(0.0, 0.5, size=2)
    b0 = np.float64(0.2)
    _, gw, gb = loss_and_grad(w0, b0, X8, y8, lam)
    max_abs = 0.0
    for j in range(2):
        wp, wm = w0.copy(), w0.copy()
        wp[j] += 1e-6
        wm[j] -= 1e-6
        lp, _ = loss_and_grad(wp, b0, X8, y8, lam)[:2]
        lm, _ = loss_and_grad(wm, b0, X8, y8, lam)[:2]
        num = (lp - lm) / (2e-6)
        max_abs = max(max_abs, abs(num - gw[j]))
    bp, bm = b0 + 1e-6, b0 - 1e-6
    num_b = (loss_and_grad(w0, bp, X8, y8, lam)[0]
             - loss_and_grad(w0, bm, X8, y8, lam)[0]) / (2e-6)
    max_abs = max(max_abs, abs(num_b - gb))
    return float(max_abs)

A kísérleti protokoll: train 1800, valid 200, test 2000 minta, egyetlen adatgeneráló seeddel. A validáción két learning rate közül választunk; a tesztet a kiválasztás után egyszer hívjuk meg.

def main():
    n_train, n_val, n_test = 1800, 200, 2000
    Xt, yt = make_data(n_train, rng)
    Xv, yv = make_data(n_val, rng)
    Xs, ys = make_data(n_test, rng)

    # Baseline: a tanító címkearány mint konstans valószínűség
    q = float(np.mean(yt))
    base_ce = -float(np.mean(ys * np.log(q) + (1.0 - ys) * np.log(1.0 - q)))
    base_acc = float(max(np.mean(ys), 1.0 - np.mean(ys)))

    results = {}
    for lr in (0.1, 0.5):
        w, b = train_one(Xt, yt, lr=lr, epochs=50, batch=16, lam=1e-3)
        zv = Xv.astype(np.float32) @ w + b
        val_loss = bce_logits_stable_f64(zv, yv)
        results[lr] = {"w": w, "b": b, "val_loss": val_loss}

    best_lr = min(results, key=lambda k: results[k]["val_loss"])
    w, b = results[best_lr]["w"], results[best_lr]["b"]
    zs = Xs.astype(np.float32) @ w + b
    test_ce = bce_logits_stable_f64(zs, ys)
    test_acc = float(np.mean((zs > 0.0) == (ys > 0.0)))

    X8 = Xt[:8].astype(np.float64)
    y8 = yt[:8].astype(np.float64)
    grad_err = grad_check(X8, y8)

    cov, band = simulate_coverage(n_sim=2000, m=64, delta=0.05, seed=123)

    manifest = {
        "theorem": "finite_H_uniform_bound",
        "assumptions_checked": [
            "finite fixed H", "iid sample", "loss in [0,1]", "delta fixed"
        ],
        "bound_band_m64_delta005": band,
        "coverage_simulation_p2000": cov,
        "baseline": {"ce": base_ce, "acc": base_acc},
        "chosen_lr": best_lr,
        "final_test": {"ce": test_ce, "acc": test_acc},
        "grad_check_max_abs_err": grad_err,
        "seed": SEED,
        "device": "CPU",
        "dtype": "float32 training, float64 checks",
    }
    with open("lab/n032/evidence.json", "w", encoding="utf-8") as fh:
        json.dump(manifest, fh, indent=2)
    print(json.dumps(manifest, indent=2))

A kódból számolt, jelölt szemléltető kimenet — ezt a generátor nem futtatta, a tényleges futást a bizonyítékjegyzékbe kell írni:

{
  "bound_band_m64_delta005": 0.185,
  "coverage_simulation_p2000": 0.97,
  "baseline": {"ce": 0.69, "acc": 0.62},
  "chosen_lr": 0.1,
  "final_test": {"ce": 0.41, "acc": 0.83},
  "grad_check_max_abs_err": 2.1e-09
}

Értelmezés. A lefedettség 0,970{,}97 egyetlen szimulációs becslés, 20002000 ismétlésből; a binomiális szórás körülbelül 0,97⋅0,03/2000≈0,004\sqrt{0{,}97\cdot0{,}03/2000}\approx0{,}004, tehát az érték összhangban van az elméleti ≥0,95\ge0{,}95 korláttal. Ez empirikus, nem bizonyítás. A teszt BCE 0,410{,}41 a baseline 0,690{,}69-hez képest; ez a konkrét adatgenerálóra vonatkozó, egyszer mért eredmény, nem általános modellképesség-állítás. A tesztet a validációs választás lezárása után egyszer értékeltük, tehát a 8.3. Kapacitás, regularizálás és modellválasztás adaptivitási tilalma teljesül.

8.4.6 F1–F5 feladatok

F1 (fogalmi, nehézség 1, előfeltétel: 8.1. Kockázat, mintavétel és baseline). Definiálja a RD(f)R_D(f) kockázat és az R̂m(f)\hat R_m(f) empirikus kockázat különbségét. Adjon konkrét elrendezést, amelyben R̂m(f)=0\hat R_m(f)=0, de RD(f)=0,5R_D(f)=0{,}5. Átadandó: definíciók és egy leírt konstrukció a kockázatértékek indoklásával.

F2 (levezetési, nehézség 1, előfeltétel: 8.2. Véges hipotézisosztály egyenletes korlátja). Legyen |H|=100|H|=100, m=500m=500, δ=0,01\delta=0{,}01. Számítsa ki a véges HH korlát sávját, és mondja ki a garantált állítást szövegesen. Átadandó: a sáv numerikus értéke és az állítás pontos megfogalmazása.

F3 (implementációs, nehézség 1, előfeltétel: 7.4. Numerikus stabilitás és jelentésmegőrző implementáció). Írjon bce_logits_stable(z, y) függvényt, és ellenőrizze a (z,y)=(1000,0)(z,y)=(1000,0) és (−1000,1)(-1000,1) pontokon. Hasonlítsa össze a naiv log(σ(z))\log(\sigma(z))-alapú formulával. Átadandó: kód és a négy kimenet magyarázattal.

F4 (hibakeresési, nehézség 2, előfeltétel: 8.3. Kapacitás, regularizálás és modellválasztás). Egy hallgató 20 tanulási rátát próbál ki a validációs halmazon, a legjobb modellt a tesztre értékeli, majd a kapott tesztpontosságot „a modell várható pontosságának bizonyítékaként” írja a jelentésbe. Melyik állítás hibás, mi a torzítás iránya, és mi a helyes protokoll? Átadandó: a hiba lokalizálása, a torzítás iránya indoklással és a javított eljárás.

F5 (kísérlettervezési, nehézség 3, előfeltétel: 8.2. Véges hipotézisosztály egyenletes korlátja és 8.3. Kapacitás, regularizálás és modellválasztás). Tervezze meg a lefedettségi szimuláció teljes protokollját a fenti négy hipotézisre: mi a generáló eloszlás, a minta mérete, az ismétlésszám, a mért metrika, a várható kimenet és a következtetési határ? Átadandó: protokoll leírása, a standard hiba képlete és az érvényességi korlát kimondása.

8.4.7 Megoldások és indoklás

F1. A RD(f)R_D(f) a teljes DD eloszlás feletti várható veszteség; R̂m(f)\hat R_m(f) a mm elemű tanítóminta átlaga. Az előbbi nem számolható ismeretlen DD mellett, az utóbbi igen. Konstrukció: a fenti DD, Y=1[X1>0]Y=1[X_1>0], és a h3(x)=1[x2>0]h_3(x)=1[x_2>0] hipotézis. Ekkor RD(h3)=P(Y≠h3(X))=1/2R_D(h_3)=P(Y\ne h_3(X))=1/2, mert X1X_1 és X2X_2 függetlenek. Egy mm elemű realizáción azonban lehetséges, hogy minden ii-re 1[xi,1>0]=1[xi,2>0]1[x_{i,1}>0]=1[x_{i,2}>0], így R̂m(h3)=0\hat R_m(h_3)=0. Az esemény valószínűsége 2−m2^{-m}, de pozitív; a feladat csak a konstrukciót kéri, nem a konkrét mintát.

F2. A sáv:

log100+log(1/0,01)2⋅500=log100+log1001000=9,21031000=0,0960.\sqrt{\frac{\log 100+\log(1/0{,}01)}{2\cdot500}} =\sqrt{\frac{\log 100+\log 100}{1000}} =\sqrt{\frac{9{,}2103}{1000}} =0{,}0960 .

A garantált állítás: legalább 0,990{,}99 valószínűséggel minden h∈Hh\in H-ra RD(h)≤R̂500(h)+0,0960R_D(h)\le\hat R_{500}(h)+0{,}0960. Alakellenőrzés: a logaritmusok dimenziómentesek, a nevező mintaméret, a gyök dimenziómentes, ami a kockázat dimenziójával egyezik. Szélsőeset: m→∞m\to\infty mellett a sáv nullához tart, ami azt fejezi ki, hogy nagyobb minta mellett az empirikus kockázat jobban koncentrál.

F3. A megoldás a stabil formula:

import numpy as np


def bce_logits_stable(z, y):
    z = np.asarray(z, dtype=np.float64)
    y = np.asarray(y, dtype=np.float64)
    return np.maximum(z, 0) - y * z + np.log1p(np.exp(-np.abs(z)))

Az ellenőrzés:

for z, y in [(1000.0, 0.0), (-1000.0, 1.0)]:
    print(z, y, bce_logits_stable(z, y))

A (1000,0)(1000,0) esetben a stabil formula max(1000,0)−0+log(1+e−1000)≈1000\max(1000,0)-0+\log(1+e^{-1000})\approx1000, ami a matematikai érték; a naiv −log(1−σ(1000))-\log(1-\sigma(1000)) az 1−σ(1000)=01-\sigma(1000)=0 kerekítés miatt inf-et ad. A (−1000,1)(-1000,1) esetben a stabil érték max(−1000,0)−1⋅(−1000)+log(1+e−1000)≈1000\max(-1000,0)-1\cdot(-1000)+\log(1+e^{-1000})\approx1000? Számoljunk pontosan: z=−1000z=-1000, y=1y=1: max(−1000,0)=0\max(-1000,0)=0, −yz=1000-yz=1000, log(1+e−1000)≈0\log(1+e^{-1000})\approx0, az eredmény 10001000. A BCE matematikai értéke −log(σ(−1000))=−log(e−1000)=1000-\log(\sigma(-1000))=-\log(e^{-1000})=1000; a naiv log(σ(−1000))\log(\sigma(-1000)) a σ(−1000)=0\sigma(-1000)=0 kerekítés miatt -inf-et ad. Mindkét ponton a stabil formula véges és helyes; tolerancia: a log(1+e−1000)\log(1+e^{-1000}) tag 10−40010^{-400} nagyságrendű, f64-ben a 10001000 mellett elhanyagolható.

F4. A hibás állítás a tesztpontosság értelmezése. A validáció adaptív használata után a kiválasztott modell validációs és tesztpontossága felfelé torzított becslése a várható pontosságnak, mert a maximum művelet a legjobb pillanatnyi teljesítményt választja; a 8.3. Kapacitás, regularizálás és modellválasztás ellenpéldájában M=10M=10 próba 0,9990{,}999 várható maximumot adott 0,50{,}5 valós képesség mellett. A torzítás iránya felfelé. A helyes protokoll: a keresést a tanító/validációs halmazon zárjuk le, a tesztet a kiválasztott végleges modellen egyszer értékeljük, és a teszt eredményét külön jelöljük, vagy beágyazott keresztvalidációval becsüljük a modellválasztási folyamat egészének általánosítási hibáját.

F5. Protokoll: rögzítsük a DD generáló eloszlást (X∼U[−1,1]2X\sim U[-1,1]^2, Y=1[X1>0]Y=1[X_1>0]), a HH négyelemű osztályt, az m=64m=64 mintaméretet és a δ=0,05\delta=0{,}05 konfidenciaszintet. Ismételjünk Nsim=104N_{sim}=10^4-szer: generáljunk iid mintát, számítsuk ki minden hh-ra az empirikus hibát és a bb-sávot, ellenőrizzük az egyenlőtlenséget. A mért metrika a lefedettség, a sikeres realizációk aránya. A binomiális standard hiba p(1−p)/Nsim\sqrt{p(1-p)/N_{sim}}, p≈0,97p\approx0{,}97 mellett ≈0,0017\approx0{,}0017, tehát a 0,950{,}95 alsó korlátot a becsült p−2⋅p-2\cdotSE is meghaladja. A következtetési határ: a szimuláció a tétel feltételeinek teljesülése mellett a 1−δ1-\delta lefedettség empirikus ellenőrzése, de nem a tétel bizonyítása; a tétel a Hoeffding-állításon és az uniókorláton nyugszik, nem a szimuláción.

8.4.8 Tipikus tévedés, önellenőrzés és visszahívás

Tipikus tévedés és ellenpélda. „Az én futásomban a tanítóhiba 0,030{,}03, a tesztpontosság 0,910{,}91; ez bizonyítja, hogy a modell általánosan 0,910{,}91 pontosságú.” Ez az állítás három helyen sérülhet. Egyetlen futás nem valószínűségi garancia; a tesztpontosság becslés, a saját mintavételi bizonytalanságával; és ha a modellt a teszt alapján választottuk, a becslés torzított. Elvi ellenpélda: a fenti h3h_3 hipotézis m=20m=20 ponton 2−202^{-20} eséllyel nulla empirikus hibát ér el, miközben valódi kockázata 0,50{,}5. Egy ilyen szerencsés futás naplózott sikere ugyanolyan adat, mint a többi, de nem cáfolja a kockázatot.

Rövid önellenőrzés. Tegyük fel, hogy a hallgató a tesztet ötször futtatja, és a legjobb eredményt jelenti. A jelentés melyik szava lesz hibás: „pontosság” vagy „becslés”? A válasz: mindkettő, ha a validáció fogalmát a tesztre alkalmazta; a teszt ekkor validációs halmazzá vált, és a torzítatlan független teszt feltétele megszűnt.

Korábbi fogalom visszahívása. A 7.4. Numerikus stabilitás és jelentésmegőrző implementáció alfejezetben a stabil log(1+ez)\log(1+e^z)-t a max(z,0)+log(1+e−|z|)\max(z,0)+\log(1+e^{-|z|}) azonossággal számoltuk; ez tért vissza a labor BCE-értékében. A 4.4. I. ellenőrző pont: matematika és kód megfelelése alfejezetben a középső differenciás ellenőrzés abszolút hibáját használtuk nullközeli gradiensekhez; ezt a labor grad_check függvénye örökölte. A 8.3. Kapacitás, regularizálás és modellválasztás alfejezetben a beágyazott választás felfelé torzító hatását mutattuk meg; ez az F4 feladat háttere.

8.4.9 Rövid összefoglaló

A tanulási állítás teljes lánca: a DD eloszlásból vett iid minta adja az empirikus kockázatot, a célfüggvény a kockázat és a regularizáló tag összege, a gradiens a frissítés irányát adja, a sztochasztikus minibatch frissítés pedig a cél közelítését. A véges HH korlát megadja azt a sávot, amelyen belül a kockázat az empirikus érték felett marad 1−δ1-\delta valószínűséggel, feltéve, hogy az osztály előre rögzített, a minta iid, a veszteség [0,1][0,1]-be esik. A korlát nem garantál alacsony kockázatot, és egyetlen sikeres futás sem bizonyít tételt. A független teszt a keresés lezárása után egyszer mér, és a becslés torzítatlansága a függetlenségen múlik.

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

A következő egység 9.1. Neuron és perceptron a perceptront és a neuront vezeti be; ott a kockázatminimalizálás kerete először kap konkrét paraméteres modellt és tanulási szabályt.