Loading [MathJax]/jax/element/mml/optable/GeneralPunctuation.js

186 votos

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

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

Detalles

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

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

Notación

Así que para empezar, me gustaría definir una notación que todos usamos al describirlas, para que las respuestas encajen bien entre sí.

Esta notación es de El libro de Neilsen .

Una red neuronal de avance es una gran cantidad de 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 aij la activación (también conocida como salida) de la jth neurona en la ith capa, donde a1j es el jth en el vector de entrada.

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

aij=σ(k(wijkai1k)+bij)

donde

σ es la función de activación,

wijk es el peso de la kth neurona en la (i1)th a la capa de jth neurona en la ith capa,

bij es el sesgo de la jth neurona en la ith capa, y

aij representa el valor de activación de la jth neurona en la ith capa.

A veces escribimos zij para representar k(wijkai1k)+bij en otras palabras, el valor de activación de una neurona antes de aplicar la función de activación.

enter image description here

Para una notación más concisa podemos escribir

ai=σ(wi×ai1+bi)

Para usar esta fórmula para calcular la salida de una red de alimentación para alguna entrada IRn en el set a1=I y luego calcular a2 , a3 , ..., am donde m es el número de capas.

Introducción

Una función de costo es una medida de "cuán bien" lo hizo una red neuronal con respecto a la muestra de entrenamiento que se le dio y el resultado esperado. También puede depender de variables como los pesos y los sesgos.

Una función de costo es un valor único, no un vector, porque califica cuán bien hizo la red neural en su conjunto.

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

C(W,B,Sr,Er)

donde W es el peso de nuestra red neural, B son los sesgos de nuestra red neural, Sr es la aportación de una única muestra de entrenamiento, y Er es el resultado deseado de esa muestra de entrenamiento. Tenga en cuenta que esta función también puede depender potencialmente de yij y zij para cualquier neurona j en la capa i porque esos valores dependen de W , B y Sr .

En la retropropagación, la función de costo se usa para calcular el error de nuestra capa de salida, δL , a través de

δLj=CaLjσ(zij) .

Que también puede ser escrito 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í mismo, se recomienda usar la primera ecuación porque es más fácil de trabajar con ella.

Requisitos de la función de costo

Para ser usada en la retropropagación, una función de costo debe satisfacer dos propiedades:

1: La función de costo C debe ser capaz de ser escrito como un promedio

C=1nxCx

sobre las funciones de costo Cx para ejemplos de entrenamiento individual, x .

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

2: La función de costo C no debe depender de ningún valor de activación de una red neuronal además de los valores de salida aL .

Técnicamente una función de costo puede depender de cualquier aij o zij . Sólo hacemos esta restricción para poder retroceder, porque la ecuación para encontrar el gradiente de la última capa es la única que depende de la función de coste (el resto depende de la siguiente capa). Si la función de costo depende de otras capas de activación además de la de salida, la retropropagación no será válida porque la idea del "goteo hacia atrás" ya no funciona.

Además, las funciones de activación son necesarias para tener una salida 0aLj1 para todos j . Por lo tanto, estas funciones de costo sólo necesitan ser definidas dentro de ese rango (por ejemplo, aLj es válido ya que se nos garantiza aLj0 ).

4 votos

Este es un sitio de preguntas y respuestas, y el formato de este post no se ajusta a eso. Probablemente deberías poner la mayor parte del contenido en una respuesta, y dejar sólo la pregunta (por ejemplo, ¿qué es una lista de funciones de coste utilizadas en las NN?).

1 votos

De acuerdo, ¿es mejor así? 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 utiliza el escritor.

1 votos

¿Pero qué pasa si una respuesta diferente utiliza una notación o terminología distinta?

110voto

William Ryan Puntos 1

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

Coste cuadrático

También conocido como error medio cuadrático se define como:

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

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

aCMST=(aLEr)

Coste de la entropía cruzada

También conocido como Probabilidad logarítmica negativa de Bernoulli y Entropía cruzada binaria

CCE(W,B,Sr,Er)=j[Erj ln aLj+(1Erj) ln (1aLj)]

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

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

Coste exponencial

Para ello es necesario elegir algún parámetro τ que crees que te dará el comportamiento que deseas. Normalmente tendrás que jugar con esto hasta que las cosas funcionen bien.

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

donde exp(x) es simplemente una abreviatura de ex .

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

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

Podría reescribir CEXP pero eso parece redundante. El punto es que el gradiente calcula un vector y luego lo multiplica por CEXP .

Distancia Hellinger

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

Puede encontrar más información al respecto aquí . Esto debe tener valores positivos, e idealmente valores entre 0 y 1 . Lo mismo ocurre con las siguientes divergencias.

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

aC=aLEr2aL

Divergencia de Kullback-Leibler

También conocido como Divergencia de información , Ganancia de información , Entropía relativa , KLIC o Divergencia KL (Ver aquí ).

La divergencia de Kullback-Leibler se suele denominar DKL(P ,

donde D_{\mathrm{KL}}(P\|Q) es una medida de la información que se pierde cuando Q se utiliza para aproximar P . Por lo tanto, queremos establecer P=E^i y Q=a^L porque queremos medir cuánta información se pierde cuando usamos a^i_j para aproximar E^i_j . Esto nos da

C_{KL}(W, B, S^r, E^r)=\sum\limits_jE^r_j \log \frac{E^r_j}{a^L_j}

Las otras divergencias aquí utilizan esta misma idea de fijar P=E^i y Q=a^L .

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

\nabla_a C = -\frac{E^r}{a^L}

Divergencia de Kullback-Leibler generalizada

Desde aquí .

C_{GKL}(W, B, S^r, E^r)=\sum\limits_j E^r_j \log \frac{E^r_j}{a^L_j} -\sum\limits_j(E^r_j) + \sum\limits_j(a^L_j)

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

\nabla_a C = \frac{a^L-E^r}{a^L}

Distancia Itakura-Saito

También de aquí .

C_{GKL}(W, B, S^r, E^r)= \sum_j \left(\frac {E^r_j}{a^L_j} - \log \frac{E^r_j}{a^L_j} - 1 \right)

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

\nabla_a C = \frac{a^L-E^r}{\left(a^L\right)^2}

Dónde \left(\left(a^L\right)^2\right)_j = a^L_j \cdot a^L_j . En otras palabras, \left( a^L\right) ^2 es simplemente igual a elevar al cuadrado cada elemento de a^L .

0 votos

Gracias por compartirlo, también puedes tener en cuenta esto: github.com/torch/nn/blob/master/doc/criterion.md

3 votos

Tienes un pequeño error en el denominador de la derivada de la entropía cruzada, debería ser a*(1-a) no a*(1+a)

1 votos

También sería genial mostrar la función de pérdida del pinball para minimizar los cuantiles de error en lugar del error medio. Muy utilizado en los sistemas de apoyo a la decisión.

24voto

EvilLemur Puntos 11

No tengo la reputación para comentar, pero hay errores de señal en esos últimos 3 gradientes.

En la divergencia KL, \eqalign{ C &= \sum_j E_j\log(E_j/a_j) \cr &= \sum_j E_j\log(E_j) - E_j\log(a_j) \cr\cr dC &= -\sum_j E_j\,\,d\log(a_j) \cr &= -\sum_j (E_j/a_j)\,da_j \cr\cr \nabla_a C &= \frac{-E}{a} \cr\cr } Este mismo error de signo aparece en la divergencia KL generalizada.

En la distancia Itakura-Saito , \eqalign{ C &= \sum_j (E_j/a_j) - \log(E_j/a_j) - 1 \cr &= \sum_j (E_j/a_j) - \log(E_j) + \log(a_j) -1 \cr\cr dC &= \sum_j (-E_j/a^2_j)\,da_j + d\log(a_j) \cr &= \sum_j (1/a_j)\,da_j - (E_j/a^2_j)\,da_j \cr &= \sum_j (a_j-E_j)/a^2_j\,\,\,da_j \cr\cr \nabla_a C &= \frac{a-E}{(a)^2} \cr }

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