web-dev-qa-db-fra.com

Formation d'un réseau neuronal avec apprentissage par renforcement

Je connais les bases des réseaux de neurones à action directe et comment les former à l'aide de l'algorithme de rétropropagation, mais je recherche un algorithme que je peux utiliser pour former un ANN en ligne avec un apprentissage par renforcement.

Par exemple, le problème poteau du chariot basculant vers le haut est celui que j'aimerais résoudre avec un ANN. Dans ce cas, je ne sais pas ce qu'il faut faire pour contrôler le pendule, je sais seulement à quel point je suis proche de la position idéale. J'ai besoin que l'ANN apprenne en fonction de la récompense et de la punition. Ainsi, l'apprentissage supervisé n'est pas une option.

Une autre situation est quelque chose comme le jeu de serpent , où la rétroaction est retardée et limitée aux buts et aux anti-buts, plutôt qu'à la récompense.

Je peux penser à certains algorithmes pour la première situation, comme l'escalade ou les algorithmes génétiques, mais je suppose qu'ils seraient tous les deux lents. Ils peuvent également être applicables dans le deuxième scénario, mais incroyablement lents et non propices à l'apprentissage en ligne.

Ma question est simple: Existe-t-il un algorithme simple pour former un réseau neuronal artificiel avec apprentissage par renforcement? Je suis principalement intéressé par les situations de récompense en temps réel, mais si un algorithme pour les situations basées sur des objectifs est disponible, c'est encore mieux.

61
Kendall Frey

Il existe quelques articles de recherche sur le sujet:

Et du code:

Ce ne sont que quelques-uns des meilleurs résultats de recherche Google sur le sujet. Les deux premiers articles semblent assez bons, même si je ne les ai pas lus personnellement. Je pense que vous trouverez encore plus d'informations sur les réseaux de neurones avec apprentissage par renforcement si vous effectuez une recherche rapide sur Google Scholar.

26
Kiril

Si la sortie qui mène à une récompense r est rétropropagée dans le réseau r fois, vous renforcerez le réseau proportionnellement à la récompense. Ce n'est pas directement applicable aux récompenses négatives, mais je peux penser à deux solutions qui produiront des effets différents:

1) Si vous avez un ensemble de récompenses dans une plage rmin-rmax, redimensionnez-les en 0-(rmax-rmin) afin qu'elles ne soient pas toutes négatives. Plus la récompense est grande, plus le renfort créé est fort.

2) Pour une récompense négative -r, rétropropage une sortie aléatoire r fois, tant qu'elle est différente de celle qui mène à la récompense négative. Cela renforcera non seulement les sorties souhaitables, mais diffusera ou évitera également les mauvaises sorties.

7
Junuxx