Wyjaśnienie utraty entropii

35

Załóżmy, że zbuduję NN do klasyfikacji. Ostatnia warstwa to gęsta warstwa z aktywacją softmax. Mam pięć różnych klas do sklasyfikowania. Załóżmy, że dla jednego przykładu szkolenia,true label[1 0 0 0 0]przewidywania [0.1 0.5 0.1 0.1 0.2]. Jak obliczyć utratę entropii krzyżowej dla tego przykładu?

Nain
źródło

Odpowiedzi:

50

Wzór na entropię krzyżową przyjmuje dwa rozkłady, p(x) , rozkład rzeczywisty i q(x) , rozkład szacowany, zdefiniowany dla zmiennej dyskretnej x i jest określony przez

H(p,q)=xp(x)log(q(x))

W przypadku sieci neuronowej obliczenia są niezależne od następujących elementów:

  • Jakiego rodzaju użyto warstwy.

  • Jakiego rodzaju aktywacji użyto - chociaż wiele aktywacji nie będzie zgodnych z obliczeniami, ponieważ ich wyniki nie mogą być interpretowane jako prawdopodobieństwa (tj. Ich wyniki są ujemne, większe niż 1 lub nie sumują się do 1). Softmax jest często używany do klasyfikacji wieloklasowej, ponieważ gwarantuje dobrze zachowaną funkcję rozkładu prawdopodobieństwa.

Dla sieci neuronowej, można zazwyczaj zobaczyć równania napisany w formie gdzie y jest wektorem ziemia prawda i y^ jakaś inna wartość wzięte bezpośrednio z wyjścia ostatniej warstwy) jest oszacowanie. Na przykład może wyglądać następująco:

L=ylog(y^)

gdzie jest iloczynem wektora kropki.

Twój przykład ziemia prawda y daje wszelkie prawdopodobieństwo pierwszej wartości, a pozostałe wartości są równe zero, więc możemy je zignorować i po prostu używać terminu pasującego z szacunków yy^

L=(1×log(0.1)+0×log(0.5)+...)

L=log(0.1)2.303

Ważny punkt z komentarzy

Oznacza to, że strata byłaby taka sama bez względu na to, czy prognozy wynoszą [0.1,0.5,0.1,0.1,0.2] lub [0.1,0.6,0.1,0.1,0.1] ?

Tak, jest to kluczowa cecha logloss wieloklasowego, nagradza / karze tylko prawdopodobieństwa poprawnych klas. Wartość jest niezależna od podziału pozostałego prawdopodobieństwa na niepoprawne klasy.

Często zobaczysz to równanie uśrednione dla wszystkich przykładów jako funkcję kosztu . Nie zawsze jest ściśle przestrzegane w opisach, ale zwykle funkcja straty jest niższym poziomem i opisuje, w jaki sposób pojedyncza instancja lub komponent określa wartość błędu, podczas gdy funkcja kosztu jest wyższym poziomem i opisuje, w jaki sposób oceniany jest cały system do optymalizacji. Funkcja kosztu oparta na utracie dziennika wieloklasowego dla zestawu danych o rozmiarze N może wyglądać następująco:

J=1N(i=1Nyilog(y^i))

Wiele implementacji będzie wymagać, aby twoje podstawowe wartości prawdy były zakodowane na gorąco (z jedną prawdziwą klasą), ponieważ pozwala to na dodatkową optymalizację. Jednak w zasadzie utratę entropii krzyżowej można obliczyć - i zoptymalizować - gdy tak nie jest.

Neil Slater
źródło
1
W porządku. Oznacza to, że strata byłaby taka sama bez względu na to, czy prognozy wynoszą [0,1 0,5 0,1 0,1 0,2] czy [0,1 0,6 0,1 0,1 0,1]?
Nain,
@Nain: To jest poprawne dla twojego przykładu. Utrata przez entropię krzyżową nie zależy od wartości nieprawidłowych prawdopodobieństw klas.
Neil Slater,
8

Odpowiedź Neila jest prawidłowa. Uważam jednak, że ważne jest, aby zwrócić uwagę, że chociaż utrata nie zależy od rozkładu między niepoprawnymi klasami (tylko rozkład między poprawną klasą a resztą), gradient tej funkcji straty wpływa różnie na niepoprawne klasy w zależności od tego, jak są w błędzie. Kiedy więc zastosujesz cross-ent w uczeniu maszynowym, zmienisz wagi inaczej dla [0,1 0,5 0,1 0,1 0,2] i [0,1 0,6 0,1 0,1 0,1]. Jest tak, ponieważ wynik prawidłowej klasy jest znormalizowany przez wyniki wszystkich innych klas, aby przekształcić ją w prawdopodobieństwo.

Lucas Adams
źródło
3
Czy możesz to opracować na odpowiednim przykładzie?
Nain
@Lucas Adams, czy możesz podać przykład?
koryakinp
Pochodna KAŻDEJ y_i (wyjście softmax) wr KAŻDY logit z (lub sam parametr w) zależy od KAŻDEGO y_i. medium.com/@aerinykim/…
Aaron,
2

Zobaczmy, jak zachowuje się gradient straty ... Mamy entropię krzyżową jako funkcję straty, którą podaje

H(p,q)=i=1np(xi)log(q(xi))=(p(x1)log(q(x1))++p(xn)log(q(xn))

Idąc stąd .. chcielibyśmy poznać pochodną w odniesieniu do niektórych xi

xiH(p,q)=xip(xi)log(q(xi)).
xiH(p,q)=p(xi)1q(xi)q(xi)xi.

From this we can see that we are still only penalizing the true classes (for which there is value for p(xi)). Otherwise we just have a gradient of zero.

I do wonder how to software packages deal with a predicted value of 0, while the true value was larger than zero... Since we are dividing by zero in that case.

zwep
źródło
I think what you want is to take derivative w.r.t. the parameter, not w.r.t. x_i.
Aaron
1

Let's start with understanding entropy in information theory: Suppose you want to communicate a string of alphabets "aaaaaaaa". You could easily do that as 8*"a". Now take another string "jteikfqa". Is there a compressed way of communicating this string? There isn't is there. We can say that the entropy of the 2nd string is more as, to communicate it, we need more "bits" of information.

This analogy applies to probabilities as well. If you have a set of items, fruits for example, the binary encoding of those fruits would be log2(n) where n is the number of fruits. For 8 fruits you need 3 bits, and so on. Another way of looking at this is that given the probability of someone selecting a fruit at random is 1/8, the uncertainty reduction if a fruit is selected is log2(1/8) which is 3. More specifically,

i=1818log2(18)=3
This entropy tells us about the uncertainty involved with certain probability distributions; the more uncertainty/variation in a probability distribution, the larger is the entropy (e.g. for 1024 fruits, it would be 10).

In "cross"-entropy, as the name suggests, we focus on the number of bits required to explain the difference in two different probability distributions. The best case scenario is that both distributions are identical, in which case the least amount of bits are required i.e. simple entropy. In mathematical terms,

H(y,y^)=iyiloge(y^i)

Where y^ is the predicted probability vector (Softmax output), and y is the ground-truth vector( e.g. one-hot). The reason we use natural log is because it is easy to differentiate (ref. calculating gradients) and the reason we do not take log of ground truth vector is because it contains a lot of 0's which simplify the summation.

Bottom line: In layman terms, one could think of cross-entropy as the distance between two probability distributions in terms of the amount of information (bits) needed to explain that distance. It is a neat way of defining a loss which goes down as the probability vectors get closer to one another.

Hassaan
źródło
0

I disagree with Lucas. The values above are already probabilities. Note that the original post indicated that the values had a softmax activation.

The error is only propagated back on the "hot" class and the probability Q(i) does not change if the probabilities within the other classes shift between each other.

bluemonkey
źródło
2
Lucas is correct. With the architecture described by the OP, then gradient at all the logits (as opposed to outputs) is not zero, because the softmax function connects them all. So the [gradient of the] error at the "hot" class propagates to all output neurons.
Neil Slater
+1 for Neil and Lucas
Aaron
-1

The problem is that the probabilities are coming from a 'complicated' function that incorporates the other outputs into the given value. The outcomes are inter-connected, so this way we are not deriving regarding to the actual outcome, but by all the inputs of the last activation function (softmax), for each and every outcome.

I have found a very nice description at deepnotes.io/softmax-crossentropy where the author shows that the actual derivative is piyi.

Other neat description at gombru.github.io/2018/05/23/cross_entropy_loss.

I think that using a simple sigmoid as a last activation layer would lead to the approved answer, but using softmax indicates different answer.

guyko
źródło
1
Welcome to Stack Exchange. However what you wrote does not seem to be an answer of the OP's question about calculating cross-entropy loss.
user12075