Softmax-funktion yksinkertainen selitys

Softmax muuttaa mielivaltaiset reaaliarvot todennäköisyyksiksi, jotka ovat usein hyödyllisiä koneoppimisessa. Matematiikka sen takana on melko yksinkertaista: annetaan joitakin lukuja,

  1. Nostetaan e (matemaattinen vakio) kunkin luvun potenssiin.
  2. Summataan kaikki eksponentit (eee:n potenssit). Tämä tulos on nimittäjä.
  3. Käytä kunkin luvun eksponentiaalia sen osoittajana.
  4. Todennäköisyys=NimittäjäNimittäjä\text{Probability} = \frac{\text{Numerator}}{\text{Denominator}}}Probability=NimittäjäNumerator.

Fanttimammin kirjoitettuna Softmax suorittaa seuraavan muunnoksen nnn luvulle x1…xnx_1 \ldot 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

Softmax-muunnoksen ulostulot ovat aina välillä ja summaavat 1. Näin ollen ne muodostavat todennäköisyysjakauman.

Yksinkertainen esimerkki

Esitetään, että meillä on luvut -1, 0, 3 ja 5. Lasketaan ensin nimittäjä:

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

Tällöin voimme laskea osoittajat ja todennäköisyydet:

xxx Lukumäärä (exe^xex) Todennäköisyys (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

Mitä suurempi xxx, sitä suurempi sen todennäköisyys. Huomaa myös, että kaikki todennäköisyydet summautuvat yhteen, kuten aiemmin mainittiin.

Softmaxin toteuttaminen Pythonissa

Numpy:n käyttäminen tekee tästä superhelppoa:

import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) # 
np.exp() nostaa e:n jokaisen syötemäärän elementin potenssiin.

Huomautus: edistyneempien käyttäjien kannattaa luultavasti toteuttaa tämä LogSumExp-tempun avulla, jotta vältät ali-/ylivuoto-ongelmat.

Miksi Softmax on hyödyllinen?

Kuvittele, että rakennat neuroverkon vastaamaan kysymykseen:

Yleinen malli tälle neuroverkolle olisi, että se tulostaisi kaksi reaalilukua, joista toinen edustaisi koiraa ja toinen kissaa, ja soveltaisi Softmaxia näihin arvoihin. Oletetaan esimerkiksi, että verkko antaa tulokseksi :

eläin xxx exe^xex todennäköisyys
Koira -1 0.368 0.047
Kissa 2 7.39 0.953

Tämä tarkoittaa, että verkostomme on 95.3 %:n varmuudella varma siitä, että kuvassa on kissa. Softmaxin avulla voimme vastata luokittelukysymyksiin todennäköisyyksillä, jotka ovat hyödyllisempiä kuin yksinkertaisemmat vastaukset (esim. binäärinen kyllä/ei).

Vastaa

Sähköpostiosoitettasi ei julkaista.