Proste wyjaśnienie funkcji Softmax

Softmax zamienia dowolne wartości rzeczywiste na prawdopodobieństwa, które są często przydatne w uczeniu maszynowym. Matematyka kryjąca się za tą funkcją jest dość prosta: biorąc pod uwagę pewne liczby,

  1. Podnieś e (stałą matematyczną) do potęgi każdej z tych liczb.
  2. Sumuj wszystkie wykładniki (potęgi eee). Ten wynik jest mianownikiem.
  3. Użyj wykładnika każdej liczby jako jej licznika.
  4. Prawdopodobieństwo=NumeratorDenominator Tekst{Prawdopodobieństwo} = ∗∗∗∗∗∗ Prawdopodobieństwo=DenominatorNumerator.

Pisząc bardziej fantazyjnie, Softmax wykonuje następujące przekształcenie na nnn liczbach x1…xnx_1 \dots 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

Wyjścia transformaty Softmax są zawsze w przedziale i sumują się do 1. Stąd tworzą one rozkład prawdopodobieństwa.

Prosty przykład

Powiedzmy, że mamy liczby -1, 0, 3, i 5. Najpierw obliczamy mianownik:

Denominator=e-1+e0+e3+e5=169.87 \begin{aligned}text{Denominator} &= e^{-1} + e^0 + e^3 + e^5 \begin{aligned} &= \begin{169.87} \{aligned}Denominator=e-1+e0+e3+e5=169.87

Wtedy możemy obliczyć liczniki i prawdopodobieństwa:

xxx Licznik (exe^xex) Prawdopodobieństwo (ex169.87frac{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

Im większe xxx, tym większe jego prawdopodobieństwo. Zauważ również, że wszystkie prawdopodobieństwa sumują się do 1, jak wspomniano wcześniej.

Implementacja Softmax w Pythonie

Użycie numpy czyni to super łatwym:

import numpy as npdef softmax(xs): return np.exp(xs) / sum(np.exp(xs))xs = np.array()print(softmax(xs)) # 
np.exp() podnosi e do potęgi każdego elementu tablicy wejściowej.

Uwaga: dla bardziej zaawansowanych użytkowników, prawdopodobnie będziesz chciał to zaimplementować używając sztuczki LogSumExp, aby uniknąć problemów z underflow/overflow.

Dlaczego Softmax jest użyteczny?

Wyobraź sobie zbudowanie Sieci Neuronowej, aby odpowiedzieć na pytanie: Czy to zdjęcie przedstawia psa czy kota?

Wspólny projekt dla tej sieci neuronowej kazałby jej wyprowadzić 2 liczby rzeczywiste, jedną reprezentującą psa, a drugą kota, i zastosować Softmax na tych wartościach. Na przykład, powiedzmy, że sieć wyprowadza :

Zwierzę xxx exe^xex Prawdopodobieństwo
Pies -1 0.368 0.047
Kot 2 7.39 0.953

To oznacza, że nasza sieć jest w 95.3% pewna, że zdjęcie przedstawia kota. Softmax pozwala nam odpowiadać na pytania klasyfikacyjne za pomocą prawdopodobieństw, które są bardziej użyteczne niż prostsze odpowiedzi (np. binarne tak/nie).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.