Question

Un algorithme génétique est-il le moyen le plus efficace d’optimiser le nombre de nœuds cachés et le nombre d’entraînements effectués sur un réseau de neurones artificiels?

Je code des réseaux de neurones en utilisant la boîte de dialogue NNToolbox dans Matlab. Je suis ouvert à toute autre suggestion concernant les techniques d'optimisation, mais je connais surtout bien les GA.

Était-ce utile?

La solution

En fait, il y a plusieurs choses que vous pouvez optimiser avec GA en ce qui concerne NN. Vous pouvez optimiser la structure (nombre de nœuds, couches, fonction d'activation, etc.). Vous pouvez également vous entraîner en utilisant l’AG, c’est-à-dire régler les poids.

Les algorithmes génétiques ne seront jamais les plus efficaces, mais ils sont généralement utilisés lorsque vous avez peu d’indices sur les nombres à utiliser.

Pour la formation, vous pouvez utiliser d'autres algorithmes, notamment la rétropropagation, nelder-mead , etc. .

Vous avez dit que vous vouliez optimiser le nombre de nœuds cachés. Pour cela, un algorithme génétique peut être suffisant, bien que loin d’être "optimal". L’espace que vous recherchez est probablement trop petit pour utiliser des algorithmes génétiques, mais ils peuvent toujours fonctionner, mais ils sont déjà implémentés dans matlab, donc pas de problème.

Qu'entendez-vous par optimisation de la durée de la formation? Si vous voulez dire nombre d'époques, alors c'est bien, rappelez-vous que l'entraînement dépend en quelque sorte des poids de départ et qu'ils sont généralement aléatoires, de sorte que la fonction de mise en forme utilisée pour l'AG ne sera pas vraiment une fonction.

Autres conseils

L’architecture NEAT (Neuro-Evolution of Augmenting Topologies) est un bon exemple de réseaux de neurones et de programmation génétique. C'est un algorithme génétique qui trouve une topologie optimale. Il est également reconnu pour sa capacité à limiter le nombre de nœuds cachés.

Ils ont également créé un jeu en utilisant ceci appelé Nero. Des résultats tout à fait uniques et très étonnants.

Dr. Page d'accueil de Stanley:

http://www.cs.ucf.edu/~kstanley/

Vous trouverez ici à peu près tout ce qui touche NEAT, car c'est lui qui l'a inventé.

Les algorithmes génétiques peuvent être utilement appliqués à l’optimisation des réseaux de neurones, mais vous devez réfléchir un peu à ce que vous voulez faire.

Most " classic " Les algorithmes d’entraînement NN, tels que la rétro-propagation, optimisent uniquement le poids des neurones. Les algorithmes génétiques peuvent optimiser les poids, mais ce sera généralement inefficace. Cependant, comme vous le demandiez, ils peuvent optimiser la topologie du réseau ainsi que les paramètres de votre algorithme de formation. Vous devrez être particulièrement prudent avec la création de réseaux "surchargés". bien que.

Une autre technique utilisant des algorithmes génétiques modifiés peut être utile pour résoudre un problème de rétro-propagation. La propagation arrière trouve généralement des minima locaux, mais elle les trouve avec précision et rapidité. La combinaison d'un algorithme génétique avec la propagation arrière, par exemple dans une AG lamarckienne, offre les avantages des deux. Cette technique est brièvement décrite dans le didacticiel GAUL

.

Il est parfois utile d’utiliser un algorithme génétique pour former un réseau de neurones lorsque la fonction de votre objectif n’est pas continue.

Je ne sais pas si vous devriez utiliser un algorithme génétique pour cela.

Je suppose que la population de solution initiale de votre algorithme génétique serait constituée d’ensembles d’entraînement pour votre réseau de neurones (à partir d’une méthode d’entraînement spécifique). La population de solutions initiale consiste généralement en des solutions aléatoires à votre problème. Cependant, des ensembles d’entraînement aléatoires ne formeraient pas vraiment votre réseau de neurones.

L’algorithme d’évaluation de votre algorithme génétique serait une moyenne pondérée de la quantité d’entraînement nécessaire, de la qualité du réseau de neurones utilisé pour résoudre un problème spécifique et du nombre de nœuds cachés.

Ainsi, si vous exécutez cette opération, vous obtiendrez l’ensemble d’entraînements offrant le meilleur résultat en termes de qualité du réseau neuronal (= durée d’entraînement, nombre de nœuds cachés, capacités de résolution des problèmes du réseau).

Ou envisagez-vous une approche totalement différente?

Je ne suis pas tout à fait sûr du type de problème sur lequel vous travaillez, mais GA semble un peu exagéré ici. En fonction de la gamme de paramètres que vous utilisez, une recherche exhaustive (ou inintelligente) peut fonctionner. Essayez de tracer les performances de votre NN en ce qui concerne le nombre de nœuds cachés pour quelques premières valeurs, en commençant petit et en sautant par incréments de plus en plus grands. D'après mon expérience, de nombreux NN atteignent des performances étonnamment précoces; vous pourrez peut-être avoir une bonne idée de la plage de nombres de nœuds cachés qui a le plus de sens.

Il en va souvent de même pour les itérations d’entraînement des NN. Davantage de formation aide les réseaux jusqu’à un certain point, mais cesse rapidement d’avoir beaucoup d’effet.

Dans la majorité des cas, ces paramètres NN n’affectent pas les performances de manière très complexe. En règle générale, leur augmentation augmente les performances pendant un certain temps, puis les rendements décroissants entrent en jeu. GA n'est pas vraiment nécessaire pour trouver une bonne valeur sur ce type de courbe simple; si le nombre de nœuds cachés (ou d'itérations de formation) provoque réellement une fluctuation compliquée des performances, les métaheuristiques telles que GA peuvent être aptes. Mais essayez l’approche par la force brute avant de prendre cette voie.

J'aurais tendance à dire que les algorithmes génétiques sont une bonne idée car vous pouvez commencer avec une solution minimale et augmenter le nombre de neurones. Il est très probable que la "fonction qualité" pour lequel vous voulez trouver le point optimal est lisse et n'a que quelques bosses.

Si vous devez souvent trouver ce NN optimal, je vous recommanderais d'utiliser des algorithmes d'optimisation et, dans votre cas, quasi newton, comme décrit dans les recettes numériques, ce qui est optimal pour les problèmes où la fonction est coûteuse à évaluer.

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