Přeskočit na obsah
coden

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.

12 minut Matěj Žalmánek 2026-10-16

Série Základy AI Díl 50 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
  • 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é

  1. každý příklad má vstup x ∈ 𝒳 a cíl (třídu) y ∈ {1, …, K} — patří tedy právě do jedné třídy;
  2. hledáme klasifikátor, tj. funkci f : 𝒳 → {1, …, K}, pro kterou f(x) = y u co nejvíce příkladů;
  3. 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.)

Laicky řečeno

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:

  1. 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“);
  2. 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).
Laicky řečeno

Č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.

ABCD příznak x₁ (bez jednotky) příznak x₂ (bez jednotky) jeden proti všem ABCD příznak x₁ (bez jednotky) příznak x₂ (bez jednotky) softmax
Jeden proti všem: šedě nikdo neřekne ano, žlutě víc klasifikátorů najednou; vpravo softmax

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
bodABCDsoučet
(0; 0,6)skóre zk−8,00−13,47−8,49−1,08
σ(zk)0,00030,00000,00020,2530,25
(−3; 3)skóre zk7,28−57,3814,55−1,29
σ(zk)0,9990,0001,0000,2162,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:

  1. 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;
  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);
  3. předpoví se třída s nejvíc hlasy, ŷ(x) = argmaxk hk(x); při shodě hlasů vyhraje třída s menším číslem.
Laicky řečeno

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í

  1. skóre (logity) zk(x) = wk · x pro k = 1, …, K;
  2. pravděpodobnosti P(y = k | x) = softmax(z1(x), …, zK(x))k;
  3. 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).

Laicky řečeno

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
Softmax je přesně to nejjednodušší, co z libovolných skóre udělá rozdělení pravděpodobnosti a zachová jejich pořadí.
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

  1. hranice tříd k a l, množina {x : pk(x) = pl(x)}, je nadrovina {x : (wk − wl) · x = 0} (v rovině přímka);
  2. 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ěď →ABCDúplnost
A963033496,3 %
B096123796,1 %
C149167991,6 %
D24235789689,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

  1. pro K = 2 platí softmax(z1, z2)1 = σ(z1 − z2), kde σ je sigmoida z dílu Logistická regrese;
  2. 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
Pro dvě třídy je to přesně gradient logistické regrese (p − y) x. Součet chyb přes třídy je ∑ pk − 1 = 0: co jedné třídě přidáme, jiným ubereme.
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

  1. 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);
  2. pro T → ∞ jde softmaxT(z)k k 1/K pro každé k (rovnoměrné rozdělení).
Laicky řečeno

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ě
Odtud obě limity z definice: pro T → 0 jde poměr ve prospěch většího logitu do nekonečna, pro T → ∞ k jedné. (exp t = et.)
00,20,40,60,8 den večer výhled pocit pes kalkul další slovo (kandidát) pravděpodobnost P (0–1)
Pokračování věty „Dnes je krásný …“ při třech teplotách T = 0,5 (entropie 1,00 b)T = 1 (entropie 1,76 b)T = 2 (entropie 2,25 b)

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) ∈ ℝ

  1. předpoví pro každý štítek zvlášť pk(x) = σ(zk(x)) ∈ (0, 1), k = 1, …, K, kde σ je sigmoida;
  2. 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.

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