Discuss Scratch

SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Juste parce que ça m'a fait marrer :

Je vous présente Guy Carlier deuxième du nom

Last edited by SBissay (July 11, 2017 20:59:53)

SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

2 petites nouveautés :

  1. On ne verra plus de béhémoths comme ci-dessus parce que maintenant l'énergie dépensée pour se déplacer est calculée sur le modèle de l'énergie cinétique (E = 1/2 * m * v²) et donc diminue très vite quand on grossit trop.
  2. On peut appuyer sur la touche “V” pour voir les lignes de vision des créatures : celles-ci sont en jaune-orange si elles ne captent rien, en rouge si elles captent de la nourriture et en noir si elles captent un bord (par contre elles utilisent les données d'avant le déplacement, donc il y a un décalage d'un tick entre le calcul de la ligne et son affichage. C'est pas gênant gênant mais faut le savoir pour ne pas croire que la créature a une vision qui ne correspond pas à la réalité).
Extremguy
Scratcher
100+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

J'ai lu , mais j'ai encore un peu de misere a comprendre. Ca m'interesse vraiment alors je veux chercher a mieux comprendre. Lorsque tu parles des Caché/Hidden c'est quoi exactement leur but ? Est-ce qu'ils servent de “Banque” pour les Sorties? Pourquoi doit on en avoir (Hidden) ? Pourquoi y'a t'il des poids qui ont certains niveau de poids de base (Genre le Poid 1 = 0.2) ? D'ou ce nombre vient ?

Merci pour tes futures réponses. Aussi si tu aurais un article qui pourrait m'éclaire a ce sujet je serais ravis. Merci beaucoup. J'ai vu sur wikipedia , mais j'ai encore un peu de la misere a comprendre le sujet , mais c'est ce qui m'interesse le plus.
SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Heureux de voir que ça t'intéresse !

Je vais tâcher de répondre le mieux possible à tes questions, sinon n'hésite pas à demander des éclaircissements supplémentaires.

  • Concernant le rôle des neurones hidden / cachés :

    Le mieux je pense est de faire un peu d'histoire : en 1957, Frank Rosenblatt inventa le concept de perceptron, qui revient en gros à des neurones d'entrées reliés à des neurones de sortie (avec les fonctions de sommation et d'activation correspondantes). C'était le début des réseaux de neurones artificiels et ça a fait pas mal de bruit chez les chercheurs en intelligence artificielle. Le souci, c'est qu'en 1969 Marvin Minsky et Seymour Papert ont prouvé que les perceptrons ne seraient jamais capable d'apprendre la fonction XOR (OU exclusif (*) ). Ça a mis une sacrée claque aux réseaux de neurones et la recherche a failli s'arrêter là.
    Sauf qu'en 1972, Stephen Grossberg a eu l'idée géniale d'intercaler d'autres neurones entre les entrées (inputs) et les sorties (outputs), et là, miracle, on pouvait approcher beaucoup plus de fonctions, dont notamment XOR (*).

    Avant d'aller plus loin, expliquons de quoi on parle :
    (*) XOR : aussi appelée OU exclusif en français. C'est une fonction logique, qui a deux entrées associe VRAI si UNE SEULE d'entre elles est vraie et FAUX dans tous les autres cas. Dans l'encodage binaire où 0 = FAUX et 1 = VRAI, on a :
    XOR(0, 0) = 0 XOR(1, 0) = 1
    XOR(0, 1) = 1 XOR(1, 1) = 0

    Sans vouloir rentrer trop dans les détails, on va tenter une approche graphique. Voici les représentations dans le plan des fonctions OR, AND et XOR :

    Les droites dans les 2 premiers cas représentent un endroit du plan où couper permet de donner les bons résultats : ce qui est en-dessous est faux, ce qui est au-dessus est vrai. Le cas XOR montre bien qu'une droite (où même une courbe qui ne passerait jamais par deux points d'ordonnées différentes avec une abscisse égale, à savoir la représentation d'une fonction au sens mathématique) ne permet pas de faire ce découpage du plan.
    En effet, les perceptrons (ou réseaux de neurones à simple couche) ne permette pas d'approcher autre chose que ce qui est “découpable” par une courbe dans le plan. Rajouter des neurones cachés, et donc avoir un réseau de neurones à couches multiples, permet de passer outre cette limitation et donc ouvre un bien plus vaste domaine.

    Tout ça pour en venir à cette réponse : l'intérêt des neurones cachés est d'élargir le champ des possibilités des réseaux de neurones.

  • Concernant l'aspect “banque”, j'ai pris le parti de penser que tu voyais ça comme une forme de “mémoire” (n'hésite pas à me le dire si j'ai tout faux, et dans ce cas, si tu précises ta pensée, je pourrais mieux te répondre). Si c'est bien ce que tu voulais dire, alors non, ça n'est pas du tout le cas : leurs valeurs sont recalculées à chaque fois que les entrées changent et ne dépendent pas de l'état précédent.
    Il est par contre possible d'avoir un “effet mémoire” avec ce qu'on appelle des réseaux récurrents : à savoir que certains neurones utilisent en entrée ce qu'une ou plusieurs sorties avait envoyé lors du calcul précédent. J'utilise d'ailleurs ça dans mon modèle actuel : une entrée est spécialement relié à une sortie spécifique et utilise les résultats du tick précédent de cette sortie.

  • Maintenant, concernant les poids : les nombres que j'ai donnés dans mes exemples viennent de ma tête, au hasard, et n'ont aucune valeur. En fait, les valeurs des poids sont la chose la plus importante d'un réseau de neurones : c'est ce qui va lui permettre de faire bien ou mal son travail. Le souci, c'est que trouver ces valeurs de poids est très compliqué et dépend complètement de la tâche que le réseau devra accomplir.
    Il existe en gros 2 méthodes principales pour trouver les poids d'un réseau afin qu'il réalise une tâche donnée :
    1 : la rétropropagation (backpropagation) : il faut connaître des résultats de ce qu'on veut faire faire au réseau. On lui donne alors les entrées correspondantes et on regarde de combien il se trompe par rapport aux résultats attendus. On effectue ensuite une correction des poids en fonction de cette erreur pour qu'à l'avenir il se trompe moins. Puis on recommence, en général quelques milliers de fois. L'algorithme pour corriger les poids est très compliqué à expliquer, donc je te conseille de chercher des exemples illustrés sur le net.
    2 : par algorithme génétique : c'est ce que je fais ici. J'ai défini la structure de mon réseau, mais je n'en connais pas les poids. Donc je fixe des poids au hasard, puis je regarde s'il se comporte bien ou pas. Je fais ça avec un certain nombre d'autres jeux de poids tirés au hasard, puis je choisis les meilleurs jeux pour se “reproduire” et recommencer avec les nouveaux poids que cette reproduction m'aura donnée. C'est tout ce que fait mon projet.

Voilà, je ne sais pas si j'ai été bien clair parce que les questions que tu as posées, très intéressantes au passage, ne sont pas simples à expliquer, donc encore une fois n'hésite pas.
el15617
Scratcher
1000+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

SBissay wrote:

2 petites nouveautés :

  1. On ne verra plus de béhémoths comme ci-dessus parce que maintenant l'énergie dépensée pour se déplacer est calculée sur le modèle de l'énergie cinétique (E = 1/2 * m * v²) et donc diminue très vite quand on grossit trop.
  2. On peut appuyer sur la touche “V” pour voir les lignes de vision des créatures : celles-ci sont en jaune-orange si elles ne captent rien, en rouge si elles captent de la nourriture et en noir si elles captent un bord (par contre elles utilisent les données d'avant le déplacement, donc il y a un décalage d'un tick entre le calcul de la ligne et son affichage. C'est pas gênant gênant mais faut le savoir pour ne pas croire que la créature a une vision qui ne correspond pas à la réalité).
dis dis dis ^^ esque ça pourrait changer leur comportement genre pas mal ? pasque si tu considères que les frottements sont pas trop forts, c'est plus économe pour les bestioles de se déplacer en ligne droite et loin plutôt que de tourner dans tous les sens et perdre leur inertie….
Extremguy
Scratcher
100+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Oui je pensais cela a propos de l'aspect banque , je pensais en effet que ca servait d'une forme de mémoire. Alors si je comprend bien les neurones sont commes des conditions qui servent a renvoyer des valeurs de sorties ?

Aussi ca ne te derangerais pas si j'essayerais de faire un projet un peu similaire au tient ptetre un jour ? Ce n'est pas pour te copier , c'est pour voir si j'ai bien comprit au pire je le partagerais pas.

Last edited by Extremguy (July 13, 2017 01:46:33)

SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

el15617 wrote:

dis dis dis ^^ esque ça pourrait changer leur comportement genre pas mal ? pasque si tu considères que les frottements sont pas trop forts, c'est plus économe pour les bestioles de se déplacer en ligne droite et loin plutôt que de tourner dans tous les sens et perdre leur inertie….

Ça aurait pu si jamais j'avais vraiment implémenté les concepts d'énergie potentielle, cinétique et d'inertie… Et ce serait méga chouette d'ailleurs !

Non, en fait j'ai juste changé la valeur de l'énergie qu'ils dépensent pour bouger, mais il n'y a pas encore de “vraie” physique, ça pourrait venir ceci dit, c'est une chouette idée.

Extremguy wrote:

Oui je pensais cela a propos de l'aspect banque , je pensais en effet que ca servait d'une forme de mémoire. Alors si je comprend bien les neurones sont commes des conditions qui servent a renvoyer des valeurs de sorties ?

Aussi ca ne te derangerais pas si j'essayerais de faire un projet un peu similaire au tient ptetre un jour ? Ce n'est pas pour te copier , c'est pour voir si j'ai bien comprit au pire je le partagerais pas.
Oui, les neurones sont tout à fait ça ! Et leur nombre et leur agencement en couches permet de simuler des comportements complexes
Quant à faire un projet similaire, n'hésite surtout pas ! Au contraire, je serais ravi que mon gros post ait donné envie à quelqu'un de faire pareil.
el15617
Scratcher
1000+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

SBissay wrote:

el15617 wrote:

dis dis dis ^^ esque ça pourrait changer leur comportement genre pas mal ? pasque si tu considères que les frottements sont pas trop forts, c'est plus économe pour les bestioles de se déplacer en ligne droite et loin plutôt que de tourner dans tous les sens et perdre leur inertie….

Ça aurait pu si jamais j'avais vraiment implémenté les concepts d'énergie potentielle, cinétique et d'inertie… Et ce serait méga chouette d'ailleurs !

Non, en fait j'ai juste changé la valeur de l'énergie qu'ils dépensent pour bouger, mais il n'y a pas encore de “vraie” physique, ça pourrait venir ceci dit, c'est une chouette idée.

hâte de voir ça si tu le fais ^^ d'autre part, outre le code qui est impressionnant, ton projet remplace à merveille un aquarium ^^
AristoScratch
Scratcher
86 posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Hello, c'est vraiment bien.

J'avais déjà vu un projet semblable il y a plusieurs années :
https://www.youtube.com/watch?v=xkBHrYS-e00

Et ce que j'aurais vraiment voulu voir c'est le comportement des poissons face à un prédateur, ou plusieurs prédateurs et voir si les prédateurs arrivent à apprendre un comportement de “type meute”. Après on peut juste rajouter la distance au prédateur le plus proche pour ne pas trop compliquer les entrées, à voir …

J'ai beaucoup aimé le projet de Martin Braendli. J'espère avoir un peu de temps pour pouvoir développer ce type de projet un jour, après effectivement, sous Scratch c'est un peu limité …
Extremguy
Scratcher
100+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Je pense je commence a piger le fonctionnement d'un ANN. Je me demandait si ça serait possible de faire une liste d'inputs dynamique tout en conversant des poids adéquat qui font qu'une créature agisse d'une manière semblable à sa façon habituel? (Genre j'ai penser mettre de la bouffe en masse et faire que dans un certains rayons une créature puisse voir la bouffe et s'approcher de la plus proche dépendamment de son calcul ,etc)

Pour l'algorithme génétique , je suis pas trop sur , j'ai fouiller ton code pour l'analyser afin de mieux comprendre. J'ai vu au départ que ton script (pour les gènes) exécutait une boucle 30 fois pour créer des gènes ,et qu'une autre boucle l’exécute 21 fois à l'intérieur. Pourquoi (21) ? Je me suis dit-peut être est-ce un rapport avec le nombre de poids , mais je constate qu'il n'y a que 3 neurones d'entrées ,4 neurones cachés et 2 neurones de sorties. ( 3+4+2 = 9 ) . Alors d'ou vient ce 21 pour ta boucle lors de la création des gènes ?

Merci. PS: Je ne me connais pas trop en génétique ,alors ça s'peut que je pige pas tout
-TSTD-
Scratcher
100+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

J'ai aussi trouvé un projet similaire : https://scratch.mit.edu/projects/127788969/
shirsag
Scratcher
73 posts

Émergence : Réseau de neurones artificiels et algorithme génétique

si <Vous m'expliquer> alors 

Je comprends

sinon
Je ne comprends pas
end
ma15fo43
Scratcher
1000+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

shirsag wrote:

si <Vous m'expliquer> alors 

Je comprends

sinon
Je ne comprends pas
end
Salut @shirsag, ce topic est vieux ! Il ne faut pas le remonter ! Par ailleurs, évite d'utiliser des scratchblocks pour tes posts, c'est du spam ! Merci de lire Les Règles Du Forum. Voilà !
SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Vieux vieux… Merci, hein

Plus sérieusement, désolé pour les réponses tardives, mais j'ai pleinement profité de mes vacances, j'en avais grand besoin.

Pour répondre à extremguy, en effet il y a 30 itérations initiales pour générer les 30 individus, et chaque individu à 21 gènes.

Pourquoi 21 :

Il y a 3 (pas 4) neurones de sorties.Or chacun de ces neurones doit avoir associé à chaque neurone d'entrée, plus un poids pour le bias. Soit 4 poids par neurones, et 4 x 3 = 12. Donc 12 gènes pour coder les neurones cachés.
Il y a 2 (pas 3) neurones de sortie. Pareillement, chacun doit avoir un poids pour chaque neurone caché plus 1 pour le bias, donc 4 poids par neurone, et ainsi 8 gènes (2 x 4).

On arrive à 20. Bon, en théorie 20 gènes devraient suffire, mais il se trouve qu'il y en a 21 car dans une version précédente j'en avais besoin de 21 et que j'ai eu la flemme de tout changer (ça apparaît assez souvent, quand même) alors qu'un seul gène inexprimé ne changeait pas grand chose.
Donc voilà, ta réponse est que ce n'est pas optimisé, par flemme ^^
ma15fo43
Scratcher
1000+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

SBissay wrote:

Vieux vieux… Merci, hein
Vieux par rapport au dernier message surtout pour un spam…
SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Bon, j'avais promis de partager le projet une fois que j'aurais fini, mais je pense que je ne vais pas avoir le temps d'y toucher avant un bon bout de temps, donc en attendant, voici l'état actuel des choses pour ceux qui voudraient y jeter un oeil (attention, c'est plutôt chargé niveau code).

Toutefois, n'essayez pas de le faire tourner directement sous scratch, c'est d'une lenteur abominable (même en turbo), donc le lien sulfurous reste d'actualité pour le voir en action.

S'il y a des questions sur le code (ou autre chose), n'hésitez pas.
Itharius
Scratcher
1000+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

j'ai regardé rapidement tout à l'heure avant de manger sur un peu plus que 15 générations. il y avait + 50% de la population qui dépssait les 250 ticks. Je suis tombé sur un individu qui s'arretait avant le point de nourriture pour se positionner très correctement malheureusement à la génération suivante il n'a pas fait parti des meilleurs et ses gènes d'excellent chasseur ne se sont pas propagés.
Surement qqch de plus affinés au niveau des poids car c'est ce que les générations sur scratch n'arrivait pas à faire lorsqu'elles tournaient en rond autour d'un point nourriture.
Pas eu le temps de reagarder suffisamment de génération pour faire des commentaires plus précis ou noter des généralités de comportement (prorité de survivre au 250 ticks, éviter le bord , tourner dans un sens ou pas etc)
je vais partir en chasse d'un ordi ce week end et j'aurai de nouveau plus le temps la semaine prochaine pour profiter de ton projet
Itharius
Scratcher
1000+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

waouh ! j'ai un nouvel ordi. Après avoir galéré toute la soirée à cause de ma connection pour telecharger le flash player, mozilla et bref le minimum avant de pouvoir réutiliser scratch, j'ai lancer ton projet sur les probabilité de gagner au poker , premier resultat en 0.3 secondes youhou. alors j'ai rebalancé ton projet sur l'algo génétique (juste avant j'ai lancé ton dernier projet mais j'ai pas trop compris ce que c'était et peut-être parce que j'étais encore en train de calculer une main en même temps bref les lignes s'affichaient hyper lentement) ça allait tout doucement et j'ai recliqué le lien sulfurous et LOL. Quand je lançais le projet sous sulfurous (avec mon ancien ordi), ça allait aussi vite que sur scratch avec mon nouvel ordi. Le projet sur sulfurous fuse , et tout ça a plutôt tendance à me rasséréner sur mon achat ^^ je vais reprofiter de nouveau de ce projet. Du coup, je me dit que sulfurous, c'est surement bien mais il faut quand même avoir un ordi qui assure graphiquement pour que ça serve vraiment ^^

oh la vache! le temps d'écrire ce petit post et j'en suis déjà la 20eme génération et plus de 80% de la population qui survit au 250eme ticks !

Bon 30eme génération et je suis très mitigé. le spawn des points nourriture est un vrai problème. Une fois qu'un grosse partie de la population a disparue, on devrait se retrouver avec une véritable élite. hors, on constate clairement que malgré le fait de survivre +1000 ticks, les meilleurs individus ne sont pas d'excellents chasseurs et n'agissent pas avec une véritable intelligence. Le problème est flagrant lorsqu'une sorte de petit désert de point nourriture est devant la bestiole excepté un petit point un peu devant vers la droite (par exemple) mais la bestiole à l'habitude de faire des tours sur la gauche et malgré le fait que le point nourriture est bien dans le champ de vision, que la bestiole sait avancer a peu près droit, elle ne mangera pas ce point nourriture parce que ça la ferait tourner dans le sens qui n'est pas “son” sens.

on pourrait se dire , le hasard pourrait amener une population qui sait décider de tourner dans les deux sens mais je pense qu'alors que ça devrait arriver très souvent (c'est le plus logique , on s'oriente vers la proie la plus facile, la plus proche) à cause du fait des spawn des points nourritures, les créatures peuvent conclure qu'en tournant toujours dans leur sens de prédilection, des points nourriture apparaitront suffisamment sur leur chemin. Si bien que ce qu'on rencontre le plus, ce sont des populations avec des individus qui tourne dans un sens , d'autres individus qui tournent dans l'autre sens, mais pas d'individus qui tourne à gauche si le point nourriture le plus proche dans son champ de vision est à gauche et tourne à droite si le point est à droite.

c'est un casse-tête mais à mon avis , tes bestioles ne sont pas à la hauteur de l'intelligence des neurones que tu leur as crées à cause de la façon dont tu remplis de nourriture leur écosystème ^^

Last edited by Itharius (Sept. 10, 2017 01:17:57)

SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Premièrement, je suis ravi que tu aies un nouvel ordinateur qui te donne entière satisfaction ! Ça laisse augurer plein de nouveaux projets tous plus intéressants les uns que les autres !

Ensuite, concernant tes remarques sur le projet : je suis bien conscient _ et déçu moi aussi _ que la propension d'une population à tourner dan sun sens unique est désagréable. Cependant, plusieurs points sont à considérer :
  1. Comme tu l'as dit, il est possible qu'il y ait trop de nourriture. C'est facile à modifier, je vais tester ça.
  2. 30 générations c'est très peu. En théorie de la spéciation, les vitesses les plus rapides pour des cas de modifications d'espèces se comptent en milliers de générations. Dans le cas général, ce sont des centaines de milliers. Alors certes j'ai fait en sorte que ce soit un peu plus rapide, mais je te conseille d'appuyer sur la touche “F”, ce qui va geler l'affichage mais faire tourner la simulation beaucoup plus vite. Après 100 ou 200 générations, on voit déjà des comportements bien plus évolués. (Rappuyer sur “F” pour voir à nouveau ce qui se passe.)
  3. La population est très petite, et la diversité génétique tend à disparaître assez vite, à cause de la vitesse rapide de convergence voulue (c'était un choix…). Ceci dit, je me demande si intégrer ne serait-ce qu'un individu totalement aléatoire à chaque génération ne pourrait pas contrer un tant soit peu cet effet pervers. A tester.
  4. Les créatures tendent à être moins “bêtes” si leur environnement est compliqué. Rajouter des obstacle aide (un peu). Idéalement, il faudrait que j'intègre un outil de génération de terrain, plutôt que de devoir tout rentrer à la main à chaque fois.
  5. J'en oublie certainement…

Bref, je suis d'accord avec tes remarques, mais ne suis pas sûr que le problème soit un sur-intelligence des créatures. Par contre ça me fait pas mal de choses à tester alors que je voulais éviter de me faire happer de nouveau dans ce projet maintenant que je dois à nouveau me concentrer sur mes études. Argh.
SBissay
Scratcher
500+ posts

Émergence : Réseau de neurones artificiels et algorithme génétique

Premier test concernant la quantité de nourriture : dès qu'on la diminue trop, les créatures se vautrent dans la paresse : le plus rentable est alors de viser les 250 ticks de survie en ne bougeant pas, et ça dure une bonne cinquantaine de générations (je me suis arrêté là, j'en ai eu marre^^). Du coup, à l'heure actuelle c'est la moitié de la population, c'est déjà moins qu'avant mais ça fonctionne toujours.

J'ai aussi intégré l'apparition d'un individu totalement aléatoire à chaque génération : et là, étrangement, génération 100 et je stagne à 500-700 de best fitness. Du coup je ne sais pas si c'est juste un coup de pas de bol ou si ça a un effet négatif sur l'évolution, je vais devoir tester plus avant (mais ça prend un peu de temps).

Edit : au deuxième test, ça a mieux fonctionné, ça m'a même donné des comportements rarement vus auparavant (à savoir maximiser la zone de recherche, quitte à dépenser plus d'énergie). Donc je garde pour le moment.

Last edited by SBissay (Sept. 10, 2017 09:50:07)

Powered by DjangoBB