Softmax omdanner vilkårlige reelle værdier til sandsynligheder, som ofte er nyttige i maskinlæring. Matematikken bag er ret enkel: Givet nogle tal,
- Hæv e (den matematiske konstant) til en potens af hvert af disse tal.
- Sumér alle eksponentialværdierne (potenser af eee). Dette resultat er nævneren.
- Brug hvert tals eksponentiel som tæller.
- Sandsynlighed=NummeratorNævner\text{Sandsynlighed}} = \frac{\text{Nummerator}}{\text{Nævner}}}Probability=NævnerNævnerNummerator.
Som det er skrevet mere fantasifuldt, udfører Softmax følgende 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
Udgangene af Softmax-transformationen er altid i intervallet og summerer til 1. Derfor danner de en sandsynlighedsfordeling.
Et simpelt eksempel
Sæt, at vi har tallene -1, 0, 3 og 5. Først beregner vi nævneren:
Nævner=e-1+e0+e3+e5=169,87\begin{aligned}\text{Nævner} &= e^{-1} + e^0 + e^3 + e^5 \\&= \boxed{169,87} \\\end{aligned}Nævner=e-1+e0+e3+e5=169.87
Så kan vi beregne tællerne og sandsynlighederne:
xxx | Nævner (exe^xex) | Sandsynlighed (ex169.87\frac{e^x}{169.87}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øjere sandsynlighed. Bemærk også, at sandsynlighederne alle summerer til 1, som nævnt før.
Implementering af Softmax i Python
Brug af numpy gør dette super nemt:
import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) #
Bemærk: For mere avancerede brugere vil du sandsynligvis ønske at implementere dette ved hjælp af LogSumExp-tricket for at undgå underflow/overflow-problemer.
Hvorfor er Softmax nyttig?
Forestil dig at bygge et neuralt netværk til at besvare spørgsmålet:
Et almindeligt design for dette neurale netværk ville have det til at outputte 2 reelle tal, hvoraf det ene repræsenterer hund og det andet kat, og anvende Softmax på disse værdier. Lad os f.eks. sige, at netværket udsender :
Animal | xxx | exe^xex | Probability |
---|---|---|---|
Dog | -1 | 0.368 | 0,047 |
Kat | 2 | 7,39 | 0,953 |
Det betyder, at vores netværk er 95,3 % sikker på, at billedet er af en kat. Softmax giver os mulighed for at besvare klassifikationsspørgsmål med sandsynligheder, hvilket er mere nyttigt end enklere svar (f.eks. binært ja/nej).