Estoy tratando de entender cómo funciona la retropropagación para una capa de salida softmax / cross-entropy.
La función de error de entropía cruzada es
con y como objetivo y salida en la neurona , respectivamente. La suma está sobre cada neurona en la capa de salida. sí es el resultado de la función softmax:
Nuevamente, la suma está sobre cada neurona en la capa de salida y es la entrada a la neurona :
Esa es la suma de todas las neuronas en la capa anterior con su correspondiente salida y peso hacia la neurona más un sesgo .
Ahora, para actualizar un peso que conecta una neurona en la capa de salida con una neurona en la capa anterior, necesito calcular la derivada parcial de la función de error usando la regla de la cadena:
con como entrada a la neurona .
El último término es bastante simple. Como solo hay un peso entre y , la derivada es:
El primer término es la derivación de la función de error con respecto a la salida :
El término medio es la derivación de la función softmax con respecto a su entrada es más difícil:
Digamos que tenemos tres neuronas de salida correspondientes a las clases , entonces o b = s o f t m a x ( b ) es:
y su derivación usando la regla del cociente:
=softmax(b)-softmax2(b)=ob-o 2 b =ob(1-ob) Volver al término medio para retropropagación esto significa: ∂oj
Poniendo todo junto consigo
lo que significa que si el objetivo para esta clase es , entonces no actualizaré los pesos para esto. Eso no suena bien.
Investigando sobre esto encontré personas que tienen dos variantes para la derivación de softmax, una donde y la otra para i ≠ j , como aquí o aquí .
Pero no puedo entender esto. Además, ni siquiera estoy seguro de si esta es la causa de mi error, por eso publico todos mis cálculos. Espero que alguien pueda aclararme dónde me falta algo o si sale mal.