Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
Čtyři třídy v rovině: jeden proti všem, jeden proti jednomu a softmaxová regrese, matice záměn, vlastnosti softmaxu, teplota při výběru dalšího slova a klasifikace s více štítky.
Série Základy AI Díl 50 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
- Jak z binárních klasifikátorů složit vícetřídní a kde to selhává.
- Co dělá softmax a proč vrací skutečné rozdělení pravděpodobnosti.
- Jak teplota ovlivňuje, které slovo jazykový model vybere.
Co se hodí znát předem: Logistická regrese: sigmoida, šance a křížová entropie
Logistická regrese umí rozhodnout mezi dvěma možnostmi. Svět jich ale nabízí víc: deset číslic, tisíc druhů objektů na fotce, desítky tisíc slov, kterými může pokračovat věta. Jak z dvoutřídního klasifikátoru udělat vícetřídní? Buď poskládat několik dvoutřídních dohromady, nebo vzít funkci, která umí rozdělit pravděpodobnost mezi libovolně mnoho tříd najednou — softmax. Tu potkáte na konci téměř každé neuronové sítě, včetně jazykových modelů.
Navazuje na díl Logistická regrese.
1. Čtyři třídy v rovině
Definice — vícetřídní klasifikace
Nechť 𝒳 je množina možných vstupů (u nás 𝒳 = ℝ2) a K ∈ ℕ, K > 2, je počet tříd, které očíslujeme 1, …, K. Vícetřídní klasifikace je úloha, ve které
- každý příklad má vstup x ∈ 𝒳 a cíl (třídu) y ∈ {1, …, K} — patří tedy právě do jedné třídy;
- hledáme klasifikátor, tj. funkci f : 𝒳 → {1, …, K}, pro kterou f(x) = y u co nejvíce příkladů;
- pravděpodobnostní klasifikátor navíc každému x přiřadí rozdělení pravděpodobnosti na třídách, vektor (P(y = 1 | x), …, P(y = K | x)) s nezápornými složkami a součtem 1.
(Když může příklad patřit do více tříd najednou, jde o klasifikaci s více štítky, o které je řeč na konci.)
Třídicí linka na ovoce: jablko, hruška, švestka, nebo meruňka — vždycky právě jedno. Model má říct, které, a ideálně i s jakou jistotou.
Definice — Iversonova závorka a kódování 1 z K
Nechť V je výrok. Iversonova závorka výroku V je číslo
[V] = 1, je-li V pravdivý, [V] = 0, je-li V nepravdivý.
Nechť K ∈ ℕ, K ≥ 2, a y ∈ {1, …, K}. Kódování 1 z K (one-hot) třídy y je vektor
([y = 1], [y = 2], …, [y = K]) ∈ {0, 1}K,
tedy vektor, který má na pozici y jedničku a na všech ostatních nulu ([y = k] = 1, právě když k je skutečná třída). Pro naše čtyři třídy A, B, C, D (očíslované 1 až 4) je třída C vektor (0, 0, 1, 0). Je to „dokonale jisté“ rozdělení pravděpodobnosti, se kterým budeme porovnávat předpovědi modelu.
Naše data: čtyři třídy po padesáti bodech. Třídy A, B a C leží vlevo, vpravo a nahoře, třída D uprostřed mezi nimi. Úspěch měříme na 4 000 nových bodech (tisíc z každé třídy).
2. Jeden proti všem
Definice — jeden proti všem (one-vs-rest)
Nechť K > 2 je počet tříd 1, …, K a (x1, y1), …, (xn, yn) jsou trénovací příklady, xi ∈ ℝd, yi ∈ {1, …, K}. Metoda jeden proti všem:
- pro každé k = 1, …, K vytvoří binární úlohu s cíli [yi = k] ∈ {0, 1} („k, nebo cokoli jiného“) a naučí na všech n příkladech binární klasifikátor se skóre zk : ℝd → ℝ (u nás logistickou regresi; skóre > 0 znamená „ano, třída k“);
- novému bodu x ∈ ℝd předpoví třídu s největším skóre ŷ(x) = argmaxk ∈ {1, …, K} zk(x), tj. takové k, že zk(x) ≥ zl(x) pro všechna l (při shodě rozhodne pevně zvolené pravidlo).
Čtyři specialisté, každý pozná jen svou třídu. Zeptáme se všech a věříme tomu, kdo zní nejjistěji. Jednoduché, ale každý specialista se učil sám a nikdo jim neřekl, že jejich odpovědi se pak budou porovnávat.
Vlevo jsou vidět hranice tří binárních klasifikátorů. Čtvrtá, „D proti všem“, chybí: třída D leží uprostřed a žádná přímka ji od ostatních neoddělí. Klasifikátor proto rezignoval a neřekne „D“ nikde — na testu ani u jednoho bodu. Ve 12,9 % roviny neřekne „ano“ žádný ze čtyř specialistů, ve 25,2 % jich řekne „ano“ víc. Výběr největšího skóre to přesto zachrání: uprostřed mají všichni ostatní skóre hluboko v záporu a „nejmenší ne“ patří D. Celková přesnost je 93,5 % a ze tříd D najde 83,5 %.
Horší je, co dostaneme místo pravděpodobností. Uprostřed třídy D, v bodě (0; 0,6), dají sigmoidy čtyř klasifikátorů dohromady jen 0,25 — „s pravděpodobností 75 % to není nic“. V bodě (−3; 3) mezi A a C řekne klasifikátor A 0,999 a klasifikátor C 1,000: součet 2,22. Čísla jednotlivých specialistů nejsou rozdělením pravděpodobnosti a mezi sebou se srovnávají špatně.
Příklad — skóre a sigmoidy čtyř specialistů ve dvou bodech
| bod | A | B | C | D | součet | |
|---|---|---|---|---|---|---|
| (0; 0,6) | skóre zk | −8,00 | −13,47 | −8,49 | −1,08 | |
| σ(zk) | 0,0003 | 0,0000 | 0,0002 | 0,253 | 0,25 | |
| (−3; 3) | skóre zk | 7,28 | −57,38 | 14,55 | −1,29 | |
| σ(zk) | 0,999 | 0,000 | 1,000 | 0,216 | 2,22 |
Uprostřed jsou všechna skóre záporná („ne“ říkají všichni) a argmax vybere D, protože −1,08 je „nejmenší ne“: σ(−1,08) = 1/1 + e1,08 ≈ 1/3,9 ≈ 0,25. V bodě (−3; 3) říkají „ano“ dva a vyhraje C s větším skóre.
3. Jeden proti jednomu
Definice — jeden proti jednomu (one-vs-one)
Nechť K > 2 je počet tříd 1, …, K a trénovací příklady (xi, yi) jsou jako výše. Metoda jeden proti jednomu:
- pro každou dvojici tříd a < b naučí binární klasifikátor se skóre zab : ℝd → ℝ jen na příkladech, pro které yi ∈ {a, b}; zab(x) > 0 znamená třídu a, jinak b. Dvojic, a tedy klasifikátorů, je K(K − 1)/2;
- novému bodu x dá každý klasifikátor jeden hlas jedné ze svých dvou tříd; třída k tak dostane hk(x) = ∑b > k [zkb(x) > 0] + ∑a < k [zak(x) ≤ 0] hlasů (Iversonova závorka viz výše);
- předpoví se třída s nejvíc hlasy, ŷ(x) = argmaxk hk(x); při shodě hlasů vyhraje třída s menším číslem.
Turnaj každý s každým: A proti B, A proti C, … Pro čtyři třídy šest zápasů, pro deset číslic 45, pro tisíc tříd skoro půl milionu. Každý zápas je ale jednodušší — D se odděluje vždy jen od jedné sousední třídy, a to přímka zvládne.
Šest klasifikátorů dá přesnost 93,4 % a třídu D najde v 88,8 % případů — líp než jeden proti všem. Pro velký počet tříd je ale turnaj nepraktický a pravděpodobnosti nedává vůbec.
def jeden_proti_jednomu(x, klasifikatory, K):
# klasifikatory[(i, j)] = váhy w naučené jen na třídách i a j,
# skóre > 0 znamená „i“; dvojic je K(K − 1)/2: 6, pro K = 10 už 45
hlasy = [0] * K
for (i, j), w in klasifikatory.items():
if skal(w, x) > 0:
hlasy[i] += 1
else:
hlasy[j] += 1
return argmax(hlasy) # při shodě hlasů vyhraje třída s menším číslem
Každá třída sehraje K − 1 zápasů, takže pro čtyři třídy může mít nejvýš tři hlasy. Pro tisíc tříd je dvojic 1000 · 999/2 = 499 500 a každý bod musí projít všemi.
4. Softmax
Definice — funkce softmax a softmaxová regrese
Nechť K ∈ ℕ, K ≥ 2. Softmax je funkce softmax : ℝK → ℝK, která vektoru z = (z1, …, zK) (jeho složkám říkáme logity) přiřadí vektor se složkami
softmax(z)k = ezk/∑j=1K ezj, k = 1, …, K.
Pro každé z ∈ ℝK platí softmax(z)k > 0 pro všechna k a ∑k=1K softmax(z)k = 1, takže softmax(z) je rozdělení pravděpodobnosti na třídách {1, …, K}.
Nechť dále x = (1, x1, …, xd) ∈ ℝd+1 je vektor příznaků doplněný o jedničku pro úsek a w1, …, wK ∈ ℝd+1 jsou vektory vah jednotlivých tříd. Softmaxová regrese (multinomiální logistická regrese) je model, který vektoru x přiřadí
- skóre (logity) zk(x) = wk · x pro k = 1, …, K;
- pravděpodobnosti P(y = k | x) = softmax(z1(x), …, zK(x))k;
- předpověď ŷ(x) = argmaxk P(y = k | x) = argmaxk zk(x).
Všechny váhy w1, …, wK se učí společně minimalizací křížové entropie (níže).
Každá třída dostane skóre. Exponenciála z nich udělá kladná čísla a zvýrazní rozdíly: skóre o jedničku větší znamená e ≈ 2,7krát víc. Nakonec se všechno vydělí součtem, aby to dalo dohromady 100 %. Jméno „soft max“ je přesné: je to měkká verze výběru maxima — největší skóre dostane nejvíc, ale ostatní nedostanou nulu.
pk = ezk/∑j=1K ezj, zk = wk · x
- pk
- pravděpodobnost třídy k — chceme K čísel, která jsou kladná a dají součet 1
- ezk
- exponenciála — z libovolného skóre udělá kladné číslo a zachová pořadí (větší skóre, větší výsledek); rozdíl skóre o 1 promění v poměr e ≈ 2,72
- ∑j ezj
- součet přes všechny třídy — dělením se kladná čísla „normalizují“ na součet 1; tady se třídy navzájem ovlivňují: když jedné skóre stoupne, ostatním pravděpodobnost klesne
- zk
- logit (skóre) třídy k — libovolné reálné číslo, které model umí snadno spočítat
- wk
- vlastní vektor vah každé třídy (s úsekem, x má první složku 1) — u nás matice 4 × 3; všechny řádky se učí najednou, protože se potkávají ve společném jmenovateli
Příklad — softmax(1, 2, 3) a model v bodě (0; 0,6)
z = (1; 2; 3): e1 = 2,718, e2 = 7,389, e3 = 20,086, součet 30,193
softmax(1, 2, 3) = (2,718/30,193; 7,389/30,193; 20,086/30,193) = (0,090; 0,245; 0,665)
Naše softmaxová regrese má pro třídu D váhy wD = (4,560; 0,055; −0,860) (úsek, x1, x2). V bodě (0; 0,6) (barvy podle vzorce výše):
zD = 4,560 + 0,055 · 0 − 0,860 · 0,6 = 4,044; podobně zA = −1,449, zB = −1,559, zC = −1,036
po odečtení maxima: (−5,493; −5,603; −5,080; 0) → e… = (0,0041; 0,0037; 0,0062; 1), součet 1,0140
pD = 1/1,0140 = 0,986
Věta — hranice softmaxové regrese jsou přímky
Nechť w1, …, wK ∈ ℝd+1 jsou váhy softmaxové regrese, zk(x) = wk · x a pk(x) = softmax(z1(x), …, zK(x))k pro x = (1, x1, …, xd). Nechť k ≠ l jsou dvě třídy, jejichž váhy se liší aspoň v jedné složce kromě úseku. Pak
- hranice tříd k a l, množina {x : pk(x) = pl(x)}, je nadrovina {x : (wk − wl) · x = 0} (v rovině přímka);
- oblast třídy k, Rk = {x : zk(x) ≥ zl(x) pro všechna l = 1, …, K}, je průnik nejvýš K − 1 uzavřených poloprostorů, a tedy konvexní množina.
Důkaz. Jmenovatel softmaxu je u pk i pl stejný a exponenciála je prostá, takže
pk = pl ⇔ ezk = ezl ⇔ zk = zl ⇔ (wk − wl) · x = 0
a to je rovnice nadroviny. Každá podmínka zk(x) ≥ zl(x) je lineární nerovnost (wk − wl) · x ≥ 0, tedy uzavřený poloprostor, a průnik konvexních množin je konvexní. ∎
V rovině je tedy oblast každé třídy konvexní mnohoúhelník (případně neomezený) ohraničený úsečkami a polopřímkami — proto může D dostat jednu souvislou oblast uprostřed, ale nikdy ne dvě oddělené.
Vpravo na obrázku je softmaxová regrese na stejných datech. Rovina se rozdělí na čtyři oblasti a třída D dostala vlastní oblast uprostřed: hranice mezi každými dvěma třídami je přímka, kde se jejich skóre rovnají. Uprostřed D teď model říká „D“ s pravděpodobností 98,6 % a v bodě (−3; 3) dá třídě C 97,9 % — součet je vždy 1.
| Skutečná třída ↓ / předpověď → | A | B | C | D | úplnost |
|---|---|---|---|---|---|
| A | 963 | 0 | 3 | 34 | 96,3 % |
| B | 0 | 961 | 2 | 37 | 96,1 % |
| C | 1 | 4 | 916 | 79 | 91,6 % |
| D | 24 | 23 | 57 | 896 | 89,6 % |
Matice záměn z dílu o vyhodnocení modelu má teď čtyři řádky a čtyři sloupce. A se s B nesplete nikdy a skoro všechny záměny (254 z 264) vedou od prostřední třídy D, nebo k ní. Celková přesnost je 93,4 %, stejně jako u ostatních přístupů; tady jsou třídy dobře oddělené a rozdíl nedělá přesnost, ale to, že softmax vrací skutečné rozdělení pravděpodobnosti.
5. Tři vlastnosti softmaxu
- Pro dvě třídy je to sigmoida. softmax(z1, z2)1 = 1/1 + e−(z1 − z2) =σ(z1 − z2). Pro skóre 2 a 0,5 dá obojí 0,818. Logistická regrese je tedy speciální případ softmaxové.
- Přičtení konstanty nic nemění. softmax(1, 2, 3) i softmax(1001, 1002, 1003) je (0,090; 0,245; 0,665). Záleží jen na rozdílech skóre. Počítače toho využívají: od všech skóre odečtou maximum, jinak by e1003 přeteklo do nekonečna.
- Učí se křížovou entropií. Ztráta je −ln P(skutečná třída), stejně jako u dvou tříd, a gradient podle skóre třídy k je opět „předpověď minus skutečnost“: pk − [y = k]. Naše softmaxová regrese má na testu křížovou entropii 0,175.
Věta — softmax dvou tříd je sigmoida a posun skóre nic nemění
Nechť K ≥ 2 a z = (z1, …, zK) ∈ ℝK. Pak
- pro K = 2 platí softmax(z1, z2)1 = σ(z1 − z2), kde σ je sigmoida z dílu Logistická regrese;
- pro každé c ∈ ℝ platí softmax(z1 + c, …, zK + c) = softmax(z).
Důkaz. Dvě třídy: čitatel i jmenovatel vydělíme ez1:
ez1/ez1 + ez2 = 1/1 + ez2 − z1 = σ(z1 − z2)
pro skóre 2 a 0,5: σ(1,5) = 1/1 + e−1,5 = 1/1,223 = 0,818
Posun: pro libovolnou konstantu c je ezk + c = ec · ezk, a činitel ec se v čitateli i ve jmenovateli pokrátí:
ezk + c/∑j=1K ezj + c = ec · ezk/ec · ∑j=1K ezj = softmax(z)k. ∎
Pro c = −maxj zj je největší exponent 0, takže nic nepřeteče (e1003 by v běžných desetinných číslech počítače dalo nekonečno, největší je asi 1,8 · 10308 ≈ e709,8).
Věta — gradient křížové entropie podle skóre
Nechť K ≥ 2, z ∈ ℝK, p = softmax(z), y ∈ {1, …, K} je skutečná třída a ztráta (křížová entropie jednoho příkladu) je
L(z) = −ln py = −∑k=1K [y = k] ln pk
(kódování 1 z K vybere jediný sčítanec). Pak pro každé k = 1, …, K platí
∂L/∂zk = pk − [y = k].
Je-li navíc zk = wk · x pro x, wk ∈ ℝd+1, pak ∂L/∂wk = (pk − [y = k]) x.
Důkaz: dosadíme softmax a logaritmus podílu rozepíšeme na rozdíl:
L = −ln ezy/∑j ezj = −zy + ln ∑j ezj
∂L/∂zk = −[y = k] + ezk/∑j ezj = pk − [y = k]
(∂zy/∂zk = [y = k].) Protože zk = wk · x a na wk závisí jen zk, je podle řetízkového pravidla gradient podle vah třídy k tentýž výraz krát x. ∎
∂L/∂wk = ( pk − [y = k] ) · x
- ∂L/∂wk
- jak změnit váhy třídy k, aby ztráta rostla nejrychleji — sestup jde opačně
- pk
- co model předpověděl pro třídu k; špatné třídy „ztrácejí“ úměrně tomu, kolik si pravděpodobnosti neprávem vzaly
- [y = k]
- co mělo vyjít (1 pro skutečnou třídu, jinak 0); rozdíl je chyba předpovědi a pro dokonale jistý správný model je nulový
- x
- příznaky příkladu — váhy se mění tím víc, čím větší příznak k chybě přispěl; jako u logistické regrese
Příklad — ztráta a gradient pro skóre (1, 2, 3), skutečná třída je první
p = (0,090; 0,245; 0,665), L = −ln 0,090 = 2,41
∂L/∂z = (0,090 − 1; 0,245 − 0; 0,665 − 0) = (−0,910; 0,245; 0,665), součet 0 (barvy podle vzorce výše: pk a [y = k])
krok sestupu s η = 1: z → (1,910; 1,755; 2,335), p = (0,295; 0,253; 0,452), L = 1,22
Skóre skutečné třídy stoupne, ostatní klesnou — nejvíc to, které si vzalo nejvíc (0,665).
def softmax(z, T=1.0):
m = max(z) # posun o konstantu výsledek nezmění…
e = [exp((zk - m) / T) for zk in z] # …a největší exponent je 0, nic nepřeteče
s = sum(e)
return [ek / s for ek in e]
def uc_softmax(X, y, K, eta=0.5, kroku=3000, lam=0.001):
# X má v prvním sloupci jedničky; W[k] jsou váhy třídy k
n, d = len(X), len(X[0])
W = [[0.0] * d for _ in range(K)]
for _ in range(kroku):
G = [[0.0] * d for _ in range(K)]
for x, yi in zip(X, y):
p = softmax([skal(W[k], x) for k in range(K)])
for k in range(K):
chyba = p[k] - (1 if yi == k else 0) # předpověď minus skutečnost
for j in range(d):
G[k][j] += chyba * x[j] / n
for k in range(K):
for j in range(1, d):
G[k][j] += lam * W[k][j] # slabá L2; úsek se netrestá
W[k] = [W[k][j] - eta * G[k][j] for j in range(d)]
return W
Přesně takhle (3 000 kroků, η = 0,5, λ = 0,001) je naučený model na obrázku i v matici záměn.
6. Teplota: jak odvážně vybírat
Definice — softmax s teplotou
Nechť K ≥ 2, z = (z1, …, zK) ∈ ℝK a T ∈ ℝ, T > 0 (teplota). Softmax s teplotou T je vektor
softmaxT(z) = softmax(z1/T, …, zK/T),
tj. softmax vektoru, jehož každá složka je vydělená T; pro T = 1 je to obyčejný softmax. Nechť má z jedinou největší složku zm. Pak
- pro T → 0+ jde softmaxT(z) ke kódování 1 z K třídy m (veškerá pravděpodobnost na největší skóre — výběr maxima);
- pro T → ∞ jde softmaxT(z)k k 1/K pro každé k (rovnoměrné rozdělení).
Jazykový model vybírá další slovo jako vícetřídní klasifikaci s desítkami tisíc tříd. Teplota je knoflík, kterým se nastavuje odvaha: nízká teplota bere skoro vždy nejpravděpodobnější slovo (text je spolehlivý, ale nudný a opakuje se), vysoká dává šanci i méně pravděpodobným (text je pestřejší, ale občas ujede).
pk/pl = exp zk − zl/T
- pk/pl
- poměr pravděpodobností dvou slov, třeba „den“ a „večer“ — kolikrát častěji model vybere první; společný jmenovatel softmaxu se v něm pokrátí, proto je vzorec tak jednoduchý
- zk − zl
- rozdíl logitů — to jediné, co o dvojici slov ví model; teplota ho nemění
- T
- teplota — dělí rozdíl: T < 1 ho zvětší a poměr vyhrocuje k favoritovi, T > 1 ho zmenší a poměr se blíží 1, tedy všechna slova stejně
Logity jsou stejné, mění se jen teplota. Při T = 0,5 dostane „den“ 78,0 % a nesmyslný „kalkul“ prakticky nic. Při T = 1 má „den“ 53,5 %. Při T = 2 už jen 35,8 % a „kalkul“ 2,9 % — v jedné větě z pětatřiceti. Entropie rozdělení (z dílu Teorie informace) roste z 1,00 přes 1,76 na 2,25 bitu; maximum pro šest slov je log₂ 6 ≈ 2,58 bitu.
Příklad — „den“ při teplotě 0,5 a poměr „den“ : „večer“
Logity: den 3,0, večer 2,2, výhled 1,6, pocit 1,0, pes −0,5, kalkul −2,0. Při T = 0,5 je dělíme 0,5:
z/T = (6; 4,4; 3,2; 2; −1; −4)
exp z/T = (403,4; 81,45; 24,53; 7,389; 0,368; 0,018), součet 517,2
pden = 403,4/517,2 = 0,780 (barvy podle vzorce softmaxu výše)
Rozdíl logitů „den“ a „večer“ je 0,8, takže poměr jejich pravděpodobností je exp 0,8/T (barvy podle vzorce poměru výše):
T = 0,5: exp 0,8/0,5 = e1,6 = 4,95 · T = 1: e0,8 = 2,23 · T = 2: exp 0,8/2 = e0,4 = 1,49
Entropie H(p) = −∑k pk log2 pk měří, jak moc je výběr nejistý; největší, log2 K, je pro rovnoměrné rozdělení — k němu softmax s rostoucí teplotou směřuje.
7. Když může platit víc tříd najednou
Článek může být o sportu i o Praze; fotka může obsahovat psa i kočku. Tady softmax nepatří: nutí pravděpodobnosti k součtu 1, takže když jedna třída roste, ostatní musí klesat. Pro klasifikaci s více štítky se naopak vrací princip jeden proti všem: pro každý štítek samostatná sigmoida a každá odpovídá na svou vlastní otázku „je tam pes?“ nezávisle na ostatních.
Definice — klasifikace s více štítky
Nechť 𝒳 je množina vstupů a K ∈ ℕ, K ≥ 1, je počet štítků 1, …, K. V klasifikaci s více štítky má každý příklad vstup x ∈ 𝒳 a cíl, kterým je vektor
y = (y1, …, yK) ∈ {0, 1}K, yk = 1 ⇔ příklad má štítek k;
jedniček může být libovolně mnoho, i žádná. Model se skóre z1(x), …, zK(x) ∈ ℝ
- předpoví pro každý štítek zvlášť pk(x) = σ(zk(x)) ∈ (0, 1), k = 1, …, K, kde σ je sigmoida;
- učí se minimalizací součtu K binárních křížových entropií L = −∑k=1K [yk ln pk + (1 − yk) ln(1 − pk)].
Pravděpodobnosti pk nejsou svázané součtem: ∑k pk může být cokoli mezi 0 a K.
8. Shrnutí
- Jeden proti všem skládá K binárních klasifikátorů; ten pro prostřední třídu rezignoval, ve 12,9 % roviny neřekne „ano“ nikdo a jeho „pravděpodobnosti“ dávaly součet od 0,25 do 2,22.
- Jeden proti jednomu pořádá turnaj K(K − 1)/2 dvojic; prostřední třídu zvládl líp (88,8 %), ale tříd nesmí být moc.
- Softmax převede skóre na rozdělení pravděpodobnosti; softmaxová regrese se učí najednou a dala 93,4 % s pravděpodobnostmi, které dávají smysl.
- Pro dvě třídy je softmax sigmoida, na přičtení konstanty nezáleží a učí se křížovou entropií s gradientem „předpověď minus skutečnost“.
- Teplota řídí, jak odvážně jazykový model vybírá slova: „den“ má 78 % při T = 0,5 a 36 % při T = 2.
- Pro více štítků najednou se místo softmaxu používají nezávislé sigmoidy.
Chcete si to osahat? Nechte AI agenta spočítat softmax z logitů, které si vymyslíte, a pohrajte si s teplotou — při jaké teplotě dostane nejméně pravděpodobné slovo aspoň 10 %?
Máte na to jiný názor? Napište na support@coden-app.com.