Question

edit:

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é, donc s'il vous plaît soyez patient:)


Je suis actuellement dans le processus de construction d'un réseau de neurones qui tente d'examiner un ensemble de données d'entrée et de sortie de la probabilité / vraisemblance de chaque classification (il y a 5 classifications différentes). Bien entendu, la somme de tous les noeuds de sortie devrait ajouter jusqu'à 1.

Actuellement, j'ai deux couches, et je configurer la couche cachée pour contenir 10 noeuds.

Je suis venu avec deux types différents de mises en œuvre

  1. Logistic sigmoïde pour l'activation de la couche cachée, pour l'activation softmax sortie
  2. Softmax à la fois la couche cachée et la sortie d'activation

J'utilise la descente de gradient pour trouver maxima locaux afin d'ajuster les poids et de les noeuds de sortie de noeuds cachés de poids. Je suis certain que je en ai ce correct pour sigmoïde. Je suis moins sûr avec softmax (ou si je peux utiliser 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 dérivé et obtenu softmax'(x) = softmax(x) - softmax(x)^2 (ce renvoie un vecteur colonne de taille n ). I ont aussi cherché dans la boîte à outils NN MATLAB, le dérivé de softmax fournie par la boîte à outils a renvoyé une matrice carrée de taille nxn, où les diagonales coïncide avec le softmax '(x) que je calculé à la main; et je ne suis pas sûr de savoir comment interpréter la matrice de sortie.

J'ai couru chaque mise en œuvre avec un taux d'apprentissage de 0,001 et 1000 itérations de propagation de retour. Cependant, mon NN retourne 0,2 (une répartition uniforme) pour les cinq noeuds de sortie, pour chaque sous-ensemble de l'ensemble de données d'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 en utilisant des nœuds cachés
  • 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+ maladie

Était-ce utile?

La solution

Le gradient que vous utilisez est en fait la même que l'erreur quadratique: sortie - cible. Cela peut paraître surprenant au premier abord, mais l'astuce est qu'une fonction d'erreur différente est réduite au minimum:

Erreur softmax

(- \sum^N_{n=1}\sum^K_{k=1} t_{kn} log(y_{kn}))

où log est le logarithme naturel, N représente le nombre d'exemples et K le nombre de classes de formation (et donc des unités dans la couche de sortie). t_kn représente le codage binaire (0 ou 1) de la classe k-ième dans l'exemple de la formation nième. y_kn la sortie du réseau correspondant.

Montrer que le gradient est correct pourrait être un bon exercice, je n'ai pas fait moi-même, cependant.

Pour votre problème: vous pouvez vérifier si votre dégradé est correct par différenciation numérique. Disons que vous avez une fonction f et une mise en œuvre de f et f ». Ensuite, ce qui suit devrait tenir:

gradient numérique du softmax

(f'(x) = \frac{f(x - \epsilon) - f(x + \epsilon)}{2\epsilon} + O(\epsilon^2))

Autres conseils

S'il vous plaît regarder sites.google.com/site/gatmkorn pour le programme de simulation Desire open-source. Pour la version Windows, / mydesire / dossier de neurones a plusieurs classificateurs Softmax, certains avec l'algorithme de gradient de descente spécifique à softmax.

Dans les exemples, cela fonctionne bien pour une tâche simplemcharacter reconnaissance.

ASEE aussi

Korn, G.Procédé .: dynamique Système avancé de simulation, Wiley 2007

GAK

regard sur le lien: http://www.youtube.com/watch?v=UOt3M5IuD5s le dérivé softmax est: dyi / dzi = yi * (1,0 - yi);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top