Essayons de récapituler ce que j'ai lu jusqu'à présent sur internet.
Je pense avoir compris la base des réseaux génétiques. On créé une population au hasard, on tire 2 individus, dans 70% des cas environ ils se reproduisent pour donner naissance à deux autres individus, qui 1 fois sur 1000 subissent des mutations génétiques. Ces deux individus sont ensuite réintégrés dans la population initiale (parcontre les deux parents ne le sont pas forcément, d'après ce que j'ai lu, ca doit dépendre des philosophies...) ou bien commence à peupler une nouvelle population, et on boucle autant de fois qu'on peut tirer d'individu dans la population. Ensuite soit on ajoute la nouvelle population à l'ancienne, soit elle la remplace completement (vous conseillez quoi, vous ? car j'avoue que c'est pas très clair tout ça, chacun y va de sa sauce)
De même il faut parfois rajouter des individus au hasard en fin de cycle pour ne pas faire tirer l'algo vers les maximums locaux, à savoir plein d'individus tip-top au niveau de leur fitness score, mais malheureusement serait incapable de résoudre le problème pour autant.
Le choix des deux individus reproducteurs peut varier d'un algo à l'autre. Certains trient leur population et prennent les deux meilleurs à chaque fois, d'autres en prennent deux au hasard, d'autres prennent le meilleur et le font s'accoupler avec tous les autres, mais globalement la technique de la roulette est utilisée, à savoir qu'on tire bien au sort les individus, mais avec tout de même plus de chance de tirer un bon qu'un mauvais.
Ensuite les réseaux neuronaux.
Là je trouve les explications que j'ai trouvé sur internet beaucoup plus élitistes !
En gros, un neurone est une fonction qui attend n entrées. Pour chacune de ces entrée est appliquée un coefficient multiplicateur (ou poids), et quand le neurone fait la somme de toutes ses entrées*poids, il lance sa fonction d'activation. C'est le résultat de cette dernière qui dira si le neurone est actif ou non, sachant que pour un neurone basique, la fonction d'activation est simple : si la somme de mes entrées*poids >0 elle retourne 1, sinon elle retourne 0
On peut être moins binaire en utilisant une fonction sigmoïde, nom barbare signifiante que la représentation graphique de cette fonction ressemble à un S, et qu'en gros selon la somme des entrées*poids, ce qui sort de la fonction d'activation sera proportionnellement proche de -1 ou 1 (par exemple 0.3 ou -0.3)
On peut calibrer les poids à la main pour forcer le résultat attendu en sortie de neurone selon certaines entrées, c'est ce qu'on appelle l'apprentissage supervisé.
On peut également laisser les neurones trouver le poids idéal en leur fournissant un jeu d'essai conséquent comprenant une série de valeur d'entrées et la valeur de sortie attendue.
Ca peut être fait simplement pour deux entrées et deux poids, par rééquilibrage progressif, mais pour plein de neurones avec pleins d'entrées, ca devient long et fastidieux.
Les algorithmes génétiques entrent donc en jeu et permettent de calculer grossomerdo un ensemble de poids que le neurone devra utiliser pour répondre à peu près correctement aux entrées qu'on lui fourni.
Pour se faire, il devra à chaque nouvelle entrée dans les neurones qu'on lui fournit en jeu de test regarder le résultat attendu, tenir compte des autres poids qu'il avait déjà et qui lui permettait de répondre juste, pour élaborer un nouvel ensemble de poids qui répondrait juste à la fois aux anciennes demandes, mais également à cette nouvelle.
L'avantage de l'algorithme génétique, c'est qu'on peut être "tolérant" et lui dire par exemple, si tu t'approche de la solution à 90% ça nous va ! (le réseau donnera donc la bonne réponse 9 fois sur 10)
(ça je suis vraiment pas sûr) Donc si on veut reprendre notre algo génétique de base, l'individu aura de plus en plus de gène au fur et à mesure qu'on l'entrainera, et l'algo moulinera de plus en plus pour trouver un ensemble de poids corrects.
Bon, maintenant c'est l'heure des corrections, n'hésitez pas à me dire ce que je n'ai pas compris :)
# Bien
Posté par cho7 (site web personnel) . En réponse au journal Des ordinateurs qui pensent.... Évalué à 2.
Je pense avoir compris la base des réseaux génétiques. On créé une population au hasard, on tire 2 individus, dans 70% des cas environ ils se reproduisent pour donner naissance à deux autres individus, qui 1 fois sur 1000 subissent des mutations génétiques. Ces deux individus sont ensuite réintégrés dans la population initiale (parcontre les deux parents ne le sont pas forcément, d'après ce que j'ai lu, ca doit dépendre des philosophies...) ou bien commence à peupler une nouvelle population, et on boucle autant de fois qu'on peut tirer d'individu dans la population. Ensuite soit on ajoute la nouvelle population à l'ancienne, soit elle la remplace completement (vous conseillez quoi, vous ? car j'avoue que c'est pas très clair tout ça, chacun y va de sa sauce)
De même il faut parfois rajouter des individus au hasard en fin de cycle pour ne pas faire tirer l'algo vers les maximums locaux, à savoir plein d'individus tip-top au niveau de leur fitness score, mais malheureusement serait incapable de résoudre le problème pour autant.
Le choix des deux individus reproducteurs peut varier d'un algo à l'autre. Certains trient leur population et prennent les deux meilleurs à chaque fois, d'autres en prennent deux au hasard, d'autres prennent le meilleur et le font s'accoupler avec tous les autres, mais globalement la technique de la roulette est utilisée, à savoir qu'on tire bien au sort les individus, mais avec tout de même plus de chance de tirer un bon qu'un mauvais.
Ensuite les réseaux neuronaux.
Là je trouve les explications que j'ai trouvé sur internet beaucoup plus élitistes !
En gros, un neurone est une fonction qui attend n entrées. Pour chacune de ces entrée est appliquée un coefficient multiplicateur (ou poids), et quand le neurone fait la somme de toutes ses entrées*poids, il lance sa fonction d'activation. C'est le résultat de cette dernière qui dira si le neurone est actif ou non, sachant que pour un neurone basique, la fonction d'activation est simple : si la somme de mes entrées*poids >0 elle retourne 1, sinon elle retourne 0
On peut être moins binaire en utilisant une fonction sigmoïde, nom barbare signifiante que la représentation graphique de cette fonction ressemble à un S, et qu'en gros selon la somme des entrées*poids, ce qui sort de la fonction d'activation sera proportionnellement proche de -1 ou 1 (par exemple 0.3 ou -0.3)
On peut calibrer les poids à la main pour forcer le résultat attendu en sortie de neurone selon certaines entrées, c'est ce qu'on appelle l'apprentissage supervisé.
On peut également laisser les neurones trouver le poids idéal en leur fournissant un jeu d'essai conséquent comprenant une série de valeur d'entrées et la valeur de sortie attendue.
Ca peut être fait simplement pour deux entrées et deux poids, par rééquilibrage progressif, mais pour plein de neurones avec pleins d'entrées, ca devient long et fastidieux.
Les algorithmes génétiques entrent donc en jeu et permettent de calculer grossomerdo un ensemble de poids que le neurone devra utiliser pour répondre à peu près correctement aux entrées qu'on lui fourni.
Pour se faire, il devra à chaque nouvelle entrée dans les neurones qu'on lui fournit en jeu de test regarder le résultat attendu, tenir compte des autres poids qu'il avait déjà et qui lui permettait de répondre juste, pour élaborer un nouvel ensemble de poids qui répondrait juste à la fois aux anciennes demandes, mais également à cette nouvelle.
L'avantage de l'algorithme génétique, c'est qu'on peut être "tolérant" et lui dire par exemple, si tu t'approche de la solution à 90% ça nous va ! (le réseau donnera donc la bonne réponse 9 fois sur 10)
(ça je suis vraiment pas sûr) Donc si on veut reprendre notre algo génétique de base, l'individu aura de plus en plus de gène au fur et à mesure qu'on l'entrainera, et l'algo moulinera de plus en plus pour trouver un ensemble de poids corrects.
Bon, maintenant c'est l'heure des corrections, n'hésitez pas à me dire ce que je n'ai pas compris :)