Aller au contenu


Photo
- - - - -

A propos de l'algo générique d'apprentissage


  • Veuillez vous connecter pour répondre
8 réponses à ce sujet

#1 Artiom

Artiom

    Membre

  • Membres
  • 12 messages

Posté 05 mars 2012 - 02:35

Bonjour a tous,

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?
Visitez mon blog: artiom-fedorov.blogspot.fr

#2 Artiom

Artiom

    Membre

  • Membres
  • 12 messages

Posté 14 mars 2012 - 12:04

Bonjour a vous tous, je suis revenu voir mon sujet, et c'est etrange sur ce sujet en particulier le compteur de visites semble ne pas tourner... Es ce qu'il est dans un status particulier?
Visitez mon blog: artiom-fedorov.blogspot.fr

#3 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 14 mars 2012 - 12:13

Et pourtant je suis allé le voir ton sujet

#4 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

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.


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

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.



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 Artiom

Artiom

    Membre

  • Membres
  • 12 messages

Posté 22 mars 2012 - 04:36

Ah la la!!! Pationnant tout ca!

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?
Visitez mon blog: artiom-fedorov.blogspot.fr

#6 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 22 mars 2012 - 08:01

Non, un perceptron multicouche avec une couche d'entrée, trois couches cachés et une couche de sortie.
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 :rolleyes:
  • plus on apprend vite et moins on est con :D
  • plus on est con et moins on est con :blink: :blink:
Je ne vois pas l'erreur dans mon raisonnement XD

Mon site internet : http://ferdinandpiette.com/


#7 Artiom

Artiom

    Membre

  • Membres
  • 12 messages

Posté 22 mars 2012 - 08:14

Ah excellent!!!

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:
Image IPB

Image IPB
Visitez mon blog: artiom-fedorov.blogspot.fr

#8 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 23 mars 2012 - 01:06

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à...)

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 ^^) !



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 Artiom

Artiom

    Membre

  • Membres
  • 12 messages

Posté 23 mars 2012 - 10:15

En fait quand je parlais de perceptron monocouche c'etait pour expliquer le fait que je n'utilise pas de couches cachés. Mais effectivement il y aura 8 sorties pour 4 à 8 entrés (frontalSensor). C'est a dire deux mots de 4bits ce qui va me permettre de coder 16 états pour chaqu'un de mes 2 moteurs (gauche et droite). Peut on alors parler de multicouches...?
Visitez mon blog: artiom-fedorov.blogspot.fr




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users