Estoy tratando de agregar una capa softmax a una red neuronal entrenada con retropropagación, así que estoy tratando de calcular su gradiente.
La salida de softmax es dondees el número de neurona de salida.
Si lo obtengo, me sale
Similar a la regresión logística. Sin embargo, esto está mal ya que mi verificación numérica de gradiente falla.
¿Qué estoy haciendo mal? Pensé que también necesitaba calcular las derivadas cruzadas (es decir, ) pero no estoy seguro de cómo hacer esto y mantener la dimensión del gradiente igual para que se ajuste al proceso de propagación hacia atrás.
neural-networks
Corrió
fuente
fuente
Respuestas:
Me siento un poco mal por dar mi propia respuesta para esto porque está bien capturado por la ameba y la juampa, excepto tal vez la intuición final sobre cómo el jacobiano puede reducirse a un vector.
Derivaste correctamente el gradiente de la diagonal de la matriz jacobiana, lo que quiere decir que
y como lo dijo la ameba, también tienes que derivar las entradas diagonales del jacobiano, que producen
Estas dos definiciones de conceptos se pueden combinar convenientemente usando una construcción llamada el Delta de Kronecker , por lo que la definición del gradiente se convierte en
Entonces el jacobiano es una matriz cuadrada[J]ij=hi(δij−hj)
Toda la información hasta este punto ya está cubierta por ameba y juampa. El problema es, por supuesto, que necesitamos obtener los errores de entrada de los errores de salida que ya están calculados. Como el gradiente del error de salida depende de todas las entradas, entonces el gradiente de la entrada x i es∇hi xi
Dada la matriz jacobiana definida anteriormente, esto se implementa trivialmente como el producto de la matriz y el vector de error de salida:
Si la capa softmax es su capa de salida, entonces combinarla con el modelo de costo de entropía cruzada simplifica el cálculo simplemente
donde es el vector de etiquetas, y → h es la salida de la función softmax. La forma simplificada no solo es conveniente, sino que también es extremadamente útil desde el punto de vista de la estabilidad numérica.t⃗ h⃗
fuente
La derivada está mal. Debería ser,
revisa tus cálculos nuevamente. Además, la expresión dada por la ameba para la entropía cruzada no es del todo correcta. Para un conjunto de muestras de datos extraídos de diferentes clases de , se lee,C
donde el superíndice se ejecuta sobre el conjunto de muestras, es el valor del componente k-ésimo del objetivo para la n-ésima muestra. Aquí se supone que está utilizando un esquema de codificación 1-de-C, es decir, . En tal caso, todas las t son cero, excepto el componente que representa su clase correspondiente, que es una.tnk tnk
Tenga en cuenta que las t son constantes. Por lo tanto, minimizar este funcional es equivalente a minimizar,
que tiene la ventaja de que el jacobiano toma una forma muy conveniente, a saber,
Le recomendaría que obtenga una copia de Bishop's Neural Networks for Pattern Recognition . En mi humilde opinión sigue siendo el mejor libro sobre redes neuronales.
fuente
Cada salida del softmax depende de todas las entradas, por lo que el gradiente es de hecho una matriz jacobiana completa. correctamente , pero también necesita si . Supongo que si puedes derivar la primera expresión, también deberías poder derivar fácilmente la segunda.∂jhj=∂hj∂zj=hj(1−hj) ∂khj=−hjhk j≠k
No estoy seguro de qué problema ve con la propagación inversa: en la capa softmax tiene salidas y entradas, por lo que un error de cada salida debe propagarse a cada entrada, y esa es precisamente la razón por la que necesita todo el jacobiano. Por otro lado, normalmente tendría una función de costo asociada con la salida de softmax, por ejemplo, donde son sus salidas deseadas (cuando realiza la clasificación, a menudo una de ellas es igual a 1 , y otros a 0). Entonces, de hecho, está interesado en , que se puede calcular con una regla de cadena que resulta en una expresión ordenada, y de hecho es un vector (no una matriz).j j
fuente