Réseau de neurones avec softmax activation
edit:
Un plus pointue question:
Quelle est la dérivée de la fonction softmax à être utilisé dans ma descente de gradient?
C'est plus ou moins un projet de recherche pour un cours, et ma compréhension de la lettre est très/assez limité, de sorte s'il vous plaît être patient 🙂
Je suis actuellement dans le processus de construction d'un réseau de neurones qui tente d'examiner un jeu de données d'entrée et de sortie de la probabilité de chaque classement (il y a 5 catégories différentes). Naturellement, la somme de tous les nœuds de sortie doit être égale à 1.
Actuellement, j'ai deux couches, et j'ai mis la couche cachée pour contenir 10 nœuds.
Je suis venu avec deux différents types de mises en œuvre
- Sigmoide pour la couche cachée d'activation, softmax pour l'activation de la sortie
- Softmax pour les deux couche cachée et l'activation de la sortie
Je suis à l'aide de descente de gradient pour trouver des maxima locaux afin d'adapter les nœuds cachés les poids et les nœuds de sortie poids. Je suis certain que j'ai ce correct pour sigmoïde. Je suis moins certain avec softmax (ou si je peux utiliser la descente de gradient à tous), après un peu de recherche, je ne pouvais pas trouver la réponse et a décidé de calculer la dérivée de moi-même et obtenu softmax'(x) = softmax(x) - softmax(x)^2
(ce qui renvoie un vecteur colonne de taille n). J'ai aussi regardé dans le MATLAB NN toolkit, la dérivée de la fonction softmax fournis par la boîte à outils retourné une matrice carrée de taille nxn, où la diagonale coïncide avec la softmax'(x) que j'ai calculé à la main; et je ne suis pas sûr de savoir comment interpréter la matrice de sortie.
J'ai couru à la mise en œuvre de l'apprentissage taux de 0,001 et 1000 itérations de retour de propagation. Cependant, mon NN renvoie à 0,2 (une même distribution) pour l'ensemble des cinq nœuds de sortie, pour tout sous-ensemble du jeu de données en entrée.
Mes conclusions:
- Je suis assez certain que ma pente de descente est mal fait, mais je n'ai aucune idée de comment résoudre ce problème.
- Peut-être que je ne suis pas en utilisant suffisamment de nœuds cachés
- Peut-être que je devrais augmenter le nombre de couches
Toute aide serait grandement appréciée!
Le dataset, je travaille avec peut être trouvé ici (traité de Cleveland):
http://archive.ics.uci.edu/ml/datasets/Heart+Maladie
- J'ai ajouté un plus pointue question en haut de mon post. J'ai essayé de demander à mon professeur de l'aide, mais je n'ai pas eu de nouvelles de lui. C'est certainement au-delà de la portée du cours.
- S'avère, il y avait une erreur stupide dans mon code, mais j'étais trop concentré sur la pensée de mon softmax dérivés a été mauvais. Arg!
Vous devez vous connecter pour publier un commentaire.
Le dégradé que vous utilisez est en fait le même que l'erreur quadratique: sortie de la cible. Cela peut sembler surprenant au premier abord, mais le truc, c'est que la fonction d'erreur est réduite au minimum:
où log est le logarithme naturel, N représente le nombre d'exemples de formation et K le nombre de classes (et donc des unités dans la couche de sortie). t_kn représente le codage binaire (0 ou 1) de la k-ième classe dans le n-ième exemple d'apprentissage. y_kn le réseau correspondant de sortie.
Montrer que le gradient est correcte pourrait être un bon exercice, je ne l'ai pas fait moi-même.
À votre problème: Vous pouvez vérifier si votre dégradé est correct par ordre numérique de la différenciation. Disons que vous avez une fonction f et une application de f et f'. Les opérations suivantes doivent tenir:
veuillez jeter un oeil à sites.google.com/site/gatmkorn pour l'open-source Désir programme de simulation.
Pour la version Windows, /mydesire/neuronaux dossier a plusieurs softmax classificateurs, certains avec softmax spécifiques gradient algorithme de descente.
Dans les exemples, cela fonctionne bien pour un simplemcharacter-tâche de reconnaissance.
Avoient aussi
Korn, G. A.: Avancé dynamique-système de Simulation, Wiley 2007
GAK
de consulter le lien:
http://www.youtube.com/watch?v=UOt3M5IuD5s
le softmax dérivé est: dyi/dzi= yi * (1.0 - yi);