Una lista de funciones de costo utilizadas en redes neuronales, junto con aplicaciones

133

¿Cuáles son las funciones de costo comunes utilizadas en la evaluación del rendimiento de las redes neuronales?

Detalles

(siéntase libre de omitir el resto de esta pregunta, mi intención aquí es simplemente proporcionar una aclaración sobre la notación que las respuestas pueden usar para ayudarlos a ser más comprensibles para el lector general)

Creo que sería útil tener una lista de funciones de costos comunes, junto con algunas formas en que se han utilizado en la práctica. Entonces, si otros están interesados ​​en esto, creo que una wiki comunitaria es probablemente el mejor enfoque, o podemos eliminarlo si está fuera de tema.

Notación

Entonces, para comenzar, me gustaría definir una notación que todos usamos al describirlos, para que las respuestas se ajusten bien entre sí.

Esta notación es del libro de Neilsen .

Una red neuronal Feedforward consiste en muchas capas de neuronas conectadas entre sí. Luego toma una entrada, esa entrada "gotea" a través de la red y luego la red neuronal devuelve un vector de salida.

Más formalmente, llame aji la activación (también conocida como salida) de la neurona jth en la capa ith , donde aj1 es el elemento jth en el vector de entrada.

Luego podemos relacionar la entrada de la siguiente capa con la anterior a través de la siguiente relación:

aji=σ(k(wjkiaki1)+bji)

dónde

es la función de activación,σ

es el peso desde laneurona k t h en lacapa ( i - 1 ) t h hasta laneurona j t h en lacapa i t h ,wjkikth(i1)thjthith

es el sesgo de laneurona j t h en lacapa i t h , ybjijthith

representa el valor de activación de laneurona j t h en lacapa i t h .ajijthith

A veces escribimos para representar k ( w i j ka i - 1 k ) + b i j , en otras palabras, el valor de activación de una neurona antes de aplicar la función de activación.zjik(wjkiaki1)+bji

ingrese la descripción de la imagen aquí

Para una notación más concisa podemos escribir

ai=σ(wi×ai1+bi)

IRna1=Ia2a3am

Introducción

Una función de costo es una medida de "qué tan bueno" hizo una red neuronal con respecto a su muestra de entrenamiento y la salida esperada. También puede depender de variables como pesos y sesgos.

Una función de costo es un valor único, no un vector, porque califica qué tan bien hizo la red neuronal en su conjunto.

Específicamente, una función de costo tiene la forma

C(W,B,Sr,Er)

WBSrEryjizjijiWBSr

δL

δjL=CajLσ(zji)

Que también se puede escribir como un vector a través de

δL=aCσ(zi)

Proporcionaremos el gradiente de las funciones de costo en términos de la segunda ecuación, pero si uno quiere probar estos resultados por sí mismos, se recomienda usar la primera ecuación porque es más fácil trabajar con ella.

Requisitos de función de costo

Para usarse en la propagación hacia atrás, una función de costo debe satisfacer dos propiedades:

C

C=1nxCx

Cxx

Esto es así, nos permite calcular el gradiente (con respecto a los pesos y sesgos) para un solo ejemplo de entrenamiento, y ejecutar Gradient Descent.

CaL

ajizji

0ajL1jajLajL0

Phylliida
fuente
3
Este es un sitio de preguntas y respuestas, y el formato de esta publicación realmente no se ajusta a eso. Probablemente debería poner la mayor parte del contenido en una respuesta y dejar solo la pregunta (por ejemplo, ¿Qué es una lista de funciones de costo utilizadas en las NN?).
Roger Fan
Ok, eso es mejor? Creo que las definiciones son importantes, de lo contrario las respuestas se vuelven vagas para aquellos que no están familiarizados con la terminología que usa el escritor.
Phylliida
Pero, ¿qué pasa si una respuesta diferente usa notación o terminología diferente?
Roger Fan,
3
La idea es que todos usen la misma terminología aquí, y que si es diferente la convertimos a esto, por lo que las respuestas "encajan" entre sí. Pero supongo que podría eliminar esa pieza si no crees que sea útil.
Phylliida
1
Solo creo que el detalle en el que entra la pregunta no es realmente necesario o relevante. Parece un poco excesivo y limitante, pero solo soy yo.
Roger Fan

Respuestas:

85

Aquí están los que entiendo hasta ahora. La mayoría de estos funcionan mejor cuando se dan valores entre 0 y 1.

Costo cuadrático

También conocido como error cuadrático medio , probabilidad máxima y error cuadrático total , esto se define como:

CMST(W,B,Sr,Er)=0.5j(ajLEjr)2

r

aCMST=(aLEr)

Costo de entropía cruzada

También conocido como verosimilitud negativa de Bernoulli y entropía cruzada binaria

CCE(W,B,Sr,Er)=j[Ejr ln ajL+(1Ejr) ln (1ajL)]

r

aCCE=(aLEr)(1aL)(aL)

Costo exponencial

τ

CEXP(W,B,Sr,Er)=τ exp(1τj(ajLEjr)2)

exp(x)ex

r

aC=2τ(aLEr)CEXP(W,B,Sr,Er)

CEXPCEXP

Distancia Hellinger

CHD(W,B,Sr,Er)=12j(ajLEjr)2

01

r

aC=aLEr2aL

Kullback – Leibler divergencia

También conocido como divergencia de información , ganancia de información , entropía relativa , KLIC o divergencia de KL (ver aquí ).

DKL(PQ)=iP(i)lnP(i)Q(i)

donde es una medida de la pérdida de información cuando se utiliza para aproximar . Por lo tanto, queremos establecer y , porque queremos medir cuánta información se pierde cuando usamos para aproximar . Esto nos daDKL(PQ)QPP=EiQ=aLajiEji

CKL(W,B,Sr,Er)=jEjrlogEjrajL

Las otras divergencias aquí utilizan esta misma idea de crear y .P=EiQ=aL

El gradiente de esta función de costo con respecto a la salida de una red neuronal y alguna muestra es:r

aC=EraL

Divergencia generalizada de Kullback-Leibler

A partir de aquí .

CGKL(W,B,Sr,Er)=jEjrlogEjrajLj(Ejr)+j(ajL)

El gradiente de esta función de costo con respecto a la salida de una red neuronal y alguna muestra es:r

aC=aLEraL

Distancia Itakura-Saito

También desde aquí .

CGKL(W,B,Sr,Er)=j(EjrajLlogEjrajL1)

El gradiente de esta función de costo con respecto a la salida de una red neuronal y alguna muestra es:r

aC=aLEr(aL)2

Donde . En otras palabras, es simplemente igual a la cuadratura cada elemento de .((aL)2)j=ajLajL(aL)2aL

Phylliida
fuente
Gracias por compartir, también puede considerar estos: github.com/torch/nn/blob/master/doc/criterion.md
Yannis Assael
2
usted tiene un pequeño error en el denominador de la derivada de entropía cruzada, debe ser a*(1-a)noa*(1+a)
Amro
1
También sería genial mostrar la función de pérdida de pinball para minimizar los cuantiles de error en lugar del error promedio. Muy utilizado en sistemas de soporte de decisiones.
Ricardo Cruz
¿Dónde puedo ver gráficos para estos?
coiso
1
Con respecto a la función de costo cuadrático, debe tener en cuenta que "error cuadrático medio" "máxima probabilidad" "error cuadrático suma". Los autores pueden usar el nombre (incorrectamente) indistintamente, pero no son lo mismo.
Jon
20

No tengo la reputación de comentar, pero hay errores de signos en los últimos 3 gradientes.

En la divergencia KL, Esto El mismo error de signo aparece en la divergencia KL generalizada.

C=jEjlog(Ej/aj)=jEjlog(Ej)Ejlog(aj)dC=jEjdlog(aj)=j(Ej/aj)dajaC=Ea

En la distancia Itakura-Saito,

C=j(Ej/aj)log(Ej/aj)1=j(Ej/aj)log(Ej)+log(aj)1dC=j(Ej/aj2)daj+dlog(aj)=j(1/aj)daj(Ej/aj2)daj=j(ajEj)/aj2dajaC=aE(a)2
franco
fuente