
A propos de l'algo générique d'apprentissage
#1
Posté 05 mars 2012 - 02:35
J'ai parcouru le tuto sur les réseaux de neurones et apprentissage génétique et j'ai quelques questions sur la partie génétique de l'algo.
Il est dit qu'il faut concerver un poids aléatoirement lors de la premiere génération puis deux pour la deuxieme etc etc. Es ce que le premier poids retenu aléatoirement doit etre obligatoirement conservé dans la deuxieme generation? ou es ce que ce sont une fois de plus deux poids aléatoires qu'on prends?
J'ai du mal a visualiser en quoi en concervant un poid AU HASARD on se rapproche du jet idéal...
un autre cas qui me pose un peu problème c'est comment indiquer au réseau que les moteurs doivent tourner (dans le meme sens) pour que le jeu de tests puissent commencer. En effet le robot peut tres bien trouver qu'en arrettant les deux moteurs aucune collision n'a lieu et donc déterminer ce jet comme etant le plus fiable, ou alors en le faisant tourner sur lui meme : M1 = -1; M2 = 1 || M1 = 1; M2 = -1
Qu'en pensez vous?
#2
Posté 14 mars 2012 - 12:04
#3
Posté 14 mars 2012 - 12:13
#4
Posté 14 mars 2012 - 12:28
Il est dit qu'il faut concerver un poids aléatoirement lors de la premiere génération puis deux pour la deuxieme etc etc. Es ce que le premier poids retenu aléatoirement doit etre obligatoirement conservé dans la deuxieme generation? ou es ce que ce sont une fois de plus deux poids aléatoires qu'on prends?
Salut ! Je n'ai pas lu le tuto, mais je pense qu'il faut tout remettre à plat à chaque génération : il ne faut pas conserver les poids modifiés de la générations précédentes, mais refaire un tirage aléatoire pour savoir quel poids modifier.
J'ai du mal a visualiser en quoi en concervant un poid AU HASARD on se rapproche du jet idéal...
Ce n'est pas compliqué : tu as une population. Tu prend les meilleurs individus. Tu les dupliques et tu fais des modifications aléatoire sur certain d'entre eux. Tu réévalues la nouvelle population. Si des améliorations apparaissent, tu prends ces nouveaux individus "amélioré" comme base pour la futur génération. Sinon, tu recommences avec les individus précédents. Comme ça, tu fais converger petit à petit la population vers une solution intéressement.
Et bien, pour éviter que le robot reste immobile, tu peux par exemple changer ton critère d'évaluation : les meilleurs individus ne sont pas ceux qui ont eu le moins de collision, mais ceux donc le ration nombre de collision sur distance parcouru est le plus faible.un autre cas qui me pose un peu problème c'est comment indiquer au réseau que les moteurs doivent tourner (dans le meme sens) pour que le jeu de tests puissent commencer. En effet le robot peut tres bien trouver qu'en arrettant les deux moteurs aucune collision n'a lieu et donc déterminer ce jet comme etant le plus fiable, ou alors en le faisant tourner sur lui meme : M1 = -1; M2 = 1 || M1 = 1; M2 = -1
J'ai fais un programme similaire à base de réseau de neurone évoluant grâce à une algo G.
J'ai mis une vidéo sur youtube
http://youtu.be/xkBHrYS-e00
Le soucis majeur de cette approche, c'est que l'on ne peut pas vraiment faire de croisement entre individu. En effet, croiser deux réseau de neurones n'apporterais pas grand chose (le résultat n'est pas prévisible et peut complétement diverger...). Du coup, au final, ce n'est pas vraiment un algo G. mais un simple algo d'optimisation : faire la simulation avec tous les individus en même temps ou un individu à la fois revient dans ce cas au même ... :/
Si tu veux un process qui à l'air assez performant pour faire évoluer un réseau de neurones (poids et structure) à l'aide d'un algo G, regarde du côté de la méthode NEAT !
http://www.cs.ucf.edu/~kstanley/neat.html
++
Black Templar
Mon site internet : http://ferdinandpiette.com/
#5
Posté 22 mars 2012 - 04:36
Je t'avou que la vidéo de tes poissons m'a grandement inspiré =)
Merci pour toutes ces docs =) C'est beaucoup beaucoup plus clair maintenant.
Par contre je trouve que le tuto fourni sur ce site concernant l'algo génétique d'apprentissage est trop simpliste (voir innéxacte)
sinon tes petits poissons c'est des perceptrons monocouches?
#6
Posté 22 mars 2012 - 08:01
Par contre, j'ai refait l'expérience avec une seule couche caché et moins de neurones et les résultats convergent beaucoup plus rapidement (en 20 générations, on a quasiment la solution optimales).
Vu que c'est un problème simple, ça ne sert à rien de mettre plein de neurones !
Moralité :
- plus on est con et plus on apprend vite
- plus on apprend vite et moins on est con
- plus on est con et moins on est con
Mon site internet : http://ferdinandpiette.com/
#7
Posté 22 mars 2012 - 08:14
Aurais tu a tout hassard de la doc sur les multicouches?
Ou un exeple simple a comprendre de réseau multicouches...
En effet le monocouche est simple a comprendre et a implementer, cependant le multi couche il y a pas mal de notions qui m'échappent. Dont la rétropropagation du gradient... (aucune idée pour le moment comment implementer ce truc là...)
Je suis actuellement sur le dev d'un environnement qui ressemble beaucoup a tes petits poissons =), mais par contre je comptais utiliser un perceptron monocouche. Qu'es ce que t'en penses?
voici quelques screenshots de mes avancements:


#8
Posté 23 mars 2012 - 01:06
La rétropropagation du gradient sert à faire converger tes poids synaptiques vers un optimum. Dans ton cas, tu n'en as pas besoin car tu utilises déjà un algo génétique qui va te faire converger vers cet optimum (ou un autre ^^) !cependant le multi couche il y a pas mal de notions qui m'échappent. Dont la rétropropagation du gradient... (aucune idée pour le moment comment implementer ce truc là...)
Je suis actuellement sur le dev d'un environnement qui ressemble beaucoup a tes petits poissons =), mais par contre je comptais utiliser un perceptron monocouche. Qu'es ce que t'en penses?
Le problème du perceptron monocouche, c'est qu'il n'y a qu'une seule sortie... ça dépend donc de la façon dont tu as modélisé tout ça, mais selon moi, tu dois avoir au minimum 2 sorties (vitesse gauche et vitesse droite par exemple), donc tu es obligé d'utiliser un perceptron multicouche.
Au plus simple, tu peux avoir une couche d'entrée et une couche de sortie.
Fondamentalement, ça ne change rien au concept.
Aurais tu a tout hassard de la doc sur les multicouches?
Ou un exeple simple a comprendre de réseau multicouches...
J'avais un livre fort sympathique, je l'ai prêté à je ne sais plus qui et on ne me l'a jamais rendu ...
http://alp.developpez.com/tutoriels/intelligence-artificielle/reseaux-de-neurones/
Mon site internet : http://ferdinandpiette.com/
#9
Posté 23 mars 2012 - 10:15
1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users