Bien que je sache que SARSA est sur la politique alors que Q-learning est hors politique, quand on regarde leurs formules c'est difficile ( pour moi) pour voir toute différence entre ces deux algorithmes.
Selon le livre Reinforcement Learning: An Introduction (par Sutton et Barto). Dans l'algorithme SARSA, étant donné une politique, la fonction de valeur d'action correspondante Q (dans l'état s et l'action a, au pas de temps t), c'est-à-dire Q (st, unet), peut être mis à jour comme suit
Q (st, unet) = Q (st, unet) + α * (rt + γ * Q (st + 1, unet + 1) - Q (st, unet))
En revanche, l'étape de mise à jour de l'algorithme Q-learning est la suivante
Q (st, unet) = Q (st, unet) + α * (rt + γ * maxune Q (st + 1, a) - Q (st, unet))
qui peut aussi s'écrire
Q (st, unet) = (1 - α) * Q (st, unet) + α * (rt + γ * maxune Q (st + 1, une))
où γ (gamma) est le facteur d'actualisation et rt est la récompense reçue de l'environnement au pas de temps t.
La différence entre ces deux algorithmes est-elle le fait que SARSA ne recherche que la prochaine valeur de politique tandis que Q-learning recherche la prochaine maximum valeur de politique?
TLDR (et ma propre réponse)
Merci à tous ceux qui ont répondu à cette question depuis que je l'ai posée. J'ai fait un github repo en jouant avec Q-Learning et j'ai empiriquement compris quelle est la différence. Tout revient à la façon dont vous sélectionnez votre prochaine meilleure action, qui d'un point de vue algorithmique peut être un mean, max or best action selon la façon dont vous avez choisi de l'implémenter.
L'autre différence principale est quand cette sélection se produit (par exemple, en ligne vs hors ligne) et comment/pourquoi cela affecte apprentissage. Si vous lisez ceci en 2019 et que vous êtes plutôt une personne pratique, jouer avec un problème de jouet RL) est probablement le meilleur moyen de comprendre les différences.
Une dernière note importante est que Suton & Barto ainsi que Wikipedia ont souvent mélangé, déroutant ou faux représentations formelles en ce qui concerne le prochain état meilleur/max action et récompense:
r(t+1)
est en fait
r(t)
J'espère que cela aide quiconque à rester coincé à cela.
Oui, c'est la seule différence. Le SARSA sur la politique apprend les valeurs d'action par rapport à la politique qu'il suit, tandis que Q-Learning hors politique le fait par rapport à la politique gourmande. Dans certaines conditions communes, elles convergent toutes les deux vers la fonction de valeur réelle, mais à des rythmes différents. Q-Learning a tendance à converger un peu plus lentement, mais a la capacité de continuer à apprendre tout en changeant les politiques. De plus, Q-Learning ne garantit pas la convergence lorsqu'il est combiné avec une approximation linéaire.
Concrètement, dans le cadre de la politique ε-gourmande, Q-Learning calcule la différence entre Q (s, a) et la valeur d'action maximale, tandis que SARSA calcule la différence entre Q (s, a) et la somme pondérée de l'action moyenne valeur et le maximum:
Apprentissage Q: Q (st + 1,unet + 1) = maxuneQ (st + 1,une)
SARSA: Q (st + 1,unet + 1) = ε · moyenneuneQ (st + 1, a) + (1-ε) · maxuneQ (st + 1,une)
Quand j'ai appris cette partie, je l'ai trouvé très déroutant aussi, alors j'ai rassemblé les deux pseudo-codes de R.Sutton et A.G.Barto dans l'espoir de faire la différence plus clairement.
Les cases bleues mettent en évidence la partie où les deux algorithmes diffèrent réellement. Les chiffres mettent en évidence la différence plus détaillée qui sera expliquée plus loin.
TL; NR :
| | SARSA | Q-learning |
|:-----------:|:-----:|:----------:|
| Choosing A' | π | π |
| Updating Q | π | μ |
où π est une politique ε-gourmande (par exemple ε> 0 avec exploration), et μ est une politique gourmande (par exemple ε == 0, AUCUNE exploration).
Étant donné que Q-learning utilise différentes politiques pour choisir la prochaine action A 'et mettre à jour Q. En d'autres termes, il essaie d'évaluer π tout en suivant une autre politique μ, il s'agit donc d'un algorithme hors politique.
En revanche, SARSA utilise π tout le temps, il s'agit donc d'un algorithme sur la politique.
Explication plus détaillée :
La différence la plus importante entre les deux est la façon dont Q est mis à jour après chaque action. SARSA utilise le Q 'suivant une politique ε-cupide exactement, comme A' en est tiré. En revanche, Q-learning utilise le maximum Q 'sur toutes les actions possibles pour l'étape suivante. Cela donne l'impression de suivre une politique gourmande avec ε = 0, c'est-à-dire AUCUNE exploration dans cette partie.
Cependant, lors de l'exécution d'une action, Q-learning utilise toujours l'action prise à partir d'une politique ε-gourmande. C'est pourquoi "Choose A ..." est à l'intérieur de la boucle de répétition.
Suivant la logique de boucle dans Q-learning, A 'est toujours de la politique ε-gourmande.
Comme cela est déjà décrit dans la plupart des autres réponses, la différence mathématique entre les deux mises à jour est en effet que, lors de la mise à jour du [~ # ~] q [~ # ~] - valeur pour une paire état-action (St, UNEt) :
Comme mentionné dans d'autres réponses, la différence décrite ci-dessus signifie, en utilisant la terminologie technique, que Sarsa est un algorithme d'apprentissage sur la politique et Q-learning est un algorithme d'apprentissage hors politique .
Dans la limite (étant donné un temps infini pour générer de l'expérience et apprendre), et sous certaines hypothèses supplémentaires, cela signifie que Sarsa et Q-learning convergent vers différentes solutions/politiques "optimales":
Un algorithme comme Sarsa est généralement préférable dans les situations où nous nous soucions des performances de l'agent pendant le processus d'apprentissage/de génération d'expérience. Considérez, par exemple, que l'agent est un robot coûteux qui se brisera s'il tombe sur une falaise. Nous préférons ne pas le faire tomber trop souvent pendant le processus d'apprentissage, car c'est cher. Par conséquent, nous nous soucions de ses performances pendant le processus d'apprentissage. Cependant, nous savons également que nous en avons parfois besoin pour agir de manière aléatoire (par exemple, epsilon-greedy). Cela signifie qu'il est très dangereux pour le robot de marcher le long de la falaise, car il peut décider d'agir au hasard (avec probabilité epsilon) et de tomber. Donc, nous préférerions qu'il apprenne rapidement qu'il est dangereux d'être près de la falaise; même si une politique gourmande pouvait marcher à côté d'elle sans tomber, nous savons que nous suivons une politique epsilon-gourmande de manière aléatoire, et nous nous soucions d'optimiser nos performances étant donné que nous savons que nous allons être stupide parfois. C'est une situation où Sarsa serait préférable.
Un algorithme comme Q-learning serait préférable dans les situations où nous ne nous soucions pas des performances de l'agent pendant le processus de formation, mais nous voulons simplement qu'il apprenne une politique optimale de gourmandise vers laquelle nous passerons éventuellement . Considérez, par exemple, que nous jouons à quelques jeux d'entraînement (où cela ne nous dérange pas de perdre à cause du hasard parfois), puis jouons à un tournoi important (où nous arrêterons d'apprendre et passerons de epsilon-greedy à la politique cupide ). C'est là que le Q-learning serait mieux.
Il y a une erreur d'index dans votre formule pour Q-Learning. Page 148 de Sutton et Barto.
Q (st, at) <- Q (st, at) + alpha * [r (t + 1) + gamma * max Q (st + 1, a) - Q (st, at)]
La faute de frappe est dans l'argument du max:
les indices sont st + 1 et a, alors que dans votre question ils sont st + 1 et à + 1 (ceux-ci sont corrects pour SARSA).
J'espère que ça aide un peu.
Dans Q-Learning
Voici votre: Q-Learning: Q (St, At) = Q (St, At) + a [R (t + 1) + remise * max Q (St + 1, At) - Q (St, At)]
devrait être changé en Q-Learning: Q (St, At) = Q (St, At) + a [R (t + 1) + remise * max Q (St + 1, a) - Q (St, At)]
Comme vous l'avez dit, vous devez trouver la valeur Q maximale pour l'égalisation de mise à jour. en changeant le a, alors vous aurez un nouveau Q (St, At). ATTENTION, le a qui vous donne la valeur Q maximale n'est pas la prochaine action. A ce stade, vous ne connaissez que l'état suivant (St + 1), et avant de passer au tour suivant, vous voulez mettre à jour le St par le St + 1 (St <- St + 1).
Pour chaque boucle;
choisissez At dans le St en utilisant la valeur Q
prendre At et observer Rt + 1 et St + 1
Mettez à jour la valeur Q à l'aide de l'égaliseur.
St <- St + 1
Jusqu'à ce que St soit terminal
La seule différence entre SARSA et Qlearning est que SARSA prend la prochaine action basée sur la politique actuelle tandis que qlearning prend l'action avec l'utilité maximale de l'état suivant