¿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(wijk⋅ai−1k)+bij)
donde
σ es la función de activación,
wijk es el peso de la kth neurona en la (i−1)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(wijk⋅ai−1k)+bij 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
ai=σ(wi×ai−1+bi)
Para usar esta fórmula para calcular la salida de una red de alimentación para alguna entrada I∈Rn 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=∂C∂aLjσ′(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=1n∑xCx
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 0≤aLj≤1 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 aLj≥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.