O explicație simplă a funcției Softmax

Softmax transformă valori reale arbitrare în probabilități, care sunt adesea utile în învățarea automată. Matematica din spatele ei este destul de simplă: date fiind niște numere,

  1. Creșteți e (constanta matematică) la puterea fiecăruia dintre aceste numere.
  2. Sumați toate exponențialele (puterile lui eee). Acest rezultat este numitorul.
  3. Utilizați exponențialul fiecărui număr ca numitor.
  4. Probabilitate=NumeratorDenominator\text{Probabilitate} = \frac{\text{Numerator}}{\text{Denominator}}Probabilitate=DenominatorNumerator.

Dispus mai fantezist, Softmax efectuează următoarea transformare pe nnn numere x1…xnx_1 \lumele x_nx1…xn…xn:

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

Seșirile transformării Softmax sunt întotdeauna în intervalul și însumate la 1. Prin urmare, ele formează o distribuție de probabilitate.

Un exemplu simplu

Să spunem că avem numerele -1, 0, 3 și 5. Mai întâi, calculăm numitorul:

Denominator=e-1+e0+e3+e5=169,87\begin{aligned}\text{Denominator} &= e^{-1} + e^0 + e^3 + e^5 \\\&= \boxed{169,87} \\\end{aligned}Denominator=e-1+e0+e3+e5=169.87

Apoi, putem calcula numărătorii și probabilitățile:

xxx Numerator (exe^xex) Probabilitate (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

Cu cât xxx este mai mare, cu atât probabilitatea sa este mai mare. De asemenea, observați că toate probabilitățile se adună la 1, așa cum am menționat anterior.

Implementarea Softmax în Python

Utilizarea numpy face acest lucru foarte ușor:

import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) # 
np.exp() ridică e la puterea fiecărui element din matricea de intrare.

Nota: pentru utilizatorii mai avansați, probabil că veți dori să implementați acest lucru folosind trucul LogSumExp pentru a evita problemele de underflow/overflow.

De ce este util Softmax?

Imaginați-vă construirea unei rețele neuronale pentru a răspunde la întrebare: Este această imagine a unui câine sau a unei pisici?

Un proiect obișnuit pentru această rețea neuronală ar fi ca aceasta să producă 2 numere reale, unul reprezentând câinele și celălalt pisica, și să aplice Softmax pe aceste valori. De exemplu, să presupunem că rețeaua produce :

Animal xxx exe^xex Probabilitate
Câine -1 0.368 0,047
Câine 2 7,39 0,953

Acest lucru înseamnă că rețeaua noastră are o încredere de 95,3% în faptul că poza este a unei pisici. Softmax ne permite să răspundem la întrebările de clasificare cu probabilități, care sunt mai utile decât răspunsurile mai simple (de exemplu, răspunsurile binare da/nu).

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.