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 $a^i_j$ la activación (también conocida como salida) de la $j^{th}$ neurona en la $i^{th}$ capa, donde $a^1_j$ es el $j^{th}$ 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:

$a^i_j = \sigma ( \sum\limits_k (w^i_{jk} \cdot a^{i-1}_k) + b^i_j)$

donde

$ \sigma $ es la función de activación,

$w^i_{jk}$ es el peso de la $k^{th}$ neurona en la $(i-1)^{th}$ a la capa de $j^{th}$ neurona en la $i^{th}$ capa,

$b^i_j$ es el sesgo de la $j^{th}$ neurona en la $i^{th}$ capa, y

$a^i_j$ representa el valor de activación de la $j^{th}$ neurona en la $i^th$ capa.

A veces escribimos $z^i_j$ para representar $ \sum\limits_k (w^i_{jk} \cdot a^{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.

enter image description here

Para una notación más concisa podemos escribir

$a^i = \sigma (w^i \times a^{i-1} + b^i)$

Para usar esta fórmula para calcular la salida de una red de alimentación para alguna entrada $I \in \mathbb {R}^n$ en el set $a^1 = I$ y luego calcular $a^2$ , $a^3$ , ..., $a^m$ 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, S^r, E^r)$$

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

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

$$ \delta ^L_j = \frac { \partial C}{ \partial a^L_j} \sigma ^{ \prime }(z^i_j)$$ .

Que también puede ser escrito como un vector a través de

$$ \delta ^L = \nabla_a C \odot \sigma ^{ \prime }(z^i)$$ .

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= \frac {1}{n} \sum\limits_x C_x$$

sobre las funciones de costo $C_x$ 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 $a^L$ .

Técnicamente una función de costo puede depender de cualquier $a^i_j$ o $z^i_j$ . 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 $0 \leq a^L_j \leq 1$ para todos $j$ . Por lo tanto, estas funciones de costo sólo necesitan ser definidas dentro de ese rango (por ejemplo, $ \sqrt {a^L_j}$ es válido ya que se nos garantiza $a^L_j \geq 0$ ).

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:

$$C_{MST}(W, B, S^r, E^r) = 0.5\sum\limits_j (a^L_j - E^r_j)^2$$

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_{MST} = (a^L - E^r)$$

Coste de la entropía cruzada

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

$$C_{CE}(W, B, S^r, E^r) = -\sum\limits_j [E^r_j \text{ ln } a^L_j + (1 - E^r_j) \text{ ln }(1-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_{CE} = \frac{(a^L - E^r)}{(1-a^L)(a^L)}$$

Coste exponencial

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

$$C_{EXP}(W, B, S^r, E^r) = \tau\text{ }\exp(\frac{1}{\tau} \sum\limits_j (a^L_j - E^r_j)^2)$$

donde $\text{exp}(x)$ es simplemente una abreviatura de $e^x$ .

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{2}{\tau}(a^L- E^r)C_{EXP}(W, B, S^r, E^r)$$

Podría reescribir $C_{EXP}$ pero eso parece redundante. El punto es que el gradiente calcula un vector y luego lo multiplica por $C_{EXP}$ .

Distancia Hellinger

$$C_{HD}(W, B, S^r, E^r) = \frac{1}{\sqrt{2}}\sum\limits_j(\sqrt{a^L_j}-\sqrt{E^r_j})^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:

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

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 $$D_{\mathrm{KL}}(P\|Q) = \sum_i P(i) \, \ln\frac{P(i)}{Q(i)}$$ ,

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