Actuellement, je travaille sur un projet qui utiliserait des algorithmes génétiques pour optimiser les réseaux de neurones. Je me rends compte que ce n'est probablement pas la meilleure façon de les optimiser, mais je suis nouveau pour les deux, alors je voulais juste essayer de les utiliser.Utilisation d'algorithmes génétiques pour les réseaux de neurones
Mes plans sont les suivants (sujet à changement, beaucoup). Mes neurones d'entrée utiliseraient un ensemble de données qui pourrait avoir à peu près n'importe quel nombre positif (y compris des nombres décimaux jusqu'à deux places, donc ce serait vraiment des nombres à virgule flottante), mais probablement entre 0 et 20000. Parce que l'importance est dans la les nombres se comparent entre eux en valeur plutôt qu'en taille, ils seraient d'abord divisés par le nombre le plus élevé de toutes les valeurs qui seraient entrées. Ils seraient multipliés par des poids (tout flotteur positif ou négatif) avant d'aller à leur couche cachée. Chaque neurone dans la couche cachée ferait la somme de toutes ses entrées jusqu'à ce qu'elles soient calculées. Ils seraient ensuite exécutés par une fonction logistique et être édités.
Mon environnement est Visual Studio C++ 2010 Express et j'utilise le clr.
Mon problème réside dans l'algorithme génétique et son fonctionnement. Ce serait ajuster les poids. Mon problème est que quand il change aléatoirement un peu dans l'un des poids (taux de mutation), il peut rendre les poids extraordinairement élevés ou bas, provoquant un débordement ou une autre erreur lorsqu'il est multiplié par l'entrée et ajouté aux autres. Je ne sais pas non plus comment j'organiserais mes chromosomes. Alors, serait-il préférable d'effectuer la randomisation par poids de sélection plutôt que des bits au hasard et de les changer en un nombre aléatoire dans une fourchette définie? Fondamentalement, je suis à la recherche de suggestions sur la façon d'organiser cela sans causer d'erreurs avec des valeurs trop grandes ou trop petites tout en maintenant les performances.
Merci (et désolé si cela devrait être dans la science informatique théorique, mais je pense qu'il ne rentrait pas là)
Je ne me souviens pas des détails, mais dans ce livre: http://www.amazon.com/Techniques-Programming-Premier-Press-Development/dp/193184108X, l'auteur fait à peu près ce que vous décrivez, c'est-à-dire utilise des valeurs de poids mutées génétiquement pour optimiser un réseau neuronal. –
Il serait intéressant de voir une comparaison des performances entre la solution que vous venez de proposer et un processus plus conventionnel (peut-être même un processus non neuronal). – Predictor