CMD + K

Kapittel 3Begreper & formler · Gradient descent og trening
Referanseside · Kapittel 3

Begreper & referanser

Alle nøkkelbegrepene, formlene og referansene fra Gradient descent og trening, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.

Øv med flashcards17 kort fra dette kapittelet

Begreper

Sentrale begreper fra kapittelet med korte definisjoner.

01Gradient descent

En iterativ metode som flytter parameterne i motsatt retning av tapsgradienten.

02Læringsrate

Steglengden som bestemmer hvor kraftig parameterne endres i hver gradientoppdatering.

03Stokastisk gradient descent

Gradient descent der hver oppdatering bruker én observasjon eller en minibatch.

04Minibatch

Et mindre utvalg av treningsobservasjoner som brukes til å anslå gradienten i ett treningssteg.

05Tapsflate

Tapet sett som funksjon av modellparameterne, for eksempel , mens treningsdataene holdes faste. Gradienten peker oppover på flaten, og gradient descent går motsatt vei, mot lavere tap.

06Epoke

Én full gjennomgang av treningsdataene. Med eksempler og batchstørrelse består en epoke av iterasjoner, altså parameteroppdateringer.

07Konveks funksjon

En funksjon der linjestykket mellom to punkter på grafen aldri ligger under grafen. Hvert lokalt minimum er da også globalt. MSE for lineær regresjon og BCE for logistisk regresjon er konvekse i parameterne, mens tapet til et nevralt nett ikke er det.

08Tidlig stopping

Å avbryte treningen når valideringstapet ikke har blitt bedre på et gitt antall epoker (tålmodigheten), og beholde vektene fra den beste epoken.

Formler

Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.

mse-gradient

Gradienten til MSE

Gradienten uttrykker hvordan MSE endrer seg når hver vekt justeres.

Xdatamatrise
wvektvektor
ymålvektor
Ltapsfunksjon
gradient-oppdatering

Gradient descent-oppdatering

Parameterne flyttes mot lavere tap med læringsrate .

ttreningssteg
ηlæringsrate
∇_w Ltapsgradient med hensyn på vektene
minibatch-gradient

Minibatch-gradient

En minibatch estimerer gradienten fra et delsett i stedet for hele treningssettet.

Bminibatch med observasjonsindekser
|B|batchstørrelse
ℓ_itap for observasjon i
mse-gradient-wb

MSE-gradient for w og b

Gradientene for med MSE. Hver residual drar i begge parameterne, og for vektes den med .

ŷ_i − y_iresidual for punkt i
x_ifeature for punkt i
nantall treningspunkter
iterasjoner-per-epoke

Iterasjoner per epoke

Antall parameteroppdateringer i én epoke med batchstørrelse . Full batch gir 1 per epoke, SGD med gir .

nantall treningseksempler
Bbatchstørrelse
⌈ ⌉rund opp til nærmeste heltall
feilfaktor-kvadratisk

Feilfaktor på kvadratisk tap

For ganges avstanden til minimum med i hvert steg. Konvergens krever , og negativ faktor gir sikksakk rundt minimum.

w*minimumspunktet
akrumningen til tapet
ηlæringsrate

Kodesnutter

Kodesnutter fra kapittelet, vist literal.

Kode

Ett gradient descent-steg for hånd og i kode

Python
import numpy as np # Soltimer (x) og produksjon i kWh (y) for tre dagerx = np.array([1.0, 2.0, 3.0])y = np.array([3.0, 4.0, 8.0])w, b = 1.0, 0.0eta = 0.05  # @param 0.01..0.4 0.01 def mse(w, b):    return np.mean((w * x + b - y) ** 2) feil = w * x + b - y           # residual ŷ − ydw = 2 * np.mean(feil * x)     # ∂L/∂wdb = 2 * np.mean(feil)         # ∂L/∂bh = 1e-6                       # kontroll: numerisk derivert med et lite dytt hdw_num = (mse(w + h, b) - mse(w - h, b)) / (2 * h)print(f"gradient: dw = {dw:.2f} (numerisk {dw_num:.2f}), db = {db:.2f}") w_ny, b_ny = w - eta * dw, b - eta * dbprint(f"nye parametere: w = {w_ny:.3f}, b = {b_ny:.3f}")print(f"MSE før: {mse(w, b):.3f}, etter: {mse(w_ny, b_ny):.3f}")

Prøv: Dra eta oppover og finn verdien der «MSE etter» ikke lenger er lavere enn «MSE før».

Kode

Full batch, minibatch og SGD side om side

Python
import numpy as npimport matplotlib.pyplot as plt rng = np.random.default_rng(3)n = 200x = rng.uniform(-2, 2, n)y = 1.5 * x - 0.7 + rng.normal(0, 0.3, n)eta = 0.05  # @param 0.01..0.5 0.01epoker = 8 plt.figure()for B in [n, 16, 1]:    w = b = 0.0    mse = [np.mean((w * x + b - y) ** 2)]    for epoke in range(epoker):        rekkefolge = rng.permutation(n)            # stokk på nytt hver epoke        for start in range(0, n, B):            idx = rekkefolge[start:start + B]            feil = w * x[idx] + b - y[idx]            w, b = w - eta * 2 * np.mean(feil * x[idx]), b - eta * 2 * np.mean(feil)        mse.append(np.mean((w * x + b - y) ** 2))    print(f"B = {B:3d}: {epoker * int(np.ceil(n / B)):4d} oppdateringer, MSE = {mse[-1]:.3g}")    plt.plot(mse, label=f"B = {B}")plt.yscale("log")plt.xlabel("epoke")plt.ylabel("MSE (log-skala)")plt.legend()plt.tight_layout()plt.show()

Prøv: Dra eta mot 0,5 og se hvilken «B =»-linje som får høyest MSE først (ustabil); støyen gir et gulv rundt 0,09.

Kode

Lineær regresjon trent med gradient descent

Python
import numpy as np rng = np.random.default_rng(4172)X = rng.uniform(-2, 2, size=80)y = 1.5 * X - 0.7 + rng.normal(scale=0.25, size=80) eta = 0.08  # @param 0.02..0.8 0.02eksponent = 4  # @param 1..8toleranse, maks_epoker = 10.0 ** -eksponent, 500w = b = 0.0for epoke in range(1, maks_epoker + 1):    feil = w * X + b - y    dw, db = 2 * np.mean(feil * X), 2 * np.mean(feil)    if np.hypot(dw, db) < toleranse:   # stoppkriterium: gradienten er nesten null        break    w -= eta * dw    b -= eta * db print(f"toleranse {toleranse:.0e}: stoppet etter {epoke} epoker (maks {maks_epoker})")print(f"w = {w:.3g}, b = {b:.3g}, MSE = {np.mean((w * X + b - y) ** 2):.3g}")

Prøv: Dra eksponent opp og se «stoppet etter … epoker» vokse; dra så eta mot 0,8 og se løkka nå taket «maks 500».

Læringsmål

Hva du skal kunne etter å ha lest kapittelet.

  1. 01Regn ut ett gradient descent-steg for både og i med MSE
  2. 02Forklar hvorfor oppdateringen går motsatt vei av gradienten, og hvorfor stegene krymper nær minimum
  3. 03Tolk en tapskurve og avgjør om læringsraten er for liten, passe, for stor eller langt for stor
  4. 04Regn ut antall iterasjoner per epoke og totalt for full batch, minibatch og SGD
  5. 05Forklar hvorfor konveksitet gir et globalt minimum, og hvorfor et nevralt nett kan ende i ulike løsninger
  6. 06Velg et stoppkriterium, og bruk tidlig stopping på valideringstap