A Softmax függvény egyszerű magyarázata

A Softmax tetszőleges valós értékeket valószínűséggé alakít, ami gyakran hasznos a gépi tanulásban. A mögötte álló matematika nagyon egyszerű: Adott néhány szám,

  1. Növeljük e-t (a matematikai konstans) az egyes számok hatványára.
  2. Az összes exponenciális (eee hatványai) összegzése. Ez az eredmény a nevező.
  3. Az egyes számok exponenciálisát használjuk számlálónak.
  4. Valószínűség=NevezőNevező\text{Valószínűség} = \frac{\text{Nevező}}{\text{Nevező}}} Valószínűség=NevezőNevező.

Fantáziadúsabban leírva a Softmax a következő transzformációt hajtja végre nnn számon x1…xnx_1 \ldots x_nx1…xn:

s(xi)=exi∑j=1nexjs(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}s(xi)=∑j=1nexjexi

A Softmax transzformáció kimenetei mindig a tartományban vannak és összeadódnak 1-re. Ezért valószínűségi eloszlást alkotnak.

Egy egyszerű példa

Tegyük fel, hogy a számok -1, 0, 3 és 5. Először is kiszámítjuk a nevezőt:

Nevező=e-1+e0+e3+e5=169.87\begin{aligned}\text{Nevező} &= e^{-1} + e^0 + e^3 + e^5 \\\&= \boxed{169.87} \\\\end{aligned}Nevező=e-1+e0+e3+e5=169.87

Ezután kiszámíthatjuk a számlálókat és a valószínűségeket:

xxx Nevező (exe^xex) valószínűség (ex169.87\frac{e^x}{169.87}169.87ex)
-1 0.368 0.002
0 1 0.006
3 20.09 0.118
5 148.41 0.874

Minél nagyobb az xxx, annál nagyobb a valószínűsége. Figyeljük meg azt is, hogy a valószínűségek mindegyike 1-re adódik, ahogy már említettük.

Softmax implementálása Pythonban

A numpy használatával ez szuper egyszerű:

import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) # 
np.exp() a bemeneti tömb minden egyes elemének hatványára emeli az e-t.

Figyelem: haladóbb felhasználóknak ezt valószínűleg a LogSumExp trükkel kell megvalósítaniuk, hogy elkerüljék az alul- és túlcsordulási problémákat.

Miért hasznos a Softmax?

Képzeljünk el egy neurális hálózatot a kérdés megválaszolásához:

A neurális hálózat szokásos tervezése szerint 2 valós számot adna ki, amelyek közül az egyik a kutyát, a másik a macskát jelöli, és ezekre az értékekre Softmaxot alkalmazna. Tegyük fel például, hogy a hálózat kimenete :

Animal xxx exe^xex Probability
Dog -1 0.368 0.047
Cica 2 7.39 0.953

Ez azt jelenti, hogy hálózatunk 95.3%-ban biztos abban, hogy a képen egy macska látható. A Softmax segítségével valószínűségekkel válaszolhatunk osztályozási kérdésekre, amelyek hasznosabbak, mint az egyszerűbb válaszok (pl. bináris igen/nem).

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.