¿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.
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?
4 votos
La idea es que todo el mundo utilice la misma terminología aquí, y que si es diferente la convirtamos en esta, para que las respuestas "encajen" entre sí. Pero supongo que podría eliminar esa parte si no crees que es útil.
2 votos
Sólo creo que el detalle en el que entra la pregunta no es realmente necesario o relevante. Me parece un poco excesivo y limitante, pero eso es sólo cosa mía.