2013-09-04 4 views
1

Je rencontre des problèmes avec l'utilisation du réseau neuronal. J'utilise une fonction d'activation non linéaire pour la couche cachée et une fonction linéaire pour la couche de sortie. Ajouter plus de neurones dans la couche cachée aurait dû augmenter la capacité du NN et l'adapter aux données d'entraînement plus/avoir moins d'erreur sur les données d'entraînement.Problèmes avec le réseau neuronal

Cependant, je vois un phénomène différent. L'ajout de plus de neurones diminue la précision du réseau neuronal même sur l'ensemble d'entraînement. enter image description here

Voici le graphique de l'erreur absolue moyenne avec un nombre croissant de neurones. La précision sur les données d'entraînement est en baisse. Quelle pourrait être la cause de cela? Est-ce que le nntool que j'utilise de matlab divise les données aléatoirement en formation, test et validation pour vérifier la généralisation au lieu d'utiliser la validation croisée.

De même, j'ai pu voir beaucoup de valeurs de sortie -ve ajoutant des neurones alors que mes cibles sont censées être positives. Serait-ce un autre problème?

Je ne suis pas en mesure d'expliquer le comportement de NN ici. Aucune suggestion? Voici le lien vers mes données comprenant des covariables et des cibles

https://www.dropbox.com/s/0wcj2y6x6jd2vzm/data.mat

+0

Tout d'abord, est l'erreur dans la gamme de 10^7 habituel? N'est-ce pas trop haut? Cela peut indiquer que votre réseau de neurones ne s'entraîne pas du tout. Avez-vous vu l'évolution de l'entraînement de votre réseau de neurones pour voir si c'est vraiment une formation? – Werner

+0

@Werner. L'échelle d'erreur est bonne, elle est censée être dans cette plage car mes sorties sont des valeurs très élevées. Il est donc normal de voir l'erreur dans cette plage – user34790

+1

Utilisez-vous la normalisation 'mapminmax' par défaut? Matlab applique la normalisation par défaut, et (je peux me tromper) l'échelle d'erreur est également normalisée. Si vous avez des sorties très élevées et ne vous normalisez pas, vos fonctions d'activation non linéaires satureront (si vous en utilisez) ce qui expliquerait ce comportement inattendu (l'ajout de neurones plus saturés saturerait encore plus la sortie). N'oubliez pas de vérifier votre évolution d'erreur pendant la phase de formation pour voir si vos réseaux s'entraînent vraiment. – Werner

Répondre

0

Je ne connais pas nntool mais je suppose que votre problème est lié à la sélection de votre poids initial. Une mauvaise sélection initiale du poids peut conduire à une convergence très lente ou à une absence totale de convergence. Par exemple, notez que lorsque le nombre de neurones dans la couche cachée augmente, le nombre d'entrées de chaque neurone dans la couche visible augmente également (un pour chaque unité cachée). Dites que vous utilisez un logit dans votre couche cachée (toujours positif) et choisissez vos poids initiaux de la distribution uniforme aléatoire entre un intervalle fixe. Puis, à mesure que le nombre d'unités cachées augmente, les entrées de chaque neurone dans la couche visible augmentent également, car il y a plus de connexions entrantes. Avec un très grand nombre d'unités cachées, votre solution initiale peut devenir très grande et entraîner une faible convergence.

Bien sûr, le comportement de tout cela dépend de vos fonctions d'activation et de la distribution des données et de leur normalisation. Je vous recommande de consulter Efficient Backprop de Yann LeCun pour d'excellents conseils sur la normalisation de vos données et la sélection des poids initiaux et des fonctions d'activation.