Přeskočit na obsah
coden

Přeučení a regularizace: proč model, který zná data nazpaměť, selže

Polynomiální regrese na dvanácti bodech ze sinusovky, trénovací a testovací chyba, rozklad na vychýlení a rozptyl, hřebenová a lasso regularizace, vliv počtu dat, validace a dvojitý sestup moderních sítí.

13 minut Matěj Žalmánek 2026-10-15

Série Základy AI Díl 43 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Celá osnova série 83 z 83 témat hotovo

Co si odnesete
  • Proč trénovací chyba s rostoucí složitostí klesá a testovací nakonec roste.
  • Co je vychýlení a rozptyl a proč je správná složitost modelu jejich rovnováha.
  • Jak přeučení krotí regularizace, víc dat a validační sada.

Co se hodí znát předem: Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další, Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti

Student, který se na zkoušku naučí nazpaměť odpovědi na otázky z loňského testu, dostane na loňský test jedničku — a na letošní propadne. Totéž se děje modelům strojového učení. Model, který si zapamatuje trénovací data i s jejich náhodným šumem, na nich vypadá skvěle, ale na nových datech selže. Tomu se říká přeučení a je to asi nejčastější past strojového učení. V tomhle dílu ji uvidíme na nejjednodušším možném příkladu — a ukážeme si, jak se jí bránit.

Navazuje na díly Druhy strojového učení a Statistika a odhady parametrů.

1. Úloha: dvanáct bodů ze sinusovky

Příklad z učebnice Christophera Bishopa: skutečná souvislost je y = sin(2πx) na intervalu [0, 1], ale vidíme jen 12 bodů, ke kterým je přičtený šum se směrodatnou odchylkou 0,25. Model se má z těch dvanácti bodů naučit předpovídat y pro libovolné x. Úspěch měříme na 201 bodech, které model nikdy neviděl.

Definice — polynomiální regrese

Nechť n ∈ ℕ, n ≥ 1, a (x1, y1), …, (xn, yn) ∈ ℝ × ℝ jsou trénovací body a d ∈ ℕ ∪ {0} je stupeň. Polynomiální model stupně d s parametry w = (w0, …, wd) ∈ ℝd+1 je funkce

fw : ℝ → ℝ,   fw(x) = w0 + w1x + … + wdxd = ∑k=0d wkxk.

Polynomiální regrese volí parametry metodou nejmenších čtverců, tj. jako

ŵ ∈ argminw ∈ ℝd+1 ∑i=1n (yi − fw(xi))2,

a naučený model je fŵ.

Laicky řečeno

Hledáme křivku, která body proloží co nejtěsněji. Stupeň d určuje, jak moc se křivka smí ohýbat: stupeň 1 je přímka, stupeň 3 má dva ohyby, stupeň 11 jich má deset. Čím vyšší stupeň, tím víc parametrů a tím víc volnosti.

ŵ = argminw ∑i=1n ( yi − fw(xi) )2

ŵ = argminw
nehledáme nejmenší hodnotu součtu, ale koeficienty, při kterých nastane — ty pak tvoří naučený model
∑i=1n
chyby všech dvanácti bodů se sčítají, takže se křivka nemůže „zavděčit“ jen některým — každý bod za ni tahá
yi
naměřená hodnota i se šumem (jantarové body v grafu); model nic jiného než tyhle body nevidí, skutečnou sinusovku nezná
fw(xi)
co v tomtéž xi předpovídá křivka (zelená v grafu); rozdíl s yi je svislá vzdálenost bodu od křivky
2
čtverec udělá z chyby nahoru i dolů kladné číslo (jinak by se odečetly), velké odchylky trestá víc než malé a dává hladkou funkci, jejíž minimum se dá spočítat přesně (normální rovnice níže)
Metoda nejmenších čtverců: ze všech polynomů daného stupně vyber ten, jehož svislé odchylky od bodů mají nejmenší součet čtverců.
Věta — normální rovnice

Nechť (x1, y1), …, (xn, yn) ∈ ℝ × ℝ, d ∈ ℕ ∪ {0}, y = (y1, …, yn)T ∈ ℝn a Φ ∈ ℝn×(d+1) je matice s prvky Φik = xik pro i = 1, …, n a k = 0, …, d (řádek = bod, sloupec = mocnina; x0 = 1). Pak fw(xi) je i-tá složka vektoru Φw, součet čtverců je ‖y − Φw‖2 (‖·‖ je eukleidovská norma) a platí: w ∈ ℝd+1 je minimem součtu čtverců, právě když splňuje normální rovnice

ΦTΦ w = ΦTy.

Má-li navíc Φ lineárně nezávislé sloupce, je minimum jediné: ŵ = (ΦTΦ)−1ΦTy.

Důkaz: ‖y − Φw‖2 = yTy − 2wTΦTy + wTΦTΦw; gradient podle w je −2ΦT(y − Φw) a v minimu musí být nulový. Funkce je konvexní (Hessova matice 2ΦTΦ je pozitivně semidefinitní), takže každý bod s nulovým gradientem je minimum. Má-li Φ lineárně nezávislé sloupce — stačí aspoň d + 1 různých xi —, je ΦTΦ regulární a minimum jediné. ∎

Příklad — přímka přes našich 12 bodů ručně

Pro stupeň 1 má Φ dva sloupce: samé jedničky a hodnoty xi. Normální rovnice jsou pak jen dvě: nw0 + (∑x)w1 = ∑y a (∑x)w0 + (∑x2)w1 = ∑xy. Z našich bodů vyjde ∑x = 6,029, ∑x2 = 4,004, ∑y = −1,049 a ∑xy = −2,390:

12 w0 + 6,029 w1 = −1,049
6,029 w0 + 4,004 w1 = −2,390

Determinant soustavy je D = 12 · 4,004 − 6,0292 = 11,693. Podle Cramerova pravidla

w0 = 4,004 · (−1,049) − 6,029 · (−2,390)/11,693 = 0,873,

w1 = 12 · (−2,390) − 6,029 · (−1,049)/11,693 = −1,912.

Nejlepší přímka je y = 0,873 − 1,912x: klesá, protože první půlka bodů leží nad nulou a druhá pod ní. Vlna sinusovky jí uniká celá.

x (0–1) y (bez jednotky) stupeň 1 x (0–1) y (bez jednotky) stupeň 3 x (0–1) y (bez jednotky) stupeň 11
Polynomy stupně 1, 3 a 11 proložené dvanácti body

Přímka (stupeň 1) je moc tuhá — vlnu sinusovky vůbec nezachytí. Tomu se říká nedoučení. Stupeň 3 vystihne tvar dobře. A stupeň 11 má dvanáct parametrů na dvanáct bodů, takže projde všemi body přesně — a mezi nimi divoce kmitá, u okrajů daleko mimo graf.

Věta — interpolace polynomem

Nechť n ∈ ℕ, n ≥ 1, a (x1, y1), …, (xn, yn) ∈ ℝ × ℝ jsou body, jejichž první souřadnice jsou navzájem různé (xi ≠ xj pro i ≠ j). Pak existuje právě jeden polynom f stupně nejvýš n − 1, pro který platí f(xi) = yi pro všechna i = 1, …, n.

Důkaz: podmínka „projde všemi body“ je soustava Φw = y s n rovnicemi a n neznámými w0, …, wn−1. Její matice je Vandermondova a má determinant ∏i < j (xj − xi), který je pro různá xi nenulový. Soustava má tedy jediné řešení. ∎

Pro nás: 12 bodů, stupeň 11, tedy 12 koeficientů. Polynom bodům vyhoví vždycky — ať v nich je sinusovka, šum, nebo cokoli jiného. Nulová trénovací chyba proto o modelu neříká vůbec nic.

2. Trénovací a testovací chyba

Definice — trénovací chyba, chyba zobecnění, přeučení

Nechť P je rozdělení dvojic (X, Y) na 𝒳 × ℝ, L : ℝ × ℝ → [0, ∞) ztrátová funkce (u nás L(ŷ, y) = (ŷ − y)2), D = ((xi, yi))i=1n trénovací sada vybraná z P a ℋ množina modelů h : 𝒳 → ℝ, ze kterých učení vybírá (např. všechny polynomy stupně nejvýš d). Pro h ∈ ℋ definujeme:

  1. trénovací chybu — průměrnou ztrátu na datech, ze kterých se model učil: errD(h) = 1/n ∑i=1n L(h(xi), yi);
  2. chybu zobecnění — očekávanou ztrátu na nové dvojici ze stejného rozdělení: errP(h) = E(X, Y) ∼ P[L(h(X), Y)]. P neznáme, proto errP odhadujeme průměrnou ztrátou na testovací sadě — dvojicích z P, které model při učení neviděl.

Model h ∈ ℋ je přeučený (T. Mitchell), právě když existuje jiný model h′ ∈ ℋ, pro který

errD(h) < errD(h′)   a zároveň   errP(h) > errP(h′).

Přeučený model je tedy lepší na trénovacích datech, ale horší na nových datech než nějaký jiný model, který měl učení k dispozici — typicky jednodušší. Poznávací znak: trénovací chyba je výrazně menší než chyba zobecnění.

Laicky řečeno

Trénovací chyba je, jak dobře model zná učebnici. Testovací chyba je, jak dobře obstojí u zkoušky s novými otázkami. Zajímá nás jen ta druhá. Proto se testovací data musí schovat a nesmí se na ně podívat — ani při ladění modelu.

Definice — odmocnina střední kvadratické chyby (RMSE)

Nechť f̂ : ℝ → ℝ je model, n ∈ ℕ, n ≥ 1, a (x1, y1), …, (xn, yn) ∈ ℝ × ℝ je sada bodů. Odmocnina střední kvadratické chyby modelu f̂ na této sadě je číslo

RMSE = √1/n ∑i=1n (f̂(xi) − yi)2 ≥ 0.

Trénovací chyba je RMSE na 12 trénovacích bodech, testovací chyba RMSE na 201 testovacích bodech x = 0; 0,005; …; 1, kde y = sin(2πx) bez šumu.

RMSE = √1/n ∑i=1n ( f̂(xi) − yi )2

f̂(xi) − yi
o kolik se model v jednom bodě spletl; kladné i záporné podle toho, jestli střelil nad, nebo pod
2
aby se chyby nahoru a dolů navzájem nevyrušily — a stejný čtverec, jaký model minimalizoval při učení
1/n ∑
průměr místo součtu: chyby na 12 a na 201 bodech jsou pak srovnatelné, nezáleží na velikosti sady
√
vrací výsledek do jednotek y; „RMSE 0,2“ znamená, že se model typicky mýlí zhruba o 0,2

Přímka z příkladu výše má na trénovacích bodech RMSE 0,429 a na testovacích 0,454 — obojí zhruba stejně špatně, jak se na nedoučený model sluší.

0,010,1110 01234567891011 stupeň polynomu (0–11) chyba RMSE (log. měřítko)
Chyba (RMSE) podle stupně polynomu trénovací testovací

Trénovací chyba s rostoucím stupněm jen klesá: ze 0,69 u konstanty na 0,19 u stupně 3 a na nulu u stupně 11. Testovací chyba nejdřív také klesá — u stupně 3 je nejmenší, 0,135 —, pak ale roste: u stupně 9 je 2,55 a u stupně 11 neuvěřitelných 19,3. Polynom stupně 11 je ze všech nejhorší, přestože trénovací data vystihuje dokonale. Typický obraz: trénovací chyba klesá pořád, testovací má tvar písmene U.

3. Vychýlení a rozptyl

Proč je jednoduchý model špatný jinak než složitý? Představme si, že bychom stejný pokus opakovali s mnoha různými sadami dvanácti bodů.

Věta — rozklad chyby na vychýlení a rozptyl

Nechť f : 𝒳 → ℝ je skutečná (neznámá) funkce a x ∈ 𝒳 pevný bod. Nechť

  1. nová hodnota v bodě x je y = f(x) + ε, kde ε je náhodná veličina s E[ε] = 0 a Var(ε) = σ2;
  2. D je náhodná trénovací sada a f̂ = f̂D model, který se z ní naučí, přičemž E[f̂(x)2] < ∞;
  3. ε je nezávislé na D.

Pak platí (střední hodnota se bere přes trénovací sady D i přes šum ε)

E[(y − f̂(x))2] = (E[f̂(x)] − f(x))2 + Var(f̂(x)) + σ2,

tedy vychýlení2 + rozptyl + neodstranitelný šum.

Důkaz: označme f̄ = E[f̂(x)] a rozepišme y − f̂ = (f − f̄) + (f̄ − f̂) + ε. Po umocnění a střední hodnotě zbudou jen tři čtverce: první člen je konstanta, E[f̄ − f̂] = 0 z definice f̄ a šum ε má nulovou střední hodnotu a je na trénovací sadě nezávislý, takže všechny smíšené součiny mají nulovou střední hodnotu. ∎

Laicky řečeno

Vychýlení je systematická chyba: i kdybychom měli nekonečně mnoho trénovacích sad a modely zprůměrovali, přímka sinusovku nevystihne. Rozptyl je nestálost: složitý model se na každé sadě naučí něco úplně jiného, protože honí náhodný šum. Šum v datech neodstraní žádný model.

E[(y − f̂(x))2] = (E[f̂(x)] − f(x))2 + Var(f̂(x)) + σ2

E[(y − f̂(x))2]
čtverec chyby na novém bodě, zprůměrovaný přes všechny trénovací sady, které nám náhoda mohla dát — hodnotíme postup učení, ne jeden šťastný či nešťastný výsledek
(E[f̂] − f)2
vychýlení²: i průměr nekonečně mnoha modelů mine pravdu, když je tvar modelu špatný; přímka sinusovku neohne, ať jí dáme jakákoli data
Var(f̂)
rozptyl: jak moc se modely z různých sad liší mezi sebou; je tu proto, že model si odnese i náhodný šum své konkrétní sady
σ2
šum v samotném y (u nás 0,252 = 0,0625); je tam, protože i dokonalý model f̂ = f nový bod se šumem netrefí
Složitější model zmenšuje vychýlení a zvětšuje rozptyl; šum neovlivní žádný.
x (0–1) y (bez jednotky) stupeň 1 x (0–1) y (bez jednotky) stupeň 3 x (0–1) y (bez jednotky) stupeň 9
Dvacet modelů z dvaceti různých trénovacích sad

Ze 200 opakování pokusu: přímky jsou si podobné (rozptyl 0,013), ale všechny špatně (vychýlení2 0,200). Polynomy stupně 9 jsou v průměru skoro správně (vychýlení2 0,024), jenže každý vypadá jinak (rozptyl 3,91). Stupeň 3 má obojí malé — 0,005 a 0,023. Hledat správnou složitost modelu znamená hledat rovnováhu mezi vychýlením a rozptylem.

Ta čísla jsme odhadli simulací — vzorec z věty se nedá spočítat přímo, protože střední hodnota je přes všechny možné trénovací sady. Nahradíme ji průměrem přes 200 vylosovaných sad a pak ještě zprůměrujeme přes 201 testovacích bodů x:

def vychyleni_rozptyl(d, pocet=200, n=12):
    modely = [proloz(nova_sada(n), d) for _ in range(pocet)]
    b2 = v = 0
    for x in testovaci_x:                     # 201 bodů z [0, 1]
        p = [f(x) for f in modely]            # 200 předpovědí v jednom bodě
        m = prumer(p)                         # odhad E[f̂(x)]
        b2 += (m - sin(2*pi*x)) ** 2          # vychýlení² v bodě x
        v  += prumer([(q - m) ** 2 for q in p])   # rozptyl v bodě x
    return b2 / len(testovaci_x), v / len(testovaci_x)
Příklad — složíme očekávanou chybu

Sečtěme tři členy rozkladu (na čtyři desetinná místa, šum σ2 = 0,0625):

  • stupeň 1: 0,1996 + 0,0130 + 0,0625 = 0,2751 — přes dvě třetiny dělá vychýlení,
  • stupeň 3: 0,0052 + 0,0233 + 0,0625 = 0,0910 — největší člen je šum, se kterým nic nenaděláme,
  • stupeň 9: 0,0242 + 3,9103 + 0,0625 = 3,9970 — skoro všechno je rozptyl.

(Barvy podle rozkladu výše: vychýlení², rozptyl, šum a jejich součet, očekávaná chyba.)

Bez šumu (proti čisté sinusovce, jak měříme testovací chybu) zbudou jen první dva členy. Pro stupeň 3 je to 0,0285 a odmocnina √0,0285 ≈ 0,169: zhruba takovou testovací RMSE čekáme od „průměrné“ sady dvanácti bodů. Naše jedna sada s 0,135 vyšla o něco lépe než průměr.

4. Regularizace: trest za složitost

Ubrat stupeň polynomu je hrubý zásah. Jemnější je nechat modelu volnost, ale trestat ho za to, když ji využívá. Přeučený polynom stupně 11 má obrovské koeficienty (velikost vektoru w je asi 6 000), které se navzájem vyvažují — právě proto kmitá.

Definice — hřebenová (L2) a lasso (L1) regularizace

Nechť (x1, y1), …, (xn, yn) ∈ ℝ × ℝ jsou trénovací body, fw polynomiální model s parametry w = (w0, …, wd) ∈ ℝd+1 a λ ≥ 0 parametr, který řídí sílu trestu. Pro w ∈ ℝd+1 označme ‖w‖22 = ∑j=0d wj2 a ‖w‖1 = ∑j=0d |wj|.

  1. Hřebenová regrese (L2) volí ŵ ∈ argminw ∈ ℝd+1 [∑i=1n (yi − fw(xi))2 + λ ‖w‖22].
  2. Lasso (L1) volí ŵ ∈ argminw ∈ ℝd+1 [∑i=1n (yi − fw(xi))2 + λ ‖w‖1].

Pro λ = 0 jsou obě obyčejné nejmenší čtverce. Hřebenová regrese má pro λ > 0 řešení v uzavřeném tvaru ŵ = (ΦTΦ + λI)−1 ΦTy s maticí Φ z normálních rovnic a jednotkovou maticí I řádu d + 1 (věta níže); lasso v uzavřeném tvaru obecně řešit nejde.

Absolutní člen w0 se obvykle netrestá — posunout celou křivku nahoru nebo dolů není žádná složitost. Tak to počítáme i my (v matici I je pak na místě w0 nula). Kvůli numerické stabilitě navíc mocníme t = 2x − 1 ∈ [−1, 1] místo x: je to tentýž model, jen jinak zapsaný, a i velikost ‖w‖ v textu je v tomhle zápisu.

Laicky řečeno

Model může používat všech dvanáct parametrů, ale každý velký koeficient ho stojí body. Vyplatí se mu tedy jen ty, které chybu opravdu sníží. Křivka se uklidní, aniž bychom museli zvolit „správný“ stupeň. Lasso jde dál: nepotřebné koeficienty srazí přesně na nulu, a tak samo vybírá, které příznaky použít.

∑i (yi − fw(xi))2 + λ ‖w‖22

∑ (yi − fw(xi))2
stará známá chyba na datech; bez ní by model nemusel data vůbec poslouchat a nejlepší by bylo w = 0
λ
kurz, kterým směňujeme složitost za přesnost; jediný knoflík, který volíme my (na validační sadě), ne učení — při λ = 0 jsme zpátky u přeučení, při obrovském λ u rovné čáry
‖w‖22
součet čtverců koeficientů: kmitající polynom potřebuje obří, navzájem se rušící koeficienty, takže právě je trest zasáhne nejvíc; čtverec (ne absolutní hodnota) dělá z celé úlohy zase kvadratickou funkci s řešením v uzavřeném tvaru
Učení teď hledá kompromis: malou chybu na datech, ale ne za cenu obřích koeficientů.
Věta — řešení hřebenové regrese

Nechť Φ ∈ ℝn×p je libovolná matice, y ∈ ℝn, λ > 0 a I jednotková matice řádu p. Pak funkce w ↦ ‖y − Φw‖2 + λ‖w‖2 na ℝp má jediné minimum w = (ΦTΦ + λI)−1ΦTy — i když bodů je méně než parametrů.

Důkaz: gradient je −2ΦT(y − Φw) + 2λw; položíme ho roven nule a dostaneme (ΦTΦ + λI)w = ΦTy. Pro každé v ≠ 0 je vT(ΦTΦ + λI)v = ‖Φv‖2 + λ‖v‖2 > 0, matice je tedy pozitivně definitní, regulární a funkce ryze konvexní. ∎

Proti normálním rovnicím přibyl jen člen λI na diagonále.

Celý výpočet je pak krátký — sestavit ΦTΦ a ΦTy bod po bodu, přičíst λ na diagonálu a vyřešit soustavu lineárních rovnic Gaussovou eliminací:

def proloz(body, d, lam=0):
    A = nuly(d + 1, d + 1)                  # bude ΦᵀΦ + λI
    b = nuly(d + 1)                         # bude Φᵀy
    for x, y in body:
        phi = [(2*x - 1) ** k for k in range(d + 1)]   # řádek Φ (mocniny t)
        for i in range(d + 1):
            b[i] += phi[i] * y
            for j in range(d + 1):
                A[i][j] += phi[i] * phi[j]
    for i in range(1, d + 1):               # w₀ se netrestá
        A[i][i] += lam
    return gauss(A, b)                      # vyřeš A·w = b
x (0–1) y (bez jednotky) λ = 0 x (0–1) y (bez jednotky) λ = 0,0001 x (0–1) y (bez jednotky) λ = 0,01 x (0–1) y (bez jednotky) λ = 1
Polynom stupně 11 s hřebenovou regularizací
λ00,00010,0010,010,1110
chyba na tréninku0,0000,0960,1150,1700,2360,4000,573
chyba na testu19,2840,6140,4440,1150,2450,4260,597
velikost ‖w‖6 03715,18,84,02,20,910,28

I nepatrný trest λ = 0,0001 sníží chybu na testu z 19 na 0,61. S λ = 0,01 je 0,115 — dokonce o něco lépe než nejlepší polynom bez regularizace. Příliš silný trest ale model zase srazí k nedoučení: s λ = 10 je skoro rovná čára. Regularizace tedy jen posouvá otázku jinam — místo stupně hledáme λ. V rozkladu chyby je to vidět krásně: polynom stupně 9 s λ = 0,001 má vychýlení2 0,001 a rozptyl 0,09 místo 3,91.

Příklad — proč lasso nuluje a hřeben ne

Nejjednodušší případ: nechť a ∈ ℝ a λ > 0, jediný koeficient w a data, která by bez trestu chtěla w = a. Minimalizujeme (w − a)2 plus trest.

  • Hřeben, (w − a)2 + λw2: derivace 2(w − a) + 2λw = 0 dává w = a/1 + λ. Koeficient se zmenší v poměru, ale nulový nebude nikdy (pro a ≠ 0).
  • Lasso, (w − a)2 + λ|w|: pro w > 0 dává derivace 2(w − a) + λ = 0, tedy w = a − λ/2, a symetricky pro w < 0. Celkem w = sign(a) · max(|a| − λ/2, 0): od koeficientu se odečte pevná částka, a co je menší než λ/2, skončí přesně na nule.

S λ = 1: velký koeficient a = 2 hřeben stáhne na 2/2 = 1, lasso na 2 − 0,5 = 1,5. Malý a = 0,3 hřeben stáhne na 0,15, lasso na max(0,3 − 0,5, 0) = 0. Lasso tedy velké, užitečné koeficienty šetří a malé škrtá úplně.

5. Nejlepší lék: víc dat

Rozptyl modelu klesá s počtem trénovacích dat. Stejný polynom stupně 9, ale s větší trénovací sadou:

Počet trénovacích bodů122550100200
chyba na testu (stupeň 9)0,6400,1340,0910,0890,050

S dvanácti body je stupeň 9 nepoužitelný, se dvěma sty je výborný. Složitý model není špatný sám o sobě — je špatný pro málo dat. Proto dnešní obří modely potřebují obří množství dat.

Věta — rozptyl a trénovací chyba metody nejmenších čtverců

Nechť

  1. model je lineární v p parametrech, fw(x) = ∑k=1p wkφk(x) pro pevné funkce φ1, …, φp (polynom stupně d má p = d + 1 a φk(x) = xk−1);
  2. body x1, …, xn jsou pevné (nenáhodné), n ≥ p, a matice Φ ∈ ℝn×p, Φik = φk(xi), má lineárně nezávislé sloupce;
  3. yi = f(xi) + εi, kde ε1, …, εn jsou nezávislé, E[εi] = 0 a Var(εi) = σ2;
  4. f̂ = fŵ je model naučený metodou nejmenších čtverců.

Pak

1/n ∑i=1n Var(f̂(xi)) = σ2 p/n.

Je-li navíc skutečná funkce v modelu (existuje w ∈ ℝp s f(xi) = fw(xi) pro všechna i), platí také

E[1/n ∑i=1n (yi − f̂(xi))2] = σ2 (1 − p/n)

(levá strana je očekávaná trénovací MSE). Jinak k pravé straně přibude nezáporný člen vychýlení 1/n ‖(I − H)f‖2 se značením z důkazu.

Náznak důkazu: předpovědi v trénovacích bodech jsou ŷ = Hy s H = Φ(ΦTΦ)−1ΦT. Matice H je projekce na prostor dimenze p, takže její stopa je p; součet rozptylů předpovědí je σ2 · stopa(H) = σ2p. Rezidua jsou (I − H)y, projekce na zbylých n − p rozměrů, a nesou šum σ2(n − p); leží-li f v prostoru sloupců Φ, je (I − H)f = 0 a jiný příspěvek rezidua nemají. ∎

rozptyl = σ2 · p/n

rozptyl
průměrný rozptyl předpovědi v trénovacích bodech — ta část chyby, kterou model přidá tím, že se učí z náhodné sady
σ2
šum v datech; čím je větší, tím víc nesmyslu si model z dat může odnést
p
počet parametrů: každý parametr je další „stupeň volnosti“, kterým se model může přizpůsobit šumu — rozptyl s ním roste lineárně
n
počet bodů: šum se mezi víc bodů rozpustí (průměruje), proto ve jmenovateli — dvakrát víc dat, poloviční rozptyl
Nejde o složitost samotnou, ale o poměr parametrů a dat p/n.

Pro stupeň 9 (p = 10) a σ2 = 0,0625: při 12 bodech je to rozptyl = 0,0625 · 10/12 ≈ 0,052, při 200 bodech 0,0625 · 10/200 ≈ 0,003. Pozor, věta mluví jen o trénovacích bodech. Mezi nimi a hlavně u okrajů intervalu je rozptyl polynomu vysokého stupně mnohem větší — proto jsme na celém intervalu naměřili 3,91, ne 0,052 (a pomohlo k tomu i to, že každá z 200 sad měla body x jinde). Druhý vzorec vysvětluje, proč trénovací chyba lže: při 12 bodech a stupni 9 je v průměru jen 0,0625 · (1 − 10/12) ≈ 0,010, šestkrát míň než samotný šum, a u stupně 11 (p = n) přesně nula.

6. Jak zvolit správnou složitost

  • Validační sada. Testovací data nesmíme použít k volbě stupně ani λ — tím bychom se na ně přeučili taky. Z trénovacích dat se proto oddělí ještě validační část a na ní se nastavení porovnává. Testovací sada se otevře až úplně na konci.
  • Křížová validace rozdělí data na k částí a každou z nich postupně použije jako validační. Je spolehlivější při malém počtu dat; podrobně ji probere díl o vyhodnocení modelu.
  • Brzké zastavení. Při učení gradientním sestupem se sleduje validační chyba a učení se zastaví, když začne růst — model nemá čas se šum naučit.
  • Další regularizace v neuronových sítích: dropout (náhodné vypínání neuronů při učení), rozšiřování dat (pootočené, ořezané obrázky), útlum vah (weight decay — to je hřebenová regularizace pod jiným jménem).

Volba λ na validační sadě je obyčejné vyzkoušení kandidátů. Testovací data se v ní nevyskytují vůbec:

def zvol_lambda(trenink, validace, d, kandidati=[1e-4, 1e-3, 1e-2, 1e-1, 1, 10]):
    nejlepsi = None
    for lam in kandidati:
        f = proloz(trenink, d, lam)          # učí se jen z trénovacích dat
        chyba = rmse(f, validace)            # hodnotí se jen na validačních
        if nejlepsi is None or chyba < nejlepsi[1]:
            nejlepsi = (lam, chyba)
    lam = nejlepsi[0]
    return proloz(trenink + validace, d, lam)   # nakonec se učí ze všeho, co smí

Brzké zastavení je totéž, jen kandidáty jsou kroky učení — a místo všech kroků předem se zastaví, když se validační chyba dlouho nezlepšuje:

def uc_s_brzkym_zastavenim(model, trenink, validace, trpelivost=10):
    nejlepsi, vahy, bez_zlepseni = inf, model.vahy(), 0
    while bez_zlepseni < trpelivost:
        model.krok_gradientniho_sestupu(trenink)
        chyba = model.chyba(validace)
        if chyba < nejlepsi:
            nejlepsi, vahy, bez_zlepseni = chyba, model.vahy(), 0
        else:
            bez_zlepseni += 1
    model.nastav_vahy(vahy)                  # vrať se k nejlepšímu kroku
    return model

7. Překvapení moderních sítí

Podle klasické teorie by neuronová síť s miliony parametrů naučená na desítkách tisíc obrázků měla být beznadějně přeučená. Často není. Kolem roku 2019 popsali Mikhail Belkin a kolegové dvojitý sestup: když počet parametrů roste dál za hranici, kde model dokáže trénovací data přesně zapamatovat, testovací chyba po vrcholu znovu klesá. Vysvětlením je mimo jiné implicitní regularizace — gradientní sestup mezi mnoha řešeními, která trénovací data přesně vystihují, najde to „nejjednodušší“. Náš polynom stupně 11 stál přesně na vrcholu: parametrů právě tolik jako bodů. Jedno ale platí pořád: o kvalitě modelu rozhodují data, která neviděl.

Věta — gradientní sestup najde řešení s nejmenší normou

Jednoduchá dnešní formalizace „implicitní regularizace“, zatím jen pro lineární model. Nechť n < p (parametrů je víc než bodů), Φ ∈ ℝn×p má lineárně nezávislé řádky a y ∈ ℝn; pak rovnici Φw = y splňuje nekonečně mnoho w ∈ ℝp. Nechť λmax je největší vlastní číslo matice ΦTΦ, 0 < η < 1/λmax, w0 = 0 a

wt+1 = wt − η ∇‖y − Φwt‖2 = wt + 2ηΦT(y − Φwt),   t = 0, 1, 2, …

(gradientní sestup). Pak posloupnost wt konverguje k tomu řešení Φw = y, které má nejmenší ‖w‖:

w* = ΦT(ΦΦT)−1y.

Náznak důkazu: každý gradient −2ΦT(y − Φw) je tvaru ΦTu, takže w se z nuly nikdy nedostane mimo prostor řádků matice Φ. V tom prostoru je řešení Φw = y jediné, w*. Každé jiné řešení je w* + v s Φv = 0; takové v je kolmé na řádky, tedy na w*, a ‖w* + v‖2 = ‖w*‖2 + ‖v‖2. ∎

Nikdo tedy trest λ‖w‖2 nepřidal, a výsledek je přesto ten „nejklidnější“ možný — totéž, kam míří hřebenová regrese při λ → 0. U hlubokých sítí je situace složitější a je to dodnes předmět výzkumu.

8. Shrnutí

  • Přeučený model zná trénovací data i s šumem a na nových datech selže; nedoučený je moc jednoduchý, aby zachytil i to podstatné.
  • Trénovací chyba s rostoucí složitostí klesá, testovací má tvar U: na 12 bodech ze sinusovky je nejlepší stupeň 3 (0,135), stupeň 11 má na testu chybu 19,3.
  • Chyba se rozkládá na vychýlení², rozptyl a šum; jednoduché modely mají velké vychýlení, složité velký rozptyl.
  • Regularizace trestá velké parametry: stupeň 11 s λ = 0,01 dosáhl testovací chyby 0,115.
  • Víc dat snižuje rozptyl; složitost a regularizaci volíme na validační sadě, nikdy na testovací.

Chcete si to osahat? Nechte AI agenta zopakovat tenhle pokus a přidat lasso — a podívejte se, které koeficienty polynomu srazí na nulu.

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu