modifier:Neural Network avec l'activation softmax
Une question plus pointue: Quel est le dérivé de softmax à utiliser dans ma descente de gradient?
Ceci est plus ou moins un projet de recherche pour un cours, et ma compréhension de NN est très/assez limité, s'il vous plaît soyez patient :)
Je suis actuellement en train de construire un réseau de neurones qui tente d'examiner un ensemble de données en entrée et de produire la probabilité/probabilité de chaque classification (il existe 5 classifications différentes). Naturellement, la somme de tous les nœuds de sortie doit ajouter jusqu'à 1.
Actuellement, j'ai deux couches, et j'ai mis la couche cachée pour contenir 10 nœuds.
je suis venu avec deux types d'implémentations différentes
- sigmoïde logistique pour l'activation de la couche cachée, softmax pour l'activation de sortie
- Softmax pour les couche cachée et activation sortie
J'utilise descente en gradient pour trouver les maximums locaux afin d'ajuster les poids des nœuds cachés et les poids des nœuds de sortie. Je suis certain que j'ai ceci correct pour sigmoïde. Je suis moins certain avec softmax (ou si je peux utiliser la descente de gradient du tout), après un peu de recherche, je ne pouvais pas trouver la réponse et a décidé de calculer moi-même la dérivée softmax'(x) = softmax(x) - softmax(x)^2
(ceci renvoie un vecteur colonne de taille n). J'ai aussi regardé dans la boîte à outils MATLAB NN, la dérivée de softmax fournie par la boîte à outils a retourné une matrice carrée de taille nxn, où la diagonale coïncide avec la softmax '(x) que j'ai calculée manuellement; et je ne suis pas sûr de savoir comment interpréter la matrice de sortie.
J'ai exécuté chaque implémentation avec un taux d'apprentissage de 0,001 et 1000 itérations de rétropropagation. Cependant, mon NN renvoie 0.2 (une distribution paire) pour les cinq noeuds de sortie, pour tout sous-ensemble de l'ensemble de données en entrée.
Mes conclusions:
- Je suis assez certain que mon gradient de descente se fait mal, mais je ne sais pas comment résoudre ce problème.
- Peut-être que je ne suis pas assez nœuds cachés utiliserai
- Peut-être que je devrais augmenter le nombre de couches
Toute aide serait grandement appréciée!
L'ensemble de données Je travaille avec peut être trouvé ici (Cleveland traité): http://archive.ics.uci.edu/ml/datasets/Heart+Disease
J'ai ajouté une question plus pointue au début de mon article. J'ai essayé de demander de l'aide à mon professeur, mais je n'ai pas eu de ses nouvelles. C'est définitivement au-delà de la portée du cours. – Cambium
Il s'avère, il y avait une erreur stupide dans mon code, mais j'étais trop concentré sur penser que mon dérivé softmax était faux. Arg! – Cambium