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,
- höj e (den matematiska konstanten) till potensen av vart och ett av dessa tal.
- Summera alla exponentialer (potenser av eee). Detta resultat är nämnaren.
- Använd varje tals exponential som täljare.
- 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)) #
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).