La función de error de entropía cruzada en redes neuronales


115

En MNIST For ML Beginners definen la entropía cruzada como

Hy(y):=iyilog(yi)

yi es el valor de probabilidad pronosticado para la clase e es la probabilidad real para esa clase.y iiyi

Pregunta 1

¿No es un problema que (en ) podría ser 0? Esto significaría que tenemos un clasificador realmente malo, por supuesto. Pero piense en un error en nuestro conjunto de datos, por ejemplo, un "obvio" etiquetado como . ¿Simplemente se estrellaría? ¿El modelo que elegimos (activación de softmax al final) básicamente nunca da la probabilidad 0 para la clase correcta? inicio sesión ( y i )yilog(yi)13

Pregunta 2

He aprendido que la entropía cruzada se define como

Hy(y):=i(yilog(yi)+(1yi)log(1yi))

¿Que es correcto? ¿Tiene referencias de libros de texto para cualquiera de las versiones? ¿Cómo difieren esas funciones en sus propiedades (como funciones de error para redes neuronales)?



Ver también: Kullback-Leibler Divergence Explicación de la publicación del blog.
Piotr Migdal

Respuestas:


101

Una forma de interpretar la entropía cruzada es verla como una probabilidad de registro (menos) para los datos , bajo un modelo .yiyi

Es decir, suponga que tiene algún modelo fijo (también conocido como "hipótesis"), que predice para clases sus probabilidades de ocurrencia hipotéticas . Suponga que ahora observa (en realidad) instancias de la clase , instancias de la clase , instancias de la clase , etc. Según su modelo, la probabilidad de que esto ocurra es: Tomando el logaritmo y cambiando el signo: n{1,2,,n}y1,y2,,ynk11k22knn

P[data|model]:=y1k1y2k2ynkn.
logP[data|model]=k1logy1k2logy2knlogyn=ikilogyi
Si ahora divide la suma de la derecha por el número de observaciones , y denota las probabilidades empíricas como , obtendrá la entropía cruzada: N=k1+k2++knyi=ki/N
1NlogP[data|model]=1Nikilogyi=iyilogyi=:H(y,y)

Además, la probabilidad logarítmica de un conjunto de datos dado un modelo puede interpretarse como una medida de la "longitud de codificación": el número de bits que espera gastar para codificar esta información si su esquema de codificación se basa en su hipótesis.

Esto se desprende de la observación de que un evento independiente con probabilidad requiere al menos bits para codificarlo (suponiendo una codificación eficiente), y en consecuencia la expresión es literalmente la longitud esperada de la codificación , donde las longitudes de codificación para los eventos se calculan utilizando la distribución "hipotética", mientras que la expectativa se toma sobre la real.yilog2yi

iyilog2yi,

Finalmente, en lugar de decir "medida de la longitud de codificación esperada", me gusta mucho usar el término informal "medida de sorpresa". Si necesita muchos bits para codificar un evento esperado de una distribución, la distribución es "realmente sorprendente" para usted.

Con esas intuiciones en mente, las respuestas a sus preguntas se pueden ver de la siguiente manera:

  • Pregunta 1 . Si. Es un problema cuando el correspondiente no es cero al mismo tiempoyi . Corresponde a la situación en la que su modelo cree que alguna clase tiene cero probabilidad de ocurrencia y, sin embargo, la clase aparece en realidad. Como resultado, la "sorpresa" de su modelo es infinitamente grande: su modelo no tuvo en cuenta ese evento y ahora necesita infinitos bits para codificarlo. Es por eso que obtienes el infinito como tu entropía cruzada.

    Para evitar este problema, debe asegurarse de que su modelo no haga suposiciones precipitadas acerca de que algo es imposible mientras puede suceder. En realidad, las personas tienden a usar funciones sigmoideas o "softmax" como modelos de hipótesis, que son lo suficientemente conservadoras como para dejar al menos alguna posibilidad para cada opción.

    Si usa algún otro modelo de hipótesis, depende de usted regularizarlo (también conocido como "suave") para que no plantee hipótesis de ceros donde no debería.

  • Pregunta 2 . En esta fórmula, generalmente se supone que es o , mientras que es la hipótesis de probabilidad del modelo para la entrada correspondiente. Si observa detenidamente, verá que es simplemente un para datos binarios, un equivalente de la segunda ecuación en esta respuesta.yi01yilogP[data|model]

    Por lo tanto, estrictamente hablando, aunque todavía es una probabilidad logarítmica, esto no es sintácticamente equivalente a la entropía cruzada. Lo que algunas personas quieren decir cuando se refieren a una expresión como entropía cruzada es que, de hecho, es una suma sobre entropías cruzadas binarias para puntos individuales en el conjunto de datos: donde y debe interpretarse como las distribuciones binarias correspondientes y .

    iH(yi,yi),
    yiyi(yi,1yi)(yi,1yi)


1
¿Puede proporcionar una fuente donde definan ? Aquí lo definen como una distribución única para la etiqueta de clase actual. ¿Cuál es la diferencia? yi=kiN
Lenar Hoyt

1
En el tutorial MNIST TensorFlow también lo definen en términos de vectores de un solo hot.
Lenar Hoyt

@LenarHoyt Cuando , sería equivalente a one-hot. Puede pensar en one-hot como la codificación de un elemento en función de su probabilidad categórica (real) empírica. N=1ki/N
THN

'evento independiente requiere ... para codificarlo', ¿podría explicar esto un poco, por favor?
Alex

@Alex Esto puede necesitar una explicación más larga para comprender correctamente: lea sobre los códigos de Shannon-Fano y la relación de la codificación óptima con la ecuación de entropía de Shannon. Para simplificar las cosas, si un evento tiene una probabilidad de 1/2, su mejor opción es codificarlo con un solo bit. Si tiene una probabilidad de 1/4, debe gastar 2 bits para codificarlo, etc. En general, si su conjunto de eventos tiene probabilidades de la forma 1/2 ^ k, debe darles longitudes k, de esta manera su código será acercarse a la longitud óptima de Shannon.
KT.

22

La primera fórmula de logloss que está utilizando es para la pérdida de registro multiclase, donde el subíndice enumera las diferentes clases en un ejemplo. La fórmula supone que un solo en cada ejemplo es 1, y el resto son todos 0.iyi

Eso significa que la fórmula solo captura el error en la clase de destino. Descarta cualquier noción de errores que pueda considerar "falso positivo" y no le importa cómo se distribuyen las probabilidades predichas además de la probabilidad predicha de la clase verdadera.

Otra suposición es que para las predicciones de cada ejemplo. Una capa softmax hace esto automáticamente: si usa algo diferente, necesitará escalar las salidas para cumplir con esa restricción.iyi=1

Pregunta 1

¿No es un problema que (en ) pueda ser 0?yilog(yi)

Sí, eso puede ser un problema, pero generalmente no es práctico. Una capa softmax inicializada al azar es extremadamente improbable que produzca un resultado exacto 0en cualquier clase. Pero es posible, así que vale la pena permitirlo. Primero, no evalúe para ningún , porque las clases negativas siempre contribuyen con 0 al error. En segundo lugar, en el código práctico puede limitar el valor a algo parecido a la estabilidad numérica; en muchos casos no es obligatorio, pero se trata de una programación defensiva sensata.log(yi)yi=0log( max( y_predict, 1e-15 ) )

Pregunta 2

Aprendí que la entropía cruzada se define comoHy(y):=i(yilog(yi)+(1yi)log(1yi))

Esta formulación se usa a menudo para una red con una salida que predice dos clases (generalmente membresía de clase positiva para 1 y negativa para salida 0). En ese caso, posible que solo tenga un valor: puede perder la suma sobre .ii

Si modifica una red de este tipo para tener dos salidas opuestas y usa softmax más la primera definición de logloss, entonces puede ver que, de hecho, es la misma medición de error pero doblando la métrica de error para dos clases en una sola salida.

Si hay más de una clase para predecir la membresía y las clases no son exclusivas, es decir, un ejemplo podría ser cualquiera o todas las clases al mismo tiempo, entonces deberá usar esta segunda formulación. Para el reconocimiento de dígitos, ese no es el caso (un dígito escrito solo debe tener una clase "verdadera")


Tenga en cuenta que hay cierta ambigüedad en la presentación de la segunda fórmula - en teoría podría suponer una sola clase y sería entonces enumerar los ejemplos. i
Neil Slater

Lo siento, he preguntado algo diferente de lo que quería saber. No veo un problema en , pero en , debido a . ¿Podría por favor ajustar su respuesta a eso? log(yi)=0yi=0log(yi)
Martin Thoma

@NeilSlater si las clases no fueran mutuamente excluyentes, el vector de salida para cada entrada puede contener más de un 1, ¿deberíamos usar la segunda fórmula?
Medios de comunicación

1
@ Media: No realmente. Sin embargo, debes estar mirando cosas como la clasificación jerárquica. . .
Neil Slater

1
@Javi: En la pregunta del OP, es la verdad , por lo general, 0 o 1. Es la salida de softmax. Sin embargo, puede terminar en cero en la práctica debido al redondeo de coma flotante. Esto realmente sucede. yiyiyi
Neil Slater

11

Dado , desea optimizar su método de aprendizaje automático para obtener más cerca posible de .ytrueypredictytrue

Primera pregunta:

La respuesta anterior ha explicado los antecedentes de su primera fórmula, la entropía cruzada definida en la teoría de la información.

Desde una opinión distinta de la teoría de la información:

puede examinarse a sí mismo que la primera fórmula no tiene penalización por falso positivo (la verdad es falsa pero su modelo predice que es correcta), mientras que la segunda tiene penalización por falso positivo. Por lo tanto, la elección de la primera fórmula o la segunda afectará sus métricas (también conocida como la cantidad estadística que le gustaría usar para evaluar su modelo).

En palabras simples:

Si quiere aceptar que casi todas las personas buenas sean su amigo, pero dispuesto a aceptar que algunas personas malas se conviertan en su amigo, utilice la primera fórmula para el criterio.

Si quieres castigarte a ti mismo aceptando que algunas personas malas sean tu amigo, pero al mismo tiempo tu tasa de aceptación de personas buenas podría ser menor que la primera condición, entonces usa la segunda fórmula.

Mientras, supongo que la mayoría de nosotros somos críticos y nos gustaría elegir el segundo (por lo que muchos paquetes de ML asumen lo que es entropía cruzada).

Segunda pregunta:

Entropía cruzada por muestra por clase:

ytruelog(ypredict)

Entropía cruzada para conjuntos de datos completos clases enteras:

inkKytrue(k)log(ypredict(k))

Por lo tanto, cuando solo hay dos clases (K = 2), tendrá la segunda fórmula.


5

Esos problemas son manejados por el uso del tutorial de softmax.

Para 1) tienes razón en que softmax garantiza una salida distinta de cero porque expone su entrada. Para las activaciones que no brindan esta garantía (como relu), es simple agregar un término positivo muy pequeño a cada salida para evitar ese problema.

En cuanto a 2), obviamente no son lo mismo, pero la formulación de softmax que dieron se ocupa del problema. Si no usó softmax, esto le haría aprender términos de sesgo enormes que suponen 1 para cada clase para cualquier entrada. Pero dado que normalizan el softmax en todas las clases, la única forma de maximizar la salida de la clase correcta es que sea grande en relación con las clases incorrectas.


"tienes razón en que softmax garantiza una salida distinta de cero" - Sé que este es teóricamente el caso. En realidad, ¿puede suceder que (debido a problemas numéricos) esto se convierta en 0?
Martin Thoma

Buena pregunta. Supongo que es perfectamente posible que la función de exponenciación produzca 0.0 si su entrada es demasiado pequeña para la precisión de su flotación. Sin embargo, supongo que la mayoría de las implementaciones agregan el pequeño término positivo para garantizar una entrada distinta de cero.
jamesmf

0

¿No es un problema que (en ) podría ser 0?yilog(yi)

Sí, porque no está definido, pero este problema se evita utilizando en la práctica.log(0)log(yi+ϵ)

¿Que es correcto?
(a) o (b) ?Hy(y):=iyilog(yi)
Hy(y):=i(yilog(yi)+(1yi)log(1yi))

(a) es correcto para la predicción de múltiples clases (en realidad es una suma doble), (b) es lo mismo que (a) para la predicción de dos clases. Ambas son entropía cruzada.

Ejemplo:

Suponga que cada dato de entrenamiento tiene la etiqueta , y el modelo predice .xici{0,1}ci[0,1]

Para 5 puntos de datos, la etiqueta verdadera y la predicción del modelo son: cici

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)} (1),

Defina los vectores y como yiyi

  • yik:=1 si , y contrario, ci=k:=0

  • yik:=p(k|xi) es la probabilidad de que pertenezca a la clase , que se estima por modelo.xik

El ejemplo (1) en convierte en: (yi,yi)

(yi,yi)={([1,0],[0.9,0.1]), ([1,0],[0.6,0.4]), ([1,0],[0.2,0.8]), ([0,1],[0.2,0.8]), ([0,1],[0.8,0.2])} ,

Tanto (a) como (b) se calculan como:

Hy(y)=1/5([log(0.9)+log(0.6)+log(0.2)]ci=0+[log(0.8)+log(0.2)]ci=1)=0.352

Derivación:

Supongamos que hay múltiples clases de a . Para el punto de entrenamiento , es equivalente a que es 1 en la posición y 0 en otra parte. Cuando , queremos que la salida del modelo esté cerca de 1. Por lo tanto, la pérdida de se puede definir como , que proporciona . La pérdida sobre todas las clases se puede combinar como:1K
(xi,ci)ci=kyi=[0,..,1,0,..]kthyik=1yik=p(k|xi)(xi,k)log(yik)yik1log(yik)0

L(yi,yi)=k=1Kyiklog(yik) .

Cuando , la pérdida de todas las otras clases se deshabilita como , entonces, por ejemplo, cuando la etiqueta verdadera es , la pérdida sería ser:yik=1kk0log(yik)=0yim=1

L(yi,yi)=log(yim) .

La fórmula final sobre todos los puntos de entrenamiento es:

Hy(y)=(xi,yi)k=1Kyiklog(yik) .

Para la clasificación binaria, tenemos (etiquetas verdaderas) y (predicciones del modelo), por lo tanto (a) puede reescribirse como:yi0=1yi1yi0=1yi1

Hy(y)=(xi,yi)yi1log(yi1)+yi0log(yi0)=(xi,yi)yi1log(yi1)+(1yi1)log(1yi1)

que es lo mismo que (b).

Entropía cruzada (a) sobre clases (una suma)

La entropía cruzada (a) sobre clases es:

Hy(y)=k=1Kyklog(yk) ,

Esta versión no se puede usar para la tarea de clasificación. Reutilicemos los datos del ejemplo anterior:

(ci,ci)={(0,0.1),(0,0.4),(0,0.8),(1,0.8),(1,0.2)}

Las probabilidades de clase empírica son: , y ,y0=3/5=0.6y1=0.4

Las probabilidades de clase estimadas por modelo son: , yy0=3/5=0.6y1=0.4

(a) se calcula como: .y0logy0y1logy1=0.6log(0.6)0.4log(0.4)=0.292

Dos puntos de datos y están clasificados pero y se estiman correctamente.(0,0.8)(1,0.2)y0y1

Si los 5 puntos se clasificaron correctamente como: ,
(ci,ci)={(0,0.1),(0,0.4),(0,0.2),(1,0.8),(1,0.8)}

(a) sigue siendo el mismo, ya que nuevamente se estima como .y0y0=3/5