90 votos

Entropía cruzada vs. Entropía cruzada dispersa: Cuándo utilizar una sobre la otra

Estoy jugando con redes neuronales convolucionales usando Keras+Tensorflow para clasificar datos categóricos. Puedo elegir entre dos funciones de pérdida: categorial_crossentropy y sparse_categorial_crossentropy .

Tengo una buena intuición sobre el categorial_crossentropy función de pérdida, que se define como sigue:

$$ J(\textbf{w}) = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i \text{log}(\hat{y}_i) + (1-y_i) \text{log}(1-\hat{y}_i) \right] $$

donde,

  • $\textbf{w}$ se refieren a los parámetros del modelo, por ejemplo, los pesos de la red neuronal
  • $y_i$ es la verdadera etiqueta
  • $\hat{y_i}$ es la etiqueta prevista

Ambas etiquetas utilizan el esquema de codificación de un disparo.

Preguntas:

  • ¿Cómo cambia la función de pérdida anterior en sparse_categorial_crossentropy ?
  • ¿Cuál es la intuición matemática que hay detrás?
  • ¿Cuándo utilizar uno sobre el otro?

107voto

Venci Vatashki Puntos 36

Tanto la entropía cruzada categórica como la entropía cruzada categórica dispersa tienen la misma función de pérdida que has mencionado anteriormente. La única diferencia es el formato en el que se menciona $Y_i$ (es decir, etiquetas verdaderas).

Si su $Y_i$ se codifican con un solo disparo, utilice categorical_crossentropy. Ejemplos (para una clasificación de 3 clases): [1,0,0] , [0,1,0], [0,0,1]

Pero si su $Y_i$ son enteros, utilice sparse_categorical_crossentropy. Ejemplos para el problema de clasificación de 3 clases anterior: [1] , [2], [3]

El uso depende totalmente de cómo se cargue el conjunto de datos. Una de las ventajas de utilizar la entropía cruzada categórica dispersa es que ahorra tiempo de memoria y de cálculo, ya que simplemente utiliza un único número entero para una clase, en lugar de un vector completo.

12voto

Kamil Rafałko Puntos 46

La fórmula que ha publicado en su pregunta se refiere a binary_crossentropy no categorical_crossentropy . El primero se utiliza cuando se tiene una sola clase. La segunda se refiere a una situación en la que se tienen varias clases y su fórmula es como la siguiente:

$$J(\textbf{w}) = -\sum_{i=1}^{N} y_i \text{log}(\hat{y}_i).$$

Esta pérdida funciona como skadaver mencionado en los valores codificados de un solo golpe, por ejemplo [1,0,0], [0,1,0], [0,0,1]

El sparse_categorical_crossentropy es un poco diferente, funciona con enteros es cierto, pero estos enteros deben ser los índices de la clase, no los valores reales. Esta pérdida computa el logaritmo sólo para el índice de salida que la verdad del terreno indica. Así que cuando la salida del modelo es, por ejemplo [0.1, 0.3, 0.7] y la verdad sobre el terreno es 3 (si está indexado a partir de 1) entonces la pérdida computa sólo el logaritmo de 0.7 . Esto no cambia el valor final, porque en la versión regular de la entropía cruzada categórica los otros valores se multiplican inmediatamente por cero (debido a la característica de codificación de un solo disparo). Gracias a ello se computa el logaritmo una vez por instancia y se omite la suma, lo que conduce a un mejor rendimiento. La fórmula podría ser la siguiente

$$J(\textbf{w}) = -\text{log}(\hat{y}_y).$$

7voto

MissMonicaE Puntos 174

No tengo mejor respuesta que los enlaces y yo también me encontré con la misma pregunta. Sólo quiero señalar que la fórmula de la función de pérdida (entropía cruzada) parece ser un poco errónea (y podría ser engañosa). $$J(\textbf{w}) = -\frac{1}{N} \sum_{i=1}^{N} y_i \text{log}(\hat{y}_i).$$ Perdón por escribir mi comentario aquí, pero no tengo suficientes puntos de reputación para poder comentar...

3voto

marcodome Puntos 1

Por la naturaleza de tu pregunta, parece que tienes 3 o más categorías. Sin embargo, para completar me gustaría añadir que si se trata de una clasificación binaria, utilizando binary cross entropy podría ser más apropiado.

Además, hay que tener cuidado de elegir bien la pérdida y la métrica, ya que esto puede llevar a un comportamiento inesperado y extraño en el rendimiento de su modelo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X