Cette fois, je vais résumer ce que j'ai appris sur l'entropie croisée (entropie croisée).
Si la fonction sigmoïde est $ \ sigma et $ y = $ \ sigma $ (W ・ x + b), la probabilité que le neurone se déclenche (sortie 1) peut être exprimée comme suit. P (C = 1 | x) = $ \ sigma $ (W · x + b)
Au contraire, la probabilité de ne pas tirer peut être exprimée comme suit. P (C = 0 | x) = 1- $ \ sigma $ (W · x + b)
En exprimant ces deux dans une équation, la probabilité de déclenchement d'un neurone peut être exprimée comme suit (cependant, t = 0 ou t = 1).
P(C = t|x) =
Puisque la probabilité L de l'ensemble du réseau est le produit des probabilités de déclenchement de tous les neurones,
Le maximum de vraisemblance peut être obtenu en maximisant cette équation, mais il est plus facile de l'optimiser en la minimisant, donc multipliez-le par un moins. La multiplication des probabilités prend un journal car les valeurs deviennent de plus en plus petites et difficiles à gérer. Et si vous divisez par N pour pouvoir comparer même si N change,
C'est la formule de l'entropie croisée (entropie croisée).
Supposons maintenant que l'étiquette de réponse correcte $ t_1 $ ~ $ t_3 $ et la probabilité de prédiction $ y_1 $ ~ $ y_3 $ soient les suivantes. Remplacer une valeur dans la formule d'entropie croisée ci-dessus
Si vous écrivez le code pour l'entropie croisée en python,
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)
#production
# [0.14462153]
Recommended Posts