2010-04-21 13 views
2

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

  1. sigmoïde logistique pour l'activation de la couche cachée, softmax pour l'activation de sortie
  2. 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

+0

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

+0

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

Répondre

5

Le dégradé 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:

softmax error

(- \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 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 classe k'th dans le nième exemple d'apprentissage. y_kn la sortie réseau correspondante. Montrer que le dégradé est correct pourrait être un bon exercice, je ne l'ai pas fait moi-même, cependant.

A votre problème: Vous pouvez vérifier si votre dégradé est correct par différenciation numérique. Supposons que vous ayez une fonction f et une implémentation de f et f '. Ensuite, ce qui suit devrait contenir:

numerical gradient of the softmax

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

Mis à jour avec les images téléchargées sur stackoverflow;) –

0

s'il vous plaît consulter sites.google.com/site/gatmkorn pour le programme de simulation Desire open-source. Pour la version Windows, le dossier/mydesire/neural possède plusieurs classificateurs softmax, certains avec un algorithme de descente de gradient spécifique à softmax.

Dans les exemples, cela fonctionne bien pour une tâche de reconnaissance de caractères simplifiée.

ASEE aussi

Korn, GA: système dynamique avancée Simulation, Wiley 2007

GAK