SVM a jádrový trik: nejširší hranice a jak ji ohnout
Hranice s největším okrajem a podpůrné vektory, měkký okraj a parametr C, zvednutí dat do většího prostoru, jádrový trik s polynomiálním a gaussovským jádrem a vliv parametru γ na přeučení.
Série Základy AI Díl 55 z 83
- Mapa umělé inteligence: co je co a jak to do sebe zapadá
- Stručná historie umělé inteligence: od Turinga po jazykové modely
- Data, model, trénink, inference: základní pojmy na jednom příkladu
- Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relace: stavebnice, ze které se skládají definice v AI
- Funkce a zobrazení: proč je každý model v AI funkce
- Logika a důkazy: pravidla, podle kterých se v AI uvažuje
- Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
- Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
- Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
- Gradientní sestup: jak se model učí
- Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
- Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
- Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
- Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
- Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
- Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
- Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
- Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
- Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
- Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
- Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
- Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
- Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
- Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
- Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
- Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
- Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
- Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
- Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
- Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
- Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
- Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
- Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
- Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
- Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
- Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
- Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
- Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
- Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
- Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
- Přeučení a regularizace: proč model, který zná data nazpaměť, selže
- Vyhodnocení modelu: křížová validace, F1 a křivka ROC
- Shlukování a snížení dimenze: k-means, PCA a t-SNE
- Klasifikace a regrese: dvě úlohy učení s učitelem
- Lineární regrese: nejmenší čtverce geometricky i maticově
- Polynomiální a nelineární regrese: jak přímku ohnout
- Logistická regrese: sigmoida, šance a křížová entropie
- Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
- Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
- Ztrátové funkce: co přesně model minimalizuje
- Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
- Ansámbly: náhodný les a gradient boosting
- SVM a jádrový trik: nejširší hranice a jak ji ohnout
- Signál a vzorkování: proč platí Nyquistův teorém
- Fourierova transformace: rozklad signálu na frekvence
- Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
- Zvuk a řeč: spektrogram, melová škála a MFCC
- Obraz jako signál: pixely, barvy, konvoluce a hrany
- Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
- Neuronová síť od nuly: zpětné šíření chyby krok za krokem
- Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
- Konvoluční sítě: jak síť poznává obrázky
- Rekurentní sítě: paměť pro posloupnosti a mizející gradient
- LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
- Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
- Embeddingy a word2vec: jak se slovo stane vektorem
- Mechanismus pozornosti: jak se model naučí, kam se dívat
- Transformery a velké jazykové modely: architektura krok za krokem
- Tokenizace: jak se text rozseká na kousky pro model
- Předtrénování a škálování: proč větší model a víc dat funguje
- Doladění a RLHF: jak se z doplňovače textu stane asistent
- Prompty, kontext a RAG: jak modelu dát správné informace
- Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
- Generativní adversariální sítě (GAN): padělatel proti detektivovi
- Difúzní modely: jak se z čistého šumu stane obrázek
- Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
- Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
- Policy gradient a PPO: učení přímo strategie
- Jak funguje AI agent: jazykový model ve smyčce s nástroji
- Programování s AI agenty: zadání, testy a kontrola
- Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat
Celá osnova série 83 z 83 témat hotovo
- Proč SVM hledá nejširší okraj a proč na řešení stačí pár podpůrných vektorů.
- Jak parametr C vyvažuje šířku okraje a chyby.
- Jak jádrový trik ohne hranici bez sestrojení obřího prostoru příznaků a co dělá parametr γ.
Co se hodí znát předem: Logistická regrese: sigmoida, šance a křížová entropie, Ztrátové funkce: co přesně model minimalizuje
V 90. letech a na začátku tisíciletí byla metoda podpůrných vektorů (SVM) králem strojového učení: rozpoznávala ručně psané číslice, třídila texty, hledala geny. Stojí na dvou elegantních nápadech. První: když jde dvě třídy oddělit mnoha přímkami, vyber tu, která nechá na obou stranách nejvíc místa. Druhý: když je oddělit přímkou nejde, převeď je do prostoru, kde to jde — a celý výpočet přitom proveď, aniž bys ten prostor kdy sestrojil. Tomu druhému se říká jádrový trik a patří k nejkrásnějším myšlenkám celého oboru.
Navazuje na díly Logistická regrese a Ztrátové funkce, kde jsme poznali hinge ztrátu.
1. Nejširší ulice mezi třídami
Čtyřicet bodů dvou tříd, které jdou oddělit přímkou bez chyby. Takových přímek je nekonečně mnoho a všechny mají na trénovacích datech stoprocentní přesnost. Která je nejlepší?
Definice — okraj a SVM s tvrdým okrajem
Nechť d, n ≥ 1 a (x1, y1), …, (xn, yn) jsou trénovací data, kde xi ∈ ℝd a yi ∈ {−1, +1} pro i = 1, …, n, a obě třídy jsou zastoupené. Nechť w ∈ ℝd, w ≠ 0, a b ∈ ℝ určují hranici — nadrovinu H = {x ∈ ℝd : w · x + b = 0} (skalární součin, norma ‖w‖ a vzdálenost od nadroviny jsou zavedené v další definici).
Hranice H data odděluje, právě když yi(w · xi + b) > 0 pro všechna i = 1, …, n; data jsou lineárně oddělitelná, právě když taková hranice existuje. Okraj (margin) oddělující hranice je šířka nejširšího pásu kolem H, ve kterém neleží žádný bod xi, tj. dvojnásobek vzdálenosti nejbližšího bodu od H:
ρ(w, b) = 2 · mini = 1, …, n |w · xi + b|/‖w‖.
SVM s tvrdým okrajem pro lineárně oddělitelná data je optimalizační úloha
minw ∈ ℝd, b ∈ ℝ ½‖w‖2 za podmínek yi(w · xi + b) ≥ 1 pro i = 1, …, n.
Její řešení (w*, b*) existuje, je jediné a jeho okraj je ρ(w*, b*) = 2/‖w*‖ — největší ze všech oddělujících hranic (odvození v další definici).
Podpůrné vektory jsou body xi, pro které podmínka platí s rovností, yi(w* · xi + b*) = 1. Řešení závisí jen na nich: kdybychom všechny ostatní body z dat vynechali, vyjde stejné (w*, b*).
SVM tedy ze všech přímek (nadrovin), které třídy oddělí, vybere tu, od které má nejbližší bod největší vzdálenost.
Mezi dvěma vesnicemi chceme postavit co nejširší ulici, aby žádný dům nestál na silnici. Osa ulice je hranice. Široká ulice je pojistka: nový dům, postavený trochu vedle těch dosavadních, pořád padne na správnou stranu. Šířku ulice určí jen domy, které stojí přímo u chodníku — ostatní by se mohly přestěhovat kamkoli dál a ulice by zůstala stejná.
Proč je okraj 2/‖w‖
Definice — nadrovina, norma a vzdálenost bodu od ní
Nechť d ≥ 1. Pro u, v ∈ ℝd je skalární součin u · v = ∑j=1d ujvj a (eukleidovská) norma vektoru w ∈ ℝd je jeho délka
‖w‖ = √w · w = √w12 + … + wd2.
Nechť w ∈ ℝd, w ≠ 0, a b ∈ ℝ. Nadrovina s normálovým vektorem w a posunem b je množina
H = {x ∈ ℝd : w · x + b = 0}.
Vektor w je na ni kolmý: pro všechna x, x′ ∈ H je w · (x − x′) = 0. V rovině (d = 2) je nadrovina přímka, v prostoru (d = 3) rovina. Vzdálenost bodu x ∈ ℝd od H je dist(x, H) = minx′ ∈ H ‖x − x′‖.
Věta. Nechť w ∈ ℝd, w ≠ 0, b ∈ ℝ, H je nadrovina jako výše a x ∈ ℝd. Pak
dist(x, H) = |w · x + b|/‖w‖.
Důkaz. Nejbližší bod H k bodu x je jeho kolmý průmět, tedy bod tvaru x0 = x − t · w/‖w‖, kde t ∈ ℝ je (znaménková) vzdálenost a |t| = ‖x − x0‖. Bod x0 leží na nadrovině: 0 = w · x − t (w · w)/‖w‖ + b = w · x + b − t‖w‖, takže t = w · x + b/‖w‖. ∎
Podmínky SVM chtějí yi(w · xi + b) ≥ 1, a protože |yi| = 1, je |w · xi + b| ≥ 1: každý bod je od hranice aspoň 1/‖w‖ daleko a podpůrné vektory přesně tolik. Ulice má dva chodníky, takže šířka je 2/‖w‖.
minw, b ½‖w‖2 za podmínek yi (w · xi + b) ≥ 1 pro všechna i
- ½‖w‖2
- šířka ulice je 2/‖w‖, takže nejširší ulice = nejkratší w. Místo ‖w‖ se minimalizuje jeho čtverec (má stejné minimum, ale je hladký a kvadratický — úloha je konvexní) a ½ jen zjednoduší derivaci na w
- yi
- štítek ±1 otočí znaménko u třídy −1, takže jedna nerovnost platí pro obě třídy: kladné body musí být na kladné straně, záporné na záporné
- w · xi + b
- skóre bodu: znaménko říká, na které straně hranice leží, velikost (dělená ‖w‖) jak daleko
- ≥ 1
- každý bod musí stát aspoň na chodníku. Jednička je jen volba měřítka: w a b lze vynásobit libovolným kladným číslem a hranice se nezmění, tak je škálujeme tak, aby nejbližší body měly skóre přesně ±1
Hranici SVM určují jen 3 podpůrné vektory ze 40 bodů a ulice je široká 1,90. Logistická regrese oddělí body také bez chyby, ale její hranice nechá kolem sebe volný pás široký jen 1,74 — nesnaží se o širokou ulici, ale o pravděpodobnosti, a na to ji ovlivňují všechny body.
Příklad — přepočítejte si hranici z obrázku
Naučené SVM má w = (0,914; 0,526) a b = −0,049. Tři podpůrné vektory:
| bod | x1 | x2 | y | w · x + b | α |
|---|---|---|---|---|---|
| A | −1,013 | −0,048 | −1 | −1,00 | 0,556 |
| B | 1,291 | −0,248 | +1 | +1,00 | 0,129 |
| C | 0,431 | 1,246 | +1 | +1,00 | 0,427 |
bod A: 0,914 · (−1,013) + 0,526 · (−0,048) − 0,049 = −0,925 − 0,025 − 0,049 = −1,00, (−1) · (−1,00) = 1 ≥ 1 (přesně na chodníku; barvy podle vzorce výše)
‖w‖ = √0,9142 + 0,5262 = √0,835 + 0,277 = √1,112 = 1,054
šířka ulice 2/‖w‖ = 2/1,054 = 1,90
w = ∑ αiyixi: 0,556 · (−1) · (−1,013; −0,048) + 0,129 · (1,291; −0,248) + 0,427 · (0,431; 1,246) = (0,914; 0,526)
Zbylých 37 bodů má skóre (se správným znaménkem) větší než 1 a váhu α = 0 — v posledním řádku nefigurují vůbec. Proto by se mohly „přestěhovat“, kam chtějí, a hranice by se nepohnula. Váhy α vysvětlí oddíl o jádrovém triku.
2. Měkký okraj: když se třídy překrývají
Skutečná data skoro nikdy nejdou oddělit bez chyby. SVM proto dovolí některým bodům stát na chodníku nebo i na špatné straně — za poplatek.
Definice — SVM s měkkým okrajem
Nechť (x1, y1), …, (xn, yn) jsou trénovací data, xi ∈ ℝd, yi ∈ {−1, +1} (nemusí být lineárně oddělitelná), a nechť C > 0 je parametr. SVM s měkkým okrajem je optimalizační úloha
minw ∈ ℝd, b ∈ ℝ ½‖w‖2 + C ∑i=1n max(0, 1 − yi(w · xi + b)).
Člen max(0, 1 − yi(w · xi + b)) je hinge ztráta bodu i (viz Ztrátové funkce). Pro řešení (w*, b*) jsou podpůrné vektory body xi, pro které yi(w* · xi + b*) ≤ 1, tj. leží na okraji, uvnitř pásu, nebo na špatné straně hranice. Ostatní body mají nulovou ztrátu a jejich vynechání řešení nezmění.
Parametr C tedy určuje, kolik stojí porušení okraje proti šířce ulice.
C je pokuta za každý dům na silnici. Malé C: ať si tam pár domů stojí, hlavně ať je ulice široká. Velké C: ulice smí být úzká, ale domy na ní nestrpíme. Je to stejná hinge ztráta z dílu o ztrátových funkcích, jen s regularizací v jiném převleku.
minw, b ½‖w‖2 + C ∑i max(0, 1 − yi(w · xi + b))
- ½‖w‖2
- stejně jako u tvrdého okraje: táhne k široké ulici. Z pohledu ztrátových funkcí je to L2 regularizace
- C
- kurz, kterým se přepočítávají porušení na šířku ulice. Bez něj by šlo jen o jeden z extrémů: buď nejširší ulici bez ohledu na chyby, nebo žádné chyby bez ohledu na šířku
- yi(w · xi + b)
- skóre bodu se znaménkem podle jeho třídy: kladné = správná strana, záporné = špatná
- 1
- poloha chodníku. Pokutuje se už bod, který je na správné straně, ale uvnitř ulice — jinak by SVM nemělo důvod okraj vůbec držet
- max(0, …)
- hinge ztráta: bod za chodníkem neplatí nic, a proto řešení neovlivní. Kdo je uvnitř, platí lineárně podle toho, jak hluboko — jeden špatný bod tak nepřebije všechny ostatní, jako by to udělal čtverec
Definice — skluzové proměnné
Nechť data (xi, yi), i = 1, …, n, a parametr C > 0 jsou jako v definici měkkého okraje. Formulace se skluzovými proměnnými (slack) ξ = (ξ1, …, ξn) ∈ ℝn je úloha
minw ∈ ℝd, b ∈ ℝ, ξ ∈ ℝn ½‖w‖2 + C ∑i=1n ξi za podmínek
- yi(w · xi + b) ≥ 1 − ξi pro i = 1, …, n,
- ξi ≥ 0 pro i = 1, …, n.
Pro pevná w, b je nejmenší přípustné ξi = max(0, 1 − yi(w · xi + b)) a cíl s ξi roste, takže v optimu platí právě tahle rovnost a úloha má stejná optimální w, b jako úloha s hinge ztrátou.
ξi = 0: bod je na chodníku nebo za ním. 0 < ξi ≤ 1: uvnitř ulice, ale na správné straně (nebo přímo na hranici). ξi > 1: na špatné straně hranice. Každý chybně zařazený bod tedy přispěje do ∑ ξi aspoň jedničkou a součet je horní mez počtu chyb na tréninkových datech.
Příklad — co zaplatí model s C = 1
Na 100 překrývajících se bodech vyjde pro C = 1 hranice w = (2,068; 1,480), b = 0,314.
‖w‖2 = 2,0682 + 1,4802 = 4,278 + 2,191 = 6,469, šířka ulice 2/√6,469 = 2/2,543 = 0,79
bodů s ξ > 0 (uvnitř ulice nebo za hranicí): 21, z toho na špatné straně (ξ > 1): 5 (přesnost na tréninku 95 %)
součet pokut ∑ ξi = ∑ max(0, …) = 15,47
hodnota cíle: ½ · 6,469 + 1 · 15,47 = 3,23 + 15,47 = 18,70 (barvy podle vzorce měkkého okraje výše)
Pokuty tu převažují nad šířkou zhruba pětkrát. S C = 0,01 je to naopak: ∑ ξ = 41,8, ale v cíli se to počítá jen jako 0,01 · 41,8 = 0,42 — a tak se vyplatí ulici rozšířit na 3,47, i když do ní spadne 74 bodů.
| C | 0,01 | 0,1 | 1 | 100 |
|---|---|---|---|---|
| šířka okraje 2/‖w‖ | 3,47 | 1,61 | 0,79 | 0,57 |
| podpůrných vektorů (ze 100) | 76 | 40 | 23 | 18 |
| přesnost na 4 000 nových bodech | 91,0 % | 90,7 % | 90,6 % | 90,8 % |
S rostoucím C se ulice zužuje a podpůrných vektorů ubývá. Přesnost se na těchto datech skoro nemění — když jsou třídy dvě oblaka bodů, je správná přímka skoro stejná, ať je ulice úzká, nebo široká. Na C začne záležet u složitějších hranic, kde příliš velké C vede k přeučení; tam se volí křížovou validací.
3. Když přímka nestačí: zvedni data
Na přímce leží body dvou tříd: zelené uprostřed, červené po stranách. Žádný jeden práh je neoddělí. Stačí ale ke každému bodu x přidat druhou souřadnici x2 — a body se zvednou na parabolu, kde je oddělí obyčejná vodorovná přímka:
To je stejný trik jako kvadratické příznaky v dílu o logistické regresi. Má jeden háček: příznaků je rychle moc. Všech součinů nejvýš třetího stupně ze 100 příznaků je 176 851; z obrázku 28 × 28 pixelů (784 příznaků) přes 80 milionů. Spočítat je pro každý bod a naučit na nich model je nepraktické.
Definice — zobrazení do prostoru příznaků a počet monomů
Nechť p, D ≥ 1. Zobrazení příznaků je libovolná funkce φ : ℝp → ℝD, která ze vstupu x ∈ ℝp udělá nový, obvykle delší vektor φ(x) ∈ ℝD. Lineární model v prostoru příznaků je funkce
f(x) = w · φ(x) + b, w ∈ ℝD, b ∈ ℝ;
učí se tedy na φ(x) místo na x. Na obrázku je p = 1, D = 2, φ(x) = (x, x2) a hranice x2 = 1 je v novém prostoru přímka s w = (0, 1), b = −1 — v původním prostoru jsou to dva prahy x = ±1.
Nechť x = (x1, …, xp) ∈ ℝp a k = (k1, …, kp) ∈ ℕ0p. Monom s exponenty k je číslo x1k1 ⋯ xpkp; jeho stupeň je k1 + … + kp. Pro d ≥ 1 je polynomiální zobrazení stupně d zobrazení φd : ℝp → ℝD, jehož složky jsou všechny monomy stupně nejvýš d, každý právě jednou (včetně konstanty 1 pro k = (0, …, 0)). Jejich počet je
D = |{k ∈ ℕ0p : k1 + … + kp ≤ d}| = (p + d)!/p! d!,
protože každý monom odpovídá právě jednomu rozdělení d „jednotek stupně“ mezi p proměnných a jednu „nevyužitou“ přihrádku.
p = 2, d = 2: 4!/2! · 2! = 6 (1, x1, x2, x12, x22, x1x2)
p = 100, d = 3: 103!/100! · 3! = 103 · 102 · 101/6 = 176 851
p = 784, d = 3: 787!/784! · 3! = 787 · 786 · 785/6 = 80 931 145
Počet roste jako pd/d! — pro pevný stupeň polynomiálně, ale s velkou mocninou.
4. Jádrový trik
Definice — jádro a jádrový trik
Nechť p, D ≥ 1 a φ : ℝp → ℝD je zobrazení příznaků. Jádro příslušné k φ je funkce K : ℝp × ℝp → ℝ,
K(x, z) = φ(x) · φ(z) pro všechna x, z ∈ ℝp,
tj. skalární součin obrazů v prostoru příznaků. Obecněji se jádrem nazývá každá funkce K, ke které nějaké takové φ existuje, i do nekonečně rozměrného prostoru se skalárním součinem (kdy to nastane, říká Mercerova podmínka níže).
Nechť (xi, yi), i = 1, …, n, jsou trénovací data. SVM v prostoru příznaků se dá zapsat tak, že data potřebuje jen ve skalárních součinech φ(xi) · φ(x): rozhodovací funkce je
f(x) = ∑i=1n αiyiK(xi, x) + b,
kde α1, …, αn ≥ 0 jsou váhy z duální úlohy (níže), b ∈ ℝ, a αi > 0 jen pro podpůrné vektory; bod x zařadíme do třídy sign f(x). Jádrový trik je postup: všude, kde data vystupují jen ve skalárních součinech φ(x) · φ(z), dosadit hodnotu K(x, z) spočítanou přímo z x a z, a vektory φ(x) nikdy nepočítat.
Častá jádra (pro x, z ∈ ℝp):
- polynomiální stupně d ≥ 1: K(x, z) = (x · z + 1)d — odpovídá φ, jehož složky jsou (vhodně vynásobené) monomy stupně nejvýš d;
- gaussovské (RBF) s parametrem γ > 0: K(x, z) = exp(−γ‖x − z‖2) — odpovídá nekonečně rozměrnému prostoru příznaků.
Pro dva body v rovině je (x · z + 1)2 jedno násobení a jedno umocnění — a přitom dá přesně skalární součin vektorů se šesti kvadratickými příznaky, které jsme nikde nesestrojili. Pro RBF jádro by ten prostor měl nekonečně rozměrů; jádro se přesto spočítá na jeden řádek. Intuitivně je RBF jádro míra podobnosti: 1 pro stejné body, skoro 0 pro vzdálené. Výsledný model pak říká: „nový bod patří ke třídě podpůrných vektorů, kterým je nejpodobnější“ — vážené hlasování sousedů, podobně jako kNN.
Duální úloha: kde se vzaly skalární součiny
Proč smí SVM data „vidět“ jen přes skalární součiny? Z Lagrangeových podmínek optimality pro měkký okraj vyjde, že optimální w je vždy kombinací trénovacích bodů, w = ∑i αiyixi (u tvrdého okraje jsme to přepočítali výše). Když to dosadíme zpátky, zmizí w i b a zbude úloha jen pro váhy α — duální úloha:
maxα ∑i αi − ½ ∑i∑j αiαj yiyj K(xi, xj) za podmínek 0 ≤ αi ≤ C, ∑i αiyi = 0
- ∑ αi
- αi je „síla“, kterou bod i tlačí na hranici. Tenhle člen odměňuje každý bod, který se zapojí — sám by poslal všechny váhy nahoru
- yiyj
- +1 pro dvojici ze stejné třídy, −1 pro dvojici z různých. Podobné body téže třídy se tak navzájem brzdí (stačí, když tlačí jeden z nich), podobné body různých tříd naopak váhu dostanou — jsou to ty u hranice
- K(xi, xj)
- jediné místo, kde do úlohy vstupují data — a jen jako podobnost dvojic. Proto stačí umět spočítat K, ne φ
- 0 ≤ αi ≤ C
- strop C je měkký okraj v duálním převleku: jeden bod nesmí tlačit libovolně silně, takže ani bod na špatné straně nepřetáhne hranici k sobě. Bez stropu (C → ∞) je to tvrdý okraj
- ∑ αiyi = 0
- vznikne z derivace podle posunu b: síly obou tříd musí být v rovnováze, jinak by se hranice dala posunout a cíl zlepšit
Na oddělitelných datech z prvního obrázku to sedí: kladné váhy mají jen tři podpůrné vektory, a jejich součet se znaménky je 0,556 · (−1) + 0,129 · (+1) + 0,427 · (+1) = 0 (barvy podle vzorce výše). Podmínce ∑ αiyi = 0 odpovídá i to, že síla jediného záporného podpůrného vektoru vyvažuje dva kladné.
Věta — polynomiální jádro je skalární součin šesti příznaků
Nechť φ : ℝ2 → ℝ6 je zobrazení
φ(x) = (1, √2 x1, √2 x2, x12, x22, √2 x1x2) pro x = (x1, x2) ∈ ℝ2.
Pak pro všechna x, z ∈ ℝ2 platí (x · z + 1)2 = φ(x) · φ(z).
Důkaz. (x1z1 + x2z2 + 1)2 = 1 + 2x1z1 + 2x2z2 + x12z12 + x22z22 + 2x1z1x2z2, a to je člen po členu součin složek φ(x) a φ(z). Odmocniny ze dvou jsou tam proto, aby součin dvou složek dal právě koeficient 2. ∎
Příklad: x = (1, 2), z = (3, −1).
jádrem: x · z = 3 − 2 = 1, (1 + 1)2 = 4 (dvě násobení, sčítání a umocnění)
φ(x) = (1, √2, 2√2, 1, 4, 2√2), φ(z) = (1, 3√2, −√2, 9, 1, −3√2)
skalární součin: 1 + 6 − 4 + 9 + 4 − 12 = 4
Stejné číslo, ale bez šestisložkových vektorů. Pro stupeň 3 a 784 pixelů je to necelých 800 násobení místo sestrojení dvou vektorů s 80 miliony složek.
Definice — kdy je funkce jádrem (Mercerova podmínka)
Ne každá funkce podobnosti je skalárním součinem v nějakém prostoru. Nechť X ⊆ ℝp je množina vstupů a K : X × X → ℝ funkce.
- K je symetrická, právě když K(x, z) = K(z, x) pro všechna x, z ∈ X.
- Pro n ≥ 1 a body x1, …, xn ∈ X je Gramova matice G ∈ ℝn×n dána předpisem Gij = K(xi, xj) pro i, j = 1, …, n.
- Symetrická matice G ∈ ℝn×n je pozitivně semidefinitní, právě když ∑i=1n ∑j=1n cicjGij ≥ 0 pro všechna c = (c1, …, cn) ∈ ℝn.
Věta (Mercerova podmínka). Nechť K : X × X → ℝ je symetrická. Pak existuje prostor se skalárním součinem ⟨·, ·⟩ (případně nekonečně rozměrný) a zobrazení φ do něj takové, že K(x, z) = ⟨φ(x), φ(z)⟩ pro všechna x, z ∈ X, právě když pro každé n ≥ 1 a každé body x1, …, xn ∈ X je Gramova matice pozitivně semidefinitní.
Právě tahle vlastnost dělá z duální úlohy konvexní úlohu (hledá se maximum konkávní funkce), takže má jediné optimum a algoritmus nezávisí na startu. Polynomiální i gaussovské jádro ji splňují.
Jak se to učí: SMO
Duální úlohu řeší algoritmus SMO (Sequential Minimal Optimization, John Platt, 1998). Nejmenší krok, který neporuší podmínku ∑ αiyi = 0, je změnit dvě váhy naráz — a pro dvě proměnné se optimum spočítá vzorcem. Naše obrázky počítá jeho zjednodušená verze:
def smo(X, y, K, C, tol=1e-3):
a = [0] * n; b = 0
f = lambda x: sum(a[j] * y[j] * K(X[j], x) for j in range(n)) + b
while ještě nebylo 50 průchodů po sobě beze změny:
for i in range(n):
Ei = f(X[i]) - y[i] # chyba na bodu i
if (y[i]*Ei < -tol and a[i] < C) or (y[i]*Ei > tol and a[i] > 0):
j = náhodný index různý od i; Ej = f(X[j]) - y[j]
L, H = meze pro a[j], aby 0 ≤ a ≤ C a ∑ a·y zůstal stejný
eta = 2*K(X[i],X[j]) - K(X[i],X[i]) - K(X[j],X[j]) # zakřivení, < 0
aj_nove = ořízni(a[j] - y[j] * (Ei - Ej) / eta, L, H)
a[i] += y[i] * y[j] * (a[j] - aj_nove) # aby ∑ a·y zůstal 0
a[j] = aj_nove
b = přepočti z bodu, jehož nová váha leží mezi 0 a C
return a, b # podpůrné vektory: a > 0
Podmínka v if hledá body, které porušují podmínky optimality: bod uvnitř ulice, který ještě
nemá plnou váhu C, nebo bod daleko za chodníkem, který přitom váhu má. Když už žádný takový není,
je dosaženo optima.
Zkusme to na kruhu: 200 bodů ve čtverci, třída „uvnitř“ v kruhu, a 8 % štítků náhodně prohozených. Model, který by znal skutečný kruh, by měl na nových bodech přesnost 92,2 %.
Lineární SVM nemá šanci: přesnost 69,0 %, tedy jen tolik, kolik dá „vždycky venku“. Polynomiální jádro 2. stupně najde elipsu a dosáhne 87,5 % (s C = 100; s C = 1 je okraj tak měkký, že elipsu zploští a má jen 84,2 %). RBF jádro s γ = 1 má 88,3 %.
5. Parametr γ: jak daleko sahá podobnost
K(x, z) = exp(−γ ‖x − z‖2)
- K(x, z)
- podobnost dvou bodů mezi 0 a 1; v rozhodovací funkci určuje, jak silně podpůrný vektor xi „hlasuje“ o novém bodu
- ‖x − z‖2
- čtverec vzdálenosti: podobnost má záviset jen na tom, jak daleko body jsou, ne kde leží nebo kterým směrem od sebe. Čtverec místo vzdálenosti dělá z jádra hladký zvon bez špičky uprostřed
- γ
- měřítko: převádí vzdálenost v jednotkách dat na „vzdálenost v jednotkách podobnosti“. Podobnost klesne na 1/e ≈ 0,37 ve vzdálenosti 1/√γ — to je dosah jednoho bodu
- exp(−…)
- udělá z nezáporného čísla podobnost: pro stejné body exp(0) = 1, se vzdáleností klesá k 0, nikdy záporná. Exponenciála čtverce vzdálenosti navíc zaručí, že Gramova matice je vždy pozitivně semidefinitní — funkce je opravdu jádro, a to s nekonečně rozměrným φ (Taylorova řada exponenciály má nekonečně mnoho členů)
Příklad — jak rychle podobnost klesá
Data leží ve čtverci [−1, 1]2, kruh má poloměr 0,6 a nejbližší soused je od bodu v průměru 0,072 daleko.
| γ | dosah 1/√γ | K ve vzdálenosti 0,1 | 0,5 | 1 |
|---|---|---|---|---|
| 0,1 | 3,16 | 0,999 | 0,975 | 0,905 |
| 1 | 1 | 0,990 | 0,779 | 0,368 |
| 10 | 0,32 | 0,905 | 0,082 | 0,000 05 |
| 100 | 0,1 | 0,368 | 1 · 10−11 | ≈ 0 |
| 1 000 | 0,032 | 0,000 05 | ≈ 0 | ≈ 0 |
γ = 1, vzdálenost 0,5: K = exp(−1 · 0,52) = exp(−0,25) = 0,779 (barvy podle vzorce výše)
γ = 1 000, nejbližší soused (0,072): K = exp(−1 000 · 0,0722) = exp(−5,2) = 0,006
S γ = 0,1 je dosah větší než celý čtverec (úhlopříčka 2,83) — všechny body jsou si skoro stejně podobné a hranice nemá jak se ohnout kolem kruhu. S γ = 1 000 nevidí bod ani svého nejbližšího souseda; každý je ostrůvek sám pro sebe. Nový bod daleko od všech dostane f(x) ≈ b = −0,30, tedy „venku“.
| RBF, C = 1, γ = | 0,1 | 1 | 10 | 100 | 1 000 |
|---|---|---|---|---|---|
| podpůrných vektorů (z 200) | 166 | 103 | 99 | 175 | 198 |
| přesnost na tréninku | 59,0 % | 88,5 % | 90,0 % | 95,0 % | 98,5 % |
| přesnost na 4 000 nových | 69,0 % | 88,3 % | 87,2 % | 86,0 % | 73,3 % |
γ říká, jak rychle podobnost se vzdáleností klesá. Malé γ = každý bod je podobný skoro všem, hranice je moc hladká a model neudělá nic lepšího než „vždycky venku“. Velké γ = každý bod je podobný jen sám sobě: s γ = 1 000 jsou podpůrnými vektory skoro všechny body (198 z 200), model kolem každého nakreslí malý ostrůvek, na tréninku má 98,5 % a na nových datech 73,3 %. Je to stejné přeučení jako u kNN s jedním sousedem. γ a C se proto volí spolu, obvykle mřížkou hodnot a křížovou validací. Nejlepší nalezené SVM má 88,3 % při stropu 92,2 % — rozdíl padá hlavně na to, že 200 bodů s 8 % chybných štítků kruh přesně neurčí.
6. SVM dnes
- Historie. Myšlenka maximálního okraje pochází od Vladimira Vapnika a Alexeje Červoněnkise z 60. let; jádrový trik k ní v roce 1992 přidali Bernhard Boser, Isabelle Guyonová a Vapnik, měkký okraj v roce 1995 Corinna Cortesová a Vapnik.
- Síla. Funguje dobře s málo daty a mnoha příznaky (texty, geny), má jasnou geometrickou interpretaci a úloha je konvexní — žádná lokální minima, žádné závislosti na startu.
- Slabina. Jádrové SVM potřebuje matici jader n × n: pro milion příkladů bilion čísel. Pro velká data se proto používá lineární SVM, nebo jádro aproximuje.
- Proč ho vystřídaly sítě. Jádro je pevně dané předem — člověk musí vybrat, jaká podobnost dává smysl. Neuronové sítě se zobrazení φ učí z dat samy, a s velkým množstvím dat to vychází lépe.
7. Shrnutí
- SVM hledá hranici s nejširším okrajem; na oddělitelných datech ji určily 3 podpůrné vektory ze 40 a okraj byl 1,90 (logistická regrese 1,74).
- Měkký okraj dovolí porušení za cenu C; s rostoucím C se okraj zúžil z 3,47 na 0,57 a podpůrných vektorů ubylo ze 76 na 18.
- Nelineární hranici lze získat zobrazením do většího prostoru příznaků — jen příznaků je rychle moc (ze 784 přes 80 milionů).
- Jádrový trik počítá skalární součiny v tom prostoru přímo; na kruhu dalo RBF jádro 88,3 %, lineární 69,0 %.
- Parametr γ řídí dosah podobnosti: příliš velké γ (1 000) udělalo ze skoro všech bodů podpůrné vektory a přesnost spadla na 73,3 %.
Chcete si to osahat? Nechte AI agenta pustit SVM s RBF jádrem na kruhových nebo měsícových datech a projít mřížku hodnot C a γ — kde leží nejlepší kombinace?
Máte na to jiný názor? Napište na support@coden-app.com.