Softmax wandelt beliebige reale Werte in Wahrscheinlichkeiten um, die beim maschinellen Lernen oft nützlich sind. Die Mathematik, die dahinter steckt, ist ziemlich einfach: Bei einigen Zahlen,
- Erhöhe e (die mathematische Konstante) zur Potenz jeder dieser Zahlen.
- Summiere alle Exponentiale (Potenzen von eee). Das Ergebnis ist der Nenner.
- Verwenden Sie den Exponentialwert jeder Zahl als Zähler.
- Wahrscheinlichkeit=ZählerNenner\text{Wahrscheinlichkeit} = \frac{\text{Numerator}}{\text{Denominator}}Wahrscheinlichkeit=NennerZähler.
Ausgefallener geschrieben, führt Softmax die folgende Transformation auf nnn Zahlen x1…xnx_1 \ldots x_nx1…xn durch:
s(xi)=exi∑j=1nexjs(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}s(xi)=∑j=1nexjexi
Die Ergebnisse der Softmax-Transformation liegen immer im Bereich und addieren sich zu 1. Sie bilden also eine Wahrscheinlichkeitsverteilung.
Ein einfaches Beispiel
Angenommen, wir haben die Zahlen -1, 0, 3 und 5. Zuerst berechnen wir den Nenner:
Nenner=e-1+e0+e3+e5=169.87\begin{aligned}\text{Nenner} &= e^{-1} + e^0 + e^3 + e^5 \\\&= \boxed{169.87} \\\end{aligned}Denominator=e-1+e0+e3+e5=169.87
Dann können wir die Zähler und Wahrscheinlichkeiten berechnen:
xxx | Zähler (exe^xex) | Wahrscheinlichkeit (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 |
Je größer das xxx, desto höher seine Wahrscheinlichkeit. Beachten Sie auch, dass sich die Wahrscheinlichkeiten alle zu 1 addieren, wie bereits erwähnt.
Implementieren von Softmax in Python
Die Verwendung von numpy macht dies super einfach:
import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) #
Hinweis: Für fortgeschrittene Benutzer ist es wahrscheinlich sinnvoll, dies mit dem LogSumExp-Trick zu implementieren, um Underflow/Overflow-Probleme zu vermeiden.
Warum ist Softmax nützlich?
Stellen Sie sich vor, Sie bauen ein neuronales Netz, um die Frage zu beantworten: Ist dieses Bild ein Hund oder eine Katze?
Ein übliches Design für dieses neuronale Netzwerk würde zwei reelle Zahlen ausgeben, von denen eine den Hund und die andere die Katze darstellt, und Softmax auf diese Werte anwenden. Nehmen wir zum Beispiel an, das Netz gibt aus:
Tier | xxx | exe^xex | Wahrscheinlichkeit |
---|---|---|---|
Hund | -1 | 0.368 | 0,047 |
Katze | 2 | 7,39 | 0,953 |
Das bedeutet, dass unser Netzwerk zu 95,3 % sicher ist, dass das Bild eine Katze darstellt. Mit Softmax können wir Klassifizierungsfragen mit Wahrscheinlichkeiten beantworten, die nützlicher sind als einfachere Antworten (z.B. binäres Ja/Nein).