En simpel forklaring af Softmax-funktionen

Softmax omdanner vilkårlige reelle værdier til sandsynligheder, som ofte er nyttige i maskinlæring. Matematikken bag er ret enkel: Givet nogle tal,

  1. Hæv e (den matematiske konstant) til en potens af hvert af disse tal.
  2. Sumér alle eksponentialværdierne (potenser af eee). Dette resultat er nævneren.
  3. Brug hvert tals eksponentiel som tæller.
  4. 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)) # 
np.exp() hæver e til potensen af hvert element i inputarrayet.

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).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.