6.1 Objektív, reguláris tag és gradienslépés

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

Ez az egység a tanulás matematikai magját, az empirikus kockázat minimalizálását és annak első numerikus eszközét, a gradienslépést vezeti be. A 4.4. I. ellenőrző pont: matematika és kód megfelelése alfejezetben egy rögzített pontban számoltunk gradienst és ellenőriztük annak helyességét; ott a kérdés a számítás, nem a paraméterfrissítés volt. Az 5.4. Függő képek, seedek és resampling alfejezetben láttuk, hogy a minta statisztikai szerkezete — például a jelenetekbe rendezett képek — befolyásolja, mit jelent egy átlag bizonytalansága. Most ezt a két szálat kapcsoljuk össze: egy batch megfigyeléséből átlagolt veszteséget definiálunk, a modellparaméterekre vett gradiensét levezetjük, majd abból tényleges paraméterfrissítést készítünk.

Egy kérdés a mélytanulási kódok mindennapjából: miért szerepel a legtöbb keretrendszer veszteségében egy 12\tfrac12 szorzó, és miért beszélünk külön adathibáról és regularizáló tagról, holott a kódban a kettő egyszerűen összeadódik? A válaszhoz előbb pontosan definiálnunk kell az objektívfüggvényt, a hozzá tartozó tenzoralakokat, majd a derivált skáláját — ez utóbbi a batchméret és a konstansszorzók kezelésén áll vagy bukik.

6.1.2 Empirikus kockázat, batch-átlag és penalty

Definíció (empirikus kockázat). Legyen D={(xi,yi)}i=1ND=\{(x_i,y_i)\}_{i=1}^{N} egy véges megfigyelés-sorozat, ahol xi∈ℝdx_i\in\mathbb R^d a bemeneti vektor és yiy_i a hozzá tartozó cél, amely jelen egységben regressziós esetben yi∈ℝmy_i\in\mathbb R^m, osztályozásnál később osztályindex. Legyen fθ:ℝd→ℝmf_\theta:\mathbb R^d\to\mathbb R^m egy θ\theta paraméterű modell és ℓ:ℝm×ℝm→ℝ\ell:\mathbb R^m\times\mathbb R^m\to\mathbb R egy elemenkénti veszteség. Az empirikus kockázat

RD(θ)=1N∑i=1Nℓ(fθ(xi),yi).R_D(\theta)=\frac{1}{N}\sum_{i=1}^{N}\ell(f_\theta(x_i),y_i).

A kifejezés azért kockázat, mert a teljes adathalmazra vett átlagot jelenti; a szó empirikus arra utal, hogy a várható értéket a véges mintával helyettesítettük. Folytonos cél esetén a négyzetes veszteség ℓ(f,y)=12∥f−y∥22\ell(f,y)=\tfrac12\lVert f-y\rVert_2^2; a 12\tfrac12 kizárólag a derivált kényelmét szolgálja, és nincs statisztikai jelentése. Osztályozási logitokhoz ugyanitt a 7.2. Softmax és többosztályos cross-entropy alfejezetben bevezetett cross-entropy kerül, amely a logitot nem kezeli valószínűségként: a softmax abban a veszteségben belül történik.

A gyakorlati tanítás nem a teljes DD-re, hanem egy B⊆{1,…,N}B\subseteq\{1,\ldots,N\} minibatchre számol. Legyen M=|B|M=|B| a batch elemszáma. A batch bemenete XB∈ℝM×dX_B\in\mathbb R^{M\times d}, ahol minden sor egy megfigyelés; a cél YB∈ℝM×mY_B\in\mathbb R^{M\times m}. A batch-átlag veszteség:

LB(θ)=1M∑i∈Bℓ(fθ(xi),yi).L_B(\theta)=\frac{1}{M}\sum_{i\in B}\ell(f_\theta(x_i),y_i).

Ha B={1,…,N}B=\{1,\ldots,N\}, akkor LB=RDL_B=R_D; általában azonban a batch-átlag csak közelíti az empirikus kockázatot. Az 5.4. Függő képek, seedek és resampling alfejezetből tudjuk, hogy ha a megfigyelések klaszterekbe rendeződnek, a batch-átlag statisztikai értelmezése is finomabb: a képek, nem a jelenetek szerinti átlagolás nem ugyanazt a független egységet becsli.

Definíció (regularizáló penalty). Legyen W∈ℝm×dW\in\mathbb R^{m\times d} a modell lineáris paramétermátrixa, b∈ℝmb\in\mathbb R^{m} a biasvektor. Az L2L^2-regularizáló tag

Pλ(W)=λ2∥W∥F2=λ2∑a=1m∑b=1dWab2,λ≥0.P_\lambda(W)=\frac{\lambda}{2}\lVert W\rVert_F^2=\frac{\lambda}{2}\sum_{a=1}^{m}\sum_{b=1}^{d}W_{ab}^{2},\qquad \lambda\ge 0.

A λ\lambda skálaparaméter a regularizáció erőssége; a 12\tfrac12 itt is a derivált alaktisztaságát szolgálja. A Frobenius-norma a mátrix elemnégyzet-összegének négyzetgyöke, tehát ∥W∥F2\lVert W\rVert_F^2 a mátrixelemek négyzetösszege. A biasra rendszerint nem alkalmazunk L2L^2-tagot, mert a bias eltolást kódol, nem pedig a bemenetre ható erősítést.

Definíció (teljes batch-objektív). A regularizált batch-célfüggvény

FB(W,b)=LB(W,b)+Pλ(W).F_B(W,b)=L_B(W,b)+P_\lambda(W).

A fenti LBL_B argumentumába W,bW,b kerül, mert a konkrét modell ezeket használja. A gradienslépés a gradient descent:

W(t+1)=W(t)−η∇WFB(W(t),b(t)),b(t+1)=b(t)−η∇bFB(W(t),b(t)),W^{(t+1)}=W^{(t)}-\eta\,\nabla_W F_B(W^{(t)},b^{(t)}),\qquad b^{(t+1)}=b^{(t)}-\eta\,\nabla_b F_B(W^{(t)},b^{(t)}),

ahol η>0\eta>0 a step size (tanulási sebesség). A későbbi sztochasztikus változatnál 6.3. Sztochasztikus és minibatch gradiens a batchgradiens a minibatchből származik; itt egyelőre a frissítés alakjára koncentrálunk.

6.1.3 A gradiens levezetése: fél-MSE és λ/2\lambda/2 súlynorma

Tétel (a regularizált fél-MSE gradiense). Legyen a modell affin transzformáció: Z=XW⊤+bZ=XW^\top+b, ahol X∈ℝM×dX\in\mathbb R^{M\times d}, W∈ℝm×dW\in\mathbb R^{m\times d}, b∈ℝmb\in\mathbb R^{m} sorirányú broadcast mellett, és Z∈ℝM×mZ\in\mathbb R^{M\times m}. Legyen a batch-veszteség

LB=12M∥Z−Y∥F2=12M∑i=1M∑k=1m(Zik−Yik)2,L_B=\frac{1}{2M}\lVert Z-Y\rVert_F^2=\frac{1}{2M}\sum_{i=1}^{M}\sum_{k=1}^{m}(Z_{ik}-Y_{ik})^2,

és a teljes cél FB=LB+λ2∥W∥F2F_B=L_B+\frac{\lambda}{2}\lVert W\rVert_F^2. Ekkor

∇WFB=1M(Z−Y)⊤X+λW,∇bFB=1M(Z−Y)⊤𝟏M,\nabla_W F_B=\frac{1}{M}(Z-Y)^\top X+\lambda W,\qquad \nabla_b F_B=\frac{1}{M}(Z-Y)^\top\mathbf 1_M,

ahol 𝟏M∈ℝM\mathbf 1_M\in\mathbb R^{M} a csupa egyes vektor, és ∇bFB∈ℝm\nabla_b F_B\in\mathbb R^{m}.

A kifejezésben (Z−Y)⊤X(Z-Y)^\top X egy m×dm\times d mátrix, tehát ∇WFB\nabla_W F_B alakja mindvégig megegyezik WW alakjával. A biasgradiens a hibamátrix oszlopösszege osztva MM-mel, ami mm-dimenziós vektort ad. A tétel a láncszabály definíció szerinti alkalmazása; a levezetést teljesen elvégezzük, mert a skálatényezők — az 1M\tfrac1M és a 12\tfrac12 — pontosan itt dőlnek el.

Levezetés. Jelölje R=Z−YR=Z-Y a hibamátrixot. A veszteség elemenkénti deriváltja ZZ szerint:

∂LB∂Zpq=1M(Zpq−Ypq)=1MRpq,\frac{\partial L_B}{\partial Z_{pq}}=\frac{1}{M}(Z_{pq}-Y_{pq})=\frac{1}{M}R_{pq},

mert az (Zpq−Ypq)2(Z_{pq}-Y_{pq})^2-nél a láncszabály 2(Zpq−Ypq)2(Z_{pq}-Y_{pq}) faktort ad, amelyet a 12\tfrac12 kiejt, és az 1M\tfrac1M átlagolás megmarad. Most Zik=∑j=1dXijWkj+bkZ_{ik}=\sum_{j=1}^{d}X_{ij}W_{kj}+b_k, tehát

∂Zik∂Wab=δkaXib,∂Zik∂ba=δka,\frac{\partial Z_{ik}}{\partial W_{ab}}=\delta_{ka}X_{ib},\qquad \frac{\partial Z_{ik}}{\partial b_a}=\delta_{ka},

ahol δka=1\delta_{ka}=1, ha k=ak=a, egyébként 00. A WabW_{ab} szerinti parciális derivált a többváltozós láncszabállyal 4.3. Jacobi-mátrix, láncszabály és VJP:

∂LB∂Wab=∑i=1M∑k=1m∂LB∂Zik∂Zik∂Wab=∑i,k1MRikδkaXib=1M∑i=1MRiaXib.\frac{\partial L_B}{\partial W_{ab}}=\sum_{i=1}^{M}\sum_{k=1}^{m}\frac{\partial L_B}{\partial Z_{ik}}\frac{\partial Z_{ik}}{\partial W_{ab}}=\sum_{i,k}\frac{1}{M}R_{ik}\,\delta_{ka}X_{ib}=\frac{1}{M}\sum_{i=1}^{M}R_{ia}X_{ib}.

Az utolsó összeg a R⊤XR^\top X mátrix (a,b)(a,b) eleme, mert (R⊤X)ab=∑i(R⊤)aiXib=∑iRiaXib(R^\top X)_{ab}=\sum_i (R^\top)_{ai}X_{ib}=\sum_i R_{ia}X_{ib}. Tehát ∇WLB=1MR⊤X\nabla_W L_B=\frac{1}{M}R^\top X. A biasra hasonlóan

∂LB∂ba=∑i,k1MRikδka=1M∑i=1MRia.\frac{\partial L_B}{\partial b_a}=\sum_{i,k}\frac{1}{M}R_{ik}\delta_{ka}=\frac{1}{M}\sum_{i=1}^{M}R_{ia}.

A biasgradiens tehát 1MR⊤𝟏M\frac1M R^\top\mathbf 1_M, mert R⊤R^\top alakja m×Mm\times M, és 𝟏M\mathbf 1_M-mel szorozva az oszlopösszegeket kapjuk.

A regularizáló gradienséhez ∂∂Wabλ2∑c,dWcd2=λ2⋅2Wab=λWab\frac{\partial}{\partial W_{ab}}\frac{\lambda}{2}\sum_{c,d}W_{cd}^2=\frac{\lambda}{2}\cdot 2W_{ab}=\lambda W_{ab}, tehát ∇WPλ=λW\nabla_W P_\lambda=\lambda W. Az FB=LB+PλF_B=L_B+P_\lambda összeg deriváltja tagok összege, amiből a tétel képlete adódik. ▫\square

Fontos megkülönböztetés: a fenti 12M\frac{1}{2M} skálázású kvadratikus tag a fél-MSE. A köznyelvi MSE definíciója 1M∥Z−Y∥F2\frac1M\lVert Z-Y\rVert_F^2, amelynek gradiense 2MR⊤X\frac{2}{M}R^\top X. A kettő konstansszorzóban tér el; ugyanazt a minimumot adja, de a regularizációs λ\lambda hangolásakor a skálát rögzítenünk kell. A gyakorlati kódok ezért expliciten dokumentálják, hogy a 12\tfrac12-es skálázást hol alkalmazzák.

A VJP-olvasat 4.4. I. ellenőrző pont: matematika és kód megfelelése szerint: legyen g=∇ZFB=1MRg=\nabla_Z F_B=\frac1M R; a paramétergradiensek az affin réteg backward lépéséből g⊤Xg^\top X, illetve a biasra a gg oszlopösszege. A fenti tétel pontosan ezt a programozói formát adja.

6.1.4 Kézi egyparaméteres példa és a lépések igazolása

A labor célja a gradienslépés mechanikájának kézi, ellenőrizhető követése. Legyen egyetlen bemeneti és kimeneti dimenzió, d=m=1d=m=1, és egyetlen mintapár: x=3x=3, y=9y=9. A modell z=Wxz=Wx (bias nélkül, a példa tisztasága érdekében). A fél-MSE egyetlen megfigyelésre:

L(W)=12(3W−9)2.L(W)=\frac12(3W-9)^2.

A regularizáló λ=0.2\lambda=0.2 mellett P(W)=0.1W2P(W)=0.1\,W^2. A teljes cél:

F(W)=12(3W−9)2+0.1W2.F(W)=\frac12(3W-9)^2+0.1W^2.

A gradiens: F′(W)=3(3W−9)+0.2W=9.2W−27F'(W)=3(3W-9)+0.2W=9.2W-27. Analitikus optimum: F′(W*)=0F'(W^*)=0, azaz W*=27/9.2=2.934782608…W^*=27/9.2=2.934\,\!782\,\!608\ldots

Induljunk W0=0W_0=0-ból, η=0.05\eta=0.05 lépésközzel. A számított lépések:

Megfigyelés: FF monoton csökken az első lépésekben, F(0)=40.5F(0)=40.5, F(1.35)≈12.43F(1.35)\approx12.43, F(2.079)≈4.25F(2.079)\approx4.25. A gradiens abszolút értéke is csökken: 2727, 14.5814.58, 7.877.87; ez a konvergencia numerikus jele, de önmagában nem bizonyítja a végtelenben vett minimumot — a 6.2. Konvexitás és sima optimalizálási határ alfejezetben adunk majd simasági feltételek melletti kvantitatív korlátot.

Elsőrendű Taylor-indoklás: F(Wt+1)≈F(Wt)+F′(Wt)(−ηF′(Wt))=F(Wt)−η|F′(Wt)|2F(W_{t+1})\approx F(W_t)+F'(W_t)(-\eta F'(W_t))=F(W_t)-\eta|F'(W_t)|^2, tehát minden nem nulla gradiensű pontban elegendően kis η\eta mellett a lineáris közelítés csökkenést jelez. Ez lokális állítás; nagy η\eta-ra a kvadratikus tag felülírhatja, és a cél nőhet.

6.1.5 Labor: NumPy gradienslépés egyparaméteres célra

Munkakönyvtár: ch06_empirical_risk/. Fájl: n021_gd_demo.py.

A feladat az előző kézi példa teljes megismétlése NumPy-ban, ahol minden lépés kimenetét külön ellenőrizzük. Nincs véletlen komponens, ezért seed nem szükséges; ezt kimondjuk. A dtype mindenütt float64, mert a gradiensellenőrzési fegyelem 4.4. I. ellenőrző pont: matematika és kód megfelelése szerint a magasabb pontosság a numerikus hibák elkülönítését segíti. Az eszköz CPU; PyTorch nem kell hozzá.

# n021_gd_demo.py
# Az író ezt a fájlt nem futtatta a kérésben; az alábbi kimenet kézzel számolt
# szemléltetés, a futás külön ellenőrizendő.
import numpy as np

x = np.array(3.0, dtype=np.float64)       # bemeneti skalár
y = np.array(9.0, dtype=np.float64)       # cél
lam = 0.2                                 # regularizációs erősség
eta = 0.05                                # step size

def objective(w):
    z = w * x
    return 0.5 * (z - y) ** 2 + 0.5 * lam * w ** 2   # fél-MSE + lambda/2 w^2

def gradient(w):
    z = w * x
    return (z - y) * x + lam * w                     # (3w-9)*3 + 0.2w

def step(w):
    return w - eta * gradient(w)

w = np.array(0.0, dtype=np.float64)
for t in range(6):
    g = gradient(w)
    print(f"t={t}  w={w:.8f}  F={objective(w):.8f}  grad={g:.8f}")
    w = step(w)

# Ellenőrzés: az első három frissítés egyezzen a kézi lépésekkel
w_repro = np.array(0.0, dtype=np.float64)
for expected in (1.35, 2.079, 2.47266):
    w_repro = step(w_repro)
    np.testing.assert_allclose(w_repro, expected, rtol=0.0, atol=5e-6)
print("ellenorzes: az elso harom lepes a kezi szamitassal egyezik (atol=5e-6)")

Számított, nem futtatott kimenet (jelölt):

t=0  w=0.00000000  F=40.50000000  grad=-27.00000000
t=1  w=1.35000000  F=12.43350000  grad=-14.58000000
t=2  w=2.07900000  F=4.24912540   grad=-7.87320000
t=3  w=2.47266000  F=1.63274053   grad=-4.25152800
t=4  w=2.68523640  F=0.94156978   grad=-2.29582448
t=5  w=2.80002762  F=0.88775965   grad=-1.23974588

Futtatási parancs: python n021_gd_demo.py.

Eredményértelmezés. Az értékek az analitikus képletekből számítottak; ha a futtatás eltér, előbb a kézzel való számítást, azután a kód szintaktikáját ellenőrizzük. A veszteség a tizedik lépésig várhatóan F≈0.8804F\approx0.8804 közelébe ér, mert az optimum F*F^* a fent számított 0.88040.8804 körüli érték; a konvergencia az η=0.05\eta=0.05 esetén a szokásos lineáris sebességű, mivel F″(W)=9.2F''(W)=9.2, így a csillapítási tényező |1−ηF″|=|1−0.46|=0.54|1-\eta F''| = |1-0.46|=0.54 lépésenként közelítőleg.

6.1.6 Feladatok

F1 (fogalmi, nehézség 1). Fogalmazd meg saját szavakkal a különbséget az empirikus kockázat, a batch-átlag és a regularizáló penalty között. Adj egy példát, amelyben a batch-átlag nem egyenlő az empirikus kockázattal. Átadandó: rövid definíciók és az ellenpélda konkrét NN-nel, batchmérettel.

F2 (levezetési, nehézség 2). Legyen M=2M=2, d=2d=2, m=1m=1, X=(1234)X=\begin{pmatrix}1&2\\3&4\end{pmatrix}, Y=(57)Y=\begin{pmatrix}5\\7\end{pmatrix}, modell Z=XW⊤Z=XW^\top (bias nélkül), W=(W11,W12)W=(W_{11},W_{12}), és cél F=12M∥Z−Y∥F2+λ2∥W∥F2F=\frac{1}{2M}\lVert Z-Y\rVert_F^2+\frac{\lambda}{2}\lVert W\rVert_F^2. Vezesd le ∇WF\nabla_W F értékét a W=(0,0)W=(0,0) pontban, λ=0.1\lambda=0.1 esetén. Átadandó: teljes levezetés, az alakellenőrzés és a konkrét numerikus gradiensvektor.

F3 (implementációs, nehézség 2). Implementáld a fenti laborlépést általános x,yx,y skalár, λ,η\lambda,\eta bemenettel egy f3_gd.py függvényben úgy, hogy a futás a W1,W2,W3W_1,W_2,W_3 értékeket adja vissza. Tedd ellenőrizhetővé: az x=3,y=9,λ=0.2,η=0.05x=3,y=9,\lambda=0.2,\eta=0.05 bemenetre az első három frissítés 1.351.35, 2.0792.079, 2.472662.47266. Átadandó: a fájl teljes szövege, inputok, tolerancia és futtatási parancs.

F4 (hibakeresési, nehézség 2). A következő függvény a paramétergradienst számítja:

def buggy_grad(W, X, Y):
    Z = X @ W          # (M, m)
    R = Z - Y          # (M, m)
    return R.T @ X     # (m, d), de hiányzik a batchnormálás

Magyarázd meg, milyen hibát követ el, mi a következménye a gradienslépésre, és hogyan javítanád. Átadandó: a hiba oka, hatása és a javított függvény, valamint egy numerikus kontroll, amelyben M=2M=2 és a javítás utáni gradiens éppen a felét adja a hibásnak.

F5 (kísérleti transzfer, nehézség 3). Tervezz kísérletet annak mérésére, hogy a λ\lambda regularizáció hogyan hat egy kis, procedurálisan generált lineáris regressziós feladat tanítási és validációs hibájára. A tervnek tartalmaznia kell: adatgenerálási recept, megfigyelési egység, split, baseline, a változó λ\lambda-értékek, a kiértékelendő metrika, a számítási erőforrás és a következtetési határ. Átadandó: a protokoll és legalább két lehetséges eredményértelmezés a korlátokkal.

6.1.7 Megoldások és indoklás

F1 megoldás. Az empirikus kockázat a teljes DD mintára vett átlag 1N∑i=1Nℓi\frac1N\sum_{i=1}^N\ell_i; a batch-átlag egy B⊆{1,…,N}B\subseteq\{1,\ldots,N\} részhalmazra vett 1M∑i∈Bℓi\frac1M\sum_{i\in B}\ell_i; a penalty a modellparaméterektől függő, adattól független büntetőtag, például λ2∥W∥F2\frac\lambda2\lVert W\rVert_F^2. Ha N=6N=6, B={1,2}B=\{1,2\}, akkor LB=12(ℓ1+ℓ2)L_B=\frac12(\ell_1+\ell_2), míg RD=16(ℓ1+⋯+ℓ6)R_D=\frac16(\ell_1+\cdots+\ell_6); a kettő általában nem egyenlő, kivéve ha a batch éppen a teljes halmaz. A penalty akkor sem válik empirikus kockázattá, ha a batch az egész adat: az adatfüggő és paraméterbüntető tag más forrásból származik.

F2 megoldás. A tétel képletéből ∇WF=1MR⊤X+λW\nabla_W F=\frac1M R^\top X+\lambda W. Kezdőpontban W=(0,0)W=(0,0), tehát λW=0\lambda W=0. Ekkor Z=XW⊤=(0,0)⊤Z=XW^\top=(0,0)^\top, R=Z−Y=(−5,−7)⊤R=Z-Y=(-5,-7)^\top. A szorzat:

R⊤X=(−5,−7)(1234)=(−5−21,−10−28)=(−26,−38).R^\top X=(-5,-7)\begin{pmatrix}1&2\\3&4\end{pmatrix}=(-5-21,\,-10-28)=(-26,-38).

Így 1MR⊤X=12(−26,−38)=(−13,−19)\frac1M R^\top X=\frac12(-26,-38)=(-13,-19). A regularizáló zérus, tehát ∇WF=(−13,−19)\nabla_W F=(-13,-19). Alakellenőrzés: W∈ℝ1×2W\in\mathbb R^{1\times2}, a gradiens is 1×21\times2, helyes. A W11W_{11} szerinti komponens −13-13: ha W11W_{11}-et kis ε\varepsilon-nal növeljük, mindkét minta predikciója nő, a hibák negatívak, tehát a veszteség csökken, ezért a gradiens negatív.

F3 megoldás. A teljes fájl:

# f3_gd.py
import numpy as np

def gd_first_three(x=3.0, y=9.0, lam=0.2, eta=0.05):

    def F(w):
        z = w * x
        return 0.5 * (z - y) ** 2 + 0.5 * lam * w ** 2

    def grad(w):
        return (w * x - y) * x + lam * w

    w = 0.0
    out = []
    for _ in range(3):
        w = w - eta * grad(w)
        out.append(w)
    return np.array(out, dtype=np.float64)

if __name__ == "__main__":
    res = gd_first_three()
    print(res)
    np.testing.assert_allclose(res, [1.35, 2.079, 2.47266],
                               rtol=0.0, atol=5e-6)
    print("ok")

Futtatás: python f3_gd.py. Tolerancia: abszolút 5⋅10−65\cdot10^{-6}, mert a harmadik lépés értékét öt tizedesre kerekítettük; a tiszta analitikus képletből további tizedesek is számíthatók, ezért a tolerancia a kerekítést hidalja át.

F4 megoldás. A buggy_grad a batch-összeget számítja, nem a batch-átlagot: R⊤XR^\top X értéke MM-szerese az 1MR⊤X\frac1M R^\top X átlaggradiensnek. Következmény: ha a lépésközt a normalizált gradiensre hangoltuk, a hibás gradiens ötszörös, tízszeres, százszoros lépést adhat, ami a célfüggvény növekedéséhez és divergenciához vezet. Javítás: osszunk a batch méretével, vagy használjunk np.mean-alapú szorzást:

def fixed_grad(W, X, Y):
    M = X.shape[0]
    Z = X @ W
    R = Z - Y
    return (R.T @ X) / M      # (m, d), batch-átlag

Numerikus kontroll: W=0W=0, X=(1001)X=\begin{pmatrix}1&0\\0&1\end{pmatrix}, Y=(24)Y=\begin{pmatrix}2\\4\end{pmatrix}. Ekkor R=(−2,−4)⊤R=(-2,-4)^\top, R⊤X=(−2,−4)R^\top X=(-2,-4); a hibás grad (−2,−4)(-2,-4), a javított 12(−2,−4)=(−1,−2)\frac12(-2,-4)=(-1,-2).

F5 megoldásminta. Adat: N=300N=300, d=5d=5 független standard normális xix_i, cél yi=2xi1−xi2+0.3xi3+εiy_i=2x_{i1}-x_{i2}+0.3x_{i3}+\varepsilon_i, εi∼𝒩(0,0.52)\varepsilon_i\sim\mathcal N(0,0.5^2). Megfigyelési egység: egy mintapont; itt nincs klaszterezés, ezért az egyszerű split elfogadható. Split: 60/20/2060/20/20 train/validation/test rétegezve a célkvantilisek szerint. Baseline: λ=0\lambda=0 lineáris regresszió. Változó: λ∈{0,0.001,0.01,0.1,1}\lambda\in\{0,0.001,0.01,0.1,1\}, mindegyiknél rögzített 100100 gradienslépés, η\eta előzetes sanity checkkel. Metrika: validációs MSE; a döntés után a teszt MSE-t csak egyszer számítjuk. Erőforrás: CPU, NumPy, seed rögzítve az adatgeneráláshoz. Értelmezés: ha a validációs görbe U alakú, a kicsi λ\lambda alul-, a nagy λ\lambda túlregularizál; mivel az adat szintetikus és alacsony dimenziós, az eredmény nem vihető át nagy képmodellre. Lehetséges negatív eredmény: ha a zaj kicsi, a λ=0\lambda=0 is jó, és a regularizálás nem javít; ez is érvényes, dokumentálandó eredmény.

6.1.8 Tipikus tévedés és önellenőrzés

Tévedés: a sum-reduction és a mean-reduction gradientse csak egy konstansban tér el, ezért a tanulási ráta átállításával mindegy, melyiket használjuk. A konstans valóban egy batch MM-szeres skálája, de a gyakorlati következmény éles: legyen M=2M=2, x1=3,y1=9x_1=3,y_1=9, x2=1,y2=3x_2=1,y_2=3, modell zi=wxiz_i=w x_i. A fél-MSE mean-veszteség Lm=14[(3w−9)2+(w−3)2]L_m=\frac14[(3w-9)^2+(w-3)^2], gradiense w=0w=0-nál 12[3(−9)+(−3)]=−15\frac12[3(-9)+(-3)]=-15. A sum-változat gradiense −30-30. Ha a lépésközt η=0.05\eta=0.05 a mean-hez hangoltuk, a sum használata effektív η=0.10\eta=0.10-es lépést ad, ami a fenti példa stabilitási tartományát is elhagyhatja. A tanulság: a reduction nem hibátlan átskálázás, hanem a célfüggvény definíciójának része; a λ\lambda hangolása csak azonos skálázás mellett összehasonlítható [P02].

Önellenőrzési lista.

  1. A gradiens alakja egyezik-e WW alakjával (m×dm\times d)?
  2. Az 1M\frac1M tényező minden adatgradiensben megjelenik-e, és a regularizáló tagban nem jelenik-e meg véletlenül?
  3. A 12\tfrac12 szorzó a fél-MSE-ben és a λ2\frac\lambda2 tagban azonos konvencióból származik-e?
  4. Az AdamW decoupled weight decay [P02] vajon azonos-e a fenti lossba tett L2L^2-taggal? Itt nem bizonyítottuk az azonosságot; a 6.4. Momentum és adaptív optimizálók fogja a kettő gradiensútvonalát megkülönböztetni.
  5. A Taylor-érvelés lokális; fogalmaztunk-e úgy, mintha globális konvergenciát bizonyítottunk volna? A nem-sima optimum vagy a nagy η\eta ellenpélda a 6.2. Konvexitás és sima optimalizálási határ alfejezetben kerül elő.

A fenti tétel levezetése a 2.1. Python, NumPy és tenzoralak alfejezetben bevezetett tenzoralak és broadcasting, valamint a 4.4. I. ellenőrző pont: matematika és kód megfelelése alfejezetben bemutatott elemenkénti láncszabály közvetlen következménye; a biasgradiens a broadcast backward szabálya szerint oszlopösszegből áll.

6.1.9 Rövid összefoglaló

Az empirikus kockázat a teljes minta átlaga, a batch-átlag annak minibatch-közelítése, a regularizáló penalty pedig adatfüggetlen paraméterbüntetés. A fél-MSE 12M∥XW⊤+b−Y∥F2\frac1{2M}\lVert XW^\top+b-Y\rVert_F^2 gradiense 1M(Z−Y)⊤X\frac1M (Z-Y)^\top X, a biasgradiens 1M(Z−Y)⊤𝟏M\frac1M (Z-Y)^\top\mathbf 1_M; az L2L^2-tag λ2∥W∥F2\frac\lambda2\lVert W\rVert_F^2 gradiense λW\lambda W. A gradienslépés W(t+1)=W(t)−η∇WFW^{(t+1)}=W^{(t)}-\eta\nabla_W F. A Taylor-sor szerint elegendően kis lépésköz csökkentést jelez, de ez lokális állítás, nem globális konvergenciabizonyíték. A sum és mean reduction a gradiens skáláját batchméretezővel változtatja; ez nem közömbös konvenció.

6.1.10 Következő alkalmazás

A 6.2. Konvexitás és sima optimalizálási határ alfejezetben a konvexitás és a simaság fogalmát vezetjük be, hogy a gradienslépés csökkenésére ne csak lokális Taylor-érvünk legyen, hanem megadott Lipschitz-feltétel melletti kvantitatív korlát. A 6.3. Sztochasztikus és minibatch gradiens alfejezetben a minibatch-mintavétel varianciáját elemezzük, ahol az itt levezetett skálák döntik el a lépésköz és a batchméret együttes hangolását.

6.1.11 Források