Eine einfache Erklärung der Softmax-Funktion

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,

  1. Erhöhe e (die mathematische Konstante) zur Potenz jeder dieser Zahlen.
  2. Summiere alle Exponentiale (Potenzen von eee). Das Ergebnis ist der Nenner.
  3. Verwenden Sie den Exponentialwert jeder Zahl als Zähler.
  4. 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)) # 
np.exp() erhöht e zur Potenz jedes Elements im Eingabefeld.

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.