Dieses Mal werde ich zusammenfassen, was ich über Kreuzentropie (Kreuzentropie) gelernt habe.
Wenn die Sigmoidfunktion $ \ sigma und $ y = $ \ sigma $ (W ・ x + b) ist, kann die Wahrscheinlichkeit, dass das Neuron feuert (Ausgabe 1), wie folgt ausgedrückt werden. P (C = 1 | x) = $ \ sigma $ (W · x + b)
Im Gegenteil, die Wahrscheinlichkeit, nicht zu feuern, kann wie folgt ausgedrückt werden. P (C = 0 | x) = 1- $ \ sigma $ (W · x + b)
Wenn diese beiden in einer Gleichung ausgedrückt werden, kann die Zündwahrscheinlichkeit eines Neurons wie folgt ausgedrückt werden (jedoch t = 0 oder t = 1).
P(C = t|x) =
Da die Wahrscheinlichkeit L des gesamten Netzwerks das Produkt der Zündwahrscheinlichkeiten aller Neuronen ist,
Die maximale Wahrscheinlichkeit kann durch Maximieren dieser Gleichung erhalten werden, aber es ist einfacher, sie durch Minimieren zu optimieren. Multiplizieren Sie sie daher mit einem Minus. Das Multiplizieren von Wahrscheinlichkeiten erfordert ein Protokoll, da die Werte immer kleiner und schwieriger zu handhaben sind. Und wenn Sie durch N teilen, damit Sie vergleichen können, auch wenn sich N ändert,
Dies ist die Formel für Kreuzentropie (Kreuzentropie).
Angenommen, die korrekte Antwortbezeichnung $ t_1 $ ~ $ t_3 $ und die Vorhersagewahrscheinlichkeit $ y_1 $ ~ $ y_3 $ lauten wie folgt. Einsetzen eines Wertes in die obige Kreuzentropieformel
Wenn Sie den Code für die Kreuzentropie in Python schreiben,
import numpy as np
def calc_cross_entropy(y_true, y_pred):
loss = np.mean( -1 * (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)), axis=0)
return loss
y_true =np.array([[1], [0], [0]])
y_pred = np.array([[0.8], [0.1], [0.1]])
answer = calc_cross_entropy(y_true, y_pred)
print(answer)
#Ausgabe
# [0.14462153]
Recommended Posts