Fakty wstępne
W sensie funkcjonalnym sigmoida jest częściowym przypadkiem funkcji softmax , gdy liczba klas jest równa 2. Obie wykonują tę samą operację: przekształcają logity (patrz poniżej) na prawdopodobieństwa.
W prostej klasyfikacji binarnej nie ma dużej różnicy między tymi dwoma, jednak w przypadku klasyfikacji wielomianowej sigmoid pozwala radzić sobie z niewyłącznymi etykietami ( zwanymi też wieloma etykietami ), podczas gdy softmax zajmuje się ekskluzywnymi klasami (patrz poniżej).
Logarytmicznej (zwany również wynik) jest surowy wartość nieskalowany związany z klasą przed obliczania prawdopodobieństwa. Z punktu widzenia architektury sieci neuronowej oznacza to, że logit jest wynikiem gęstej (w pełni połączonej) warstwy.
Nazewnictwo Tensorflow jest trochę dziwne: wszystkie poniższe funkcje akceptują logity, a nie prawdopodobieństwa , i same stosują transformację (co jest po prostu bardziej wydajne).
Rodzina funkcji sygmoidalnych
Jak wspomniano wcześniej, sigmoid
funkcja straty służy do klasyfikacji binarnej. Ale funkcje tensorflow są bardziej ogólne i pozwalają na klasyfikację z wieloma etykietami, gdy klasy są niezależne. Innymi słowy, tf.nn.sigmoid_cross_entropy_with_logits
rozwiązuje N
klasyfikacje binarne na raz.
Etykiety muszą być zakodowane na gorąco lub mogą zawierać prawdopodobieństwa klas miękkich.
tf.losses.sigmoid_cross_entropy
dodatkowo pozwala na ustawienie wagi partii , tj. uczynienie niektórych przykładów ważniejszymi od innych.
tf.nn.weighted_cross_entropy_with_logits
pozwala na ustawienie wag klas
(pamiętaj, że klasyfikacja jest binarna), czyli popełnienie błędów dodatnich większych niż błędów ujemnych. Jest to przydatne, gdy dane uczące są niezrównoważone.
Rodzina funkcji Softmax
Te funkcje strat powinny być używane do wielomianowej wzajemnie wykluczającej się klasyfikacji, tj. Wybrać jedną z N
klas. Ma również zastosowanie, gdy N = 2
.
Etykiety muszą być zakodowane na gorąco lub mogą zawierać prawdopodobieństwa klasy miękkiej: konkretny przykład może należeć do klasy A z prawdopodobieństwem 50% i klasy B z prawdopodobieństwem 50%. Zauważ, że mówiąc ściśle, nie oznacza to, że należy do obu klas, ale w ten sposób można interpretować prawdopodobieństwa.
Podobnie jak w sigmoid
rodzinie, tf.losses.softmax_cross_entropy
pozwala na ustawienie wagi wsadowej , czyli uczynić niektóre przykłady ważniejszymi od innych. O ile wiem, od tensorflow 1.3 nie ma wbudowanego sposobu ustawiania wag klas .
[UPD] W tensorflow 1.5 wprowadzonov2
wersję, a pierwotna strata została wycofana. Jedyna różnica między nimi polega na tym, że w nowszej wersji wsteczna propagacja zachodzi zarówno w logitach, jak i etykietach ( tutaj jest dyskusja, dlaczego może to być przydatne).softmax_cross_entropy_with_logits
Rodzina funkcji rzadkich
Podobnie jak softmax
powyżej, te funkcje strat powinny być używane do wielomianowej wzajemnie wykluczającej się klasyfikacji, tj. Wybrać jedną z N
klas. Różnica polega na kodowaniu etykiet: klasy są określane jako liczby całkowite (indeks klasy), a nie wektory o jeden-gorący. Oczywiście nie zezwala to na zajęcia miękkie, ale może zaoszczędzić trochę pamięci, gdy są tysiące lub miliony klas. Należy jednak pamiętać, że logits
argument musi nadal zawierać logi dla każdej klasy, dlatego zajmuje co najmniej [batch_size, classes]
pamięć.
Podobnie jak powyżej, tf.losses
wersja ma weights
argument, który pozwala ustawić wagi w partii.
Rodzina funkcji softmax próbkowanych
Funkcje te stanowią kolejną alternatywę dla obsługi dużej liczby klas. Zamiast obliczać i porównywać dokładny rozkład prawdopodobieństwa, obliczają oszacowanie strat na podstawie losowej próby.
Argumenty weights
i biases
określ oddzielną, w pełni połączoną warstwę, która jest używana do obliczania logitów dla wybranej próbki.
Podobnie jak powyżej, labels
nie są zakodowane na gorąco, ale mają kształt [batch_size, num_true]
.
Funkcje próbkowane nadają się tylko do treningu. W czasie testu zaleca się użycie standardowej softmax
straty (rzadkiej lub jednej gorącej), aby uzyskać rzeczywistą dystrybucję.
Inną alternatywą jest strata tf.nn.nce_loss
, która wykonuje hałasu kontrastowe oszacowanie (jeśli jesteś zainteresowany, zobacz ten bardzo szczegółowe omówienie ). Dodałem tę funkcję do rodziny softmax, ponieważ NCE gwarantuje przybliżenie do softmax w limicie.
tf.losses.log_loss
, właściwie to jest tylko dla binarnej crossentropy. Również github.com/tensorflow/tensorflow/issues/2462