J'essaie d'ajouter une couche softmax à un réseau de neurones formé à la rétropropagation, alors j'essaie de calculer son gradient.
La sortie softmax est oùest le nombre de neurones de sortie.
Si je le dérive alors je reçois
Similaire à la régression logistique. Cependant, cela est faux car ma vérification de gradient numérique échoue.
Qu'est-ce que je fais mal? Je pensais que je devais aussi calculer les dérivées croisées (ie ) mais je ne suis pas sûr de savoir comment faire cela et garder la même dimension que le dégradé pour qu'il puisse être utilisé dans le processus de propagation arrière.
neural-networks
Couru
la source
la source
Réponses:
Je me sens un peu mal de fournir ma propre réponse à cette question, car elle est très bien capturée par l'amibe et le juampa, à l'exception peut-être de l'intuition finale sur la façon dont le jacobien peut être réduit à un vecteur.
Vous avez correctement dérivé le gradient de la diagonale de la matrice jacobienne, c'est-à-dire que
et comme l’a dit l’amibe, vous devez également déduire les entrées en diagonale du jacobien, qui donnent
Ces deux concepts peuvent être combinés à l’aide d’une construction appelée Kronecker Delta . La définition du dégradé devient
Étant donné la matrice jacobienne définie ci-dessus, celle-ci est implémentée de manière triviale en tant que produit de la matrice et du vecteur d'erreur de sortie:
Si la couche softmax est votre couche de sortie, sa combinaison avec le modèle de coût à entropie croisée simplifie le calcul en vous permettant simplement de:
la source
Le dérivé est faux. CA devrait etre,
où le superindex passe sur le jeu d'échantillons est la valeur de la k-ième composante de la cible pour le n-ième échantillon. Ici, on suppose que vous utilisez un schéma de codage 1-C, c’est-à-dire . Dans ce cas, tous les t sont nuls à l'exception du composant représentant la classe correspondante, qui en est un.tnk tnk
Notez que les t sont constants. Par conséquent, minimiser cette fonctionnalité équivaut à minimiser,
qui a l'avantage que le jacobien prend une forme très pratique, à savoir,
Je vous recommanderais d’obtenir une copie de Bishop's Neural Networks pour Pattern Recognition . IMHO reste le meilleur livre sur les réseaux de neurones.
la source
Chaque sortie de la softmax dépend de toutes les entrées, le gradient est donc une matrice jacobienne entière. Vous avez correctement calculé , mais vous avez également besoin de si . Je suppose que si vous pouvez dériver la première expression, vous devriez également pouvoir en dériver la seconde.∂khj=-hjhkj≠k∂jhj=∂hj∂zj=hj(1−hj) ∂khj=−hjhk j≠k
Je ne suis pas sûr du problème que vous voyez avec la propagation en arrière: dans la couche softmax vous avez sorties et entrées, de sorte qu'une erreur de chaque sortie doit être propagée à chaque entrée, et c'est précisément pourquoi vous avez besoin de tout le jacobien. D’autre part, une fonction de coût est associée à la sortie softmax, par exemple où sont les sorties souhaitées (lorsque vous effectuez une classification, alors l’une d’elles est égale à 1 et autres à 0). Alors en fait, vous vous intéressez à , qui peut être calculé avec une règle de chaîne donnant une expression nette, et est en effet un vecteur (pas une matrice).j C = - Σ j t j log h j , t j ∂ Cj j
la source