Mi sento un po 'male nel fornire la mia risposta per questo perché è abbastanza ben catturato da ameba e juampa, tranne forse l'intuizione finale su come il Jacobiano può essere ridotto a un vettore.
Hai correttamente derivato il gradiente della diagonale della matrice giacobina, vale a dire che
∂hi∂zj=hi(1−hj):i=j
e come diceva l'ameba, devi anche derivare le voci diagonali del giacobino, che cedono
∂hi∂zj=−hihj:i≠j
Queste definizioni di due concetti possono essere convenientemente combinate usando un costrutto chiamato Delta di Kronecker , così diventa la definizione del gradiente
∂hi∂zj=hi(δij−hj)
Quindi il giacobino è una matrice quadrata [J]ij=hi(δij−hj)
Tutte le informazioni fino a questo punto sono già coperte da ameba e juampa. Naturalmente il problema è che dobbiamo ottenere gli errori di input dagli errori di output che sono già stati calcolati. Poiché il gradiente dell'errore di uscita dipende da tutti gli ingressi, quindi il gradiente di ingresso x i è∇hixi
[∇x]k=∑i=1∇hi,k
Data la matrice giacobina sopra definita, questa viene implementata in modo banale come prodotto della matrice e vettore di errore di output:
σl→=Jσl+1→
Se il livello softmax è il livello di output, la combinazione con il modello di costo tra entropia semplifica il calcolo in modo semplice
σl→=h⃗ −t⃗
dove è il vettore delle etichette e → h è l'output della funzione softmax. Non solo è conveniente la forma semplificata, ma è anche estremamente utile dal punto di vista della stabilità numerica.t⃗ h⃗