En enkel förklaring av Softmax-funktionen

Softmax omvandlar godtyckliga verkliga värden till sannolikheter, som ofta är användbara vid maskininlärning. Matematiken bakom är ganska enkel: givet några tal,

  1. höj e (den matematiska konstanten) till potensen av vart och ett av dessa tal.
  2. Summera alla exponentialer (potenser av eee). Detta resultat är nämnaren.
  3. Använd varje tals exponential som täljare.
  4. Sannolikhet=NumeratorNämnare\text{Sannolikhet} = \frac{\text{Numerator}}}{\text{Nämnare}}Probability=NämnareNumerator.

Som skrivs på ett mer fantasifullt sätt utför Softmax följande transformation på nnn tal 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

Utgångsvärdena för Softmax-transformationen ligger alltid inom intervallet och summerar till 1. Därför bildar de en sannolikhetsfördelning.

Ett enkelt exempel

Säg att vi har siffrorna -1, 0, 3 och 5. Först beräknar vi nämnaren:

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

Därefter kan vi beräkna täljare och sannolikheter:

xxx Nämnare (exe^xex) Sannolikhet (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

Desto större xxx, desto högre sannolikhet. Lägg också märke till att sannolikheterna alla summerar till 1, som tidigare nämnts.

Implementering av Softmax i Python

Användning av numpy gör detta superenkelt:

import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) # 
np.exp() höjer e till potensen av varje element i inmatningsmatrisen.

Notera: för mer avancerade användare vill du förmodligen implementera detta med hjälp av LogSumExp-tricket för att undvika problem med under- och överflöde.

Varför är Softmax användbart?

Föreställ dig att du bygger ett neuralt nätverk för att besvara frågan:

En vanlig utformning av detta neurala nätverk skulle innebära att det ger ut två verkliga tal, varav det ena representerar hund och det andra katt, och att Softmax tillämpas på dessa värden. Låt oss till exempel säga att nätverket ger ut :

Djur xxx exe^xex Sannolikhet
Hund -1 0.368 0,047
Katt 2 7,39 0,953

Detta innebär att vårt nätverk är 95,3 % säker på att bilden är av en katt. Softmax låter oss besvara klassificeringsfrågor med sannolikheter, vilket är mer användbart än enklare svar (t.ex. binärt ja/nej).

Lämna ett svar

Din e-postadress kommer inte publiceras.