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
∂hi∂zj=hi(1−hj):i=j
y como lo dijo la ameba, también tienes que derivar las entradas diagonales del jacobiano, que producen
∂hi∂zj=−hihj:i≠j
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
∂hi∂zj=hi(δij−hj)
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∇hixi
[∇x]k=∑i=1∇hi,k
Dada la matriz jacobiana definida anteriormente, esto se implementa trivialmente como el producto de la matriz y el vector de error de salida:
σl→=Jσl+1→
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
σl→=h⃗ −t⃗
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⃗