Je suis en train de faire un simple apprentissage de la simulation, où il y a plusieurs organismes à l'écran. Ils sont censés apprendre à manger, à l'aide de simples réseaux de neurones. Ils ont 4 neurones, chaque neurone s'active mouvement dans une direction (c'est un plan en 2D vu de l'oiseau du point de vue, donc, il y a seulement quatre directions, ainsi, les quatre sorties sont nécessaires). Leur seule entrée sont des "quatre yeux". Un seul œil peut être active à la fois, et il sert essentiellement comme un pointeur vers l'objet le plus proche (soit une nourriture verte bloc, ou un autre organisme).
Ainsi, le réseau peut être imaginé comme ceci:
Et un organisme ressemble à ceci (à la fois dans la théorie et le réel de la simulation, où ils sont vraiment blocs rouges avec leurs yeux autour d'eux):
Et ce est la façon dont il semble tout à fait (c'est une ancienne version, où les yeux ne fonctionne toujours pas, mais c'est pareil):
Maintenant que j'ai décrit mon idée générale, permettez-moi d'aller au cœur du problème...
Initialisation| Tout d'abord, je créer des organismes et de la nourriture. Ensuite, tous les 16 poids dans leurs réseaux de neurones sont fixés à des valeurs aléatoires, comme ceci: poids = random.random()*seuil*2. Le seuil est une valeur globale qui décrit comment chaque neurone doit obtenir dans le but d'activer ("feu"). Elle est généralement fixée à 1.
Apprentissage| Par défaut, le poids dans les réseaux de neurones sont abaissés de 1% à chaque étape. Mais, si certains organisme gère réellement quelque chose à manger, la connexion entre le dernier active d'entrée et de sortie est renforcé.
Mais, il y a un gros problème. Je pense que ce n'est pas une bonne approche, car ils n'ont pas appris quelque chose! Seuls ceux qui ont eu leur poids initiaux définie de façon aléatoire pour être bénéfique aurez la chance de manger quelque chose, et ensuite seulement d'entre eux ont leurs poids renforcé! Que dire de ceux qui ont configuré une connexion de mal? Ils vont mourir, de ne pas apprendre.
Comment puis-je éviter cela? La seule solution qui vient à l'esprit est au hasard d'augmenter/diminuer le poids, de sorte que finalement, quelqu'un aura la bonne configuration, et de manger quelque chose par hasard. Mais je trouve cette solution très brut et le truand. Avez-vous des idées?
EDIT: Merci pour vos réponses! Chacun d'entre eux a été très utile, certains étaient tout simplement plus pertinentes. J'ai décidé d'utiliser l'approche suivante:
- Mis tout le poids de nombres aléatoires.
- Diminution du poids au fil du temps.
- Parfois, au hasard d'augmentation ou de diminution de poids. La plus réussie de l'unité est, le moins c'est le poids va se changer. NOUVEAU
- Lorsqu'un organisme mange quelque chose, augmenter le poids entre les entrées et les sorties.