···476476 url:
477477 value: https://web.archive.org/web/20180407053740/http://neuro.cs.ut.ee/demystifying-deep-reinforcement-learning/
478478 date: 2025-10-13
479479+tpro:
480480+ type: article
481481+ title: Trust Region Policy Optimization
482482+ author:
483483+ - Schulman, John
484484+ - Levine, Sergey
485485+ - Moritz, Philipp
486486+ - Jordan, Michael I.
487487+ - Abbeel, Pieter
488488+ date: 2015-02
489489+ url:
490490+ value: http://arxiv.org/abs/1502.05477v5
491491+ date: '2025-10-13'
492492+ serial-number:
493493+ arxiv: 1502.05477v5
494494+ abstract: 'We describe an iterative procedure for optimizing policies, with guaranteed
495495+ monotonic improvement. By making several approximations to the theoretically-justified
496496+ procedure, we develop a practical algorithm, called Trust Region Policy Optimization
497497+ (TRPO). This algorithm is similar to natural policy gradient methods and is effective
498498+ for optimizing large nonlinear policies such as neural networks. Our experiments
499499+ demonstrate its robust performance on a wide variety of tasks: learning simulated
500500+ robotic swimming, hopping, and walking gaits; and playing Atari games using images
501501+ of the screen as input. Despite its approximations that deviate from the theory,
502502+ TRPO tends to give monotonic improvement, with little tuning of hyperparameters.'
503503+ parent:
504504+ type: periodical
505505+
+13
cite-arxiv.fish
···11+function cite-arxiv
22+ set id "$argv[1]"
33+ set doi (
44+ echo "$argv[2]" \
55+ | string replace "https://arxiv.org/pdf/" "" \
66+ | string replace "https://arxiv.org/abs/" ""
77+ )
88+99+ set bibtex (uvx arxiv2bib "$doi")
1010+1111+ cite-bibtex "$id" "$bibtex"
1212+end
1313+
+7-7
rapport/context.typ
···11+#import "utils.typ": todo, comment, refneeded
12#import "@preview/fletcher:0.5.8": diagram, node, edge
2333-44-#let comment = content => text(fill: gray)[(Note: #content)]
55-#let todo = content => text(fill: red)[(TODO: #content)]
66-#let refneeded = text(fill: luma(100), [[Réf. nécéssaire]])
7485== Bases théoriques du _Reinforcement Learning_
96···180177181178=== Fonctions coût
182179183183-=== Descente de gradient
180180+=== Mise a jour
184181185182186183==== _Q-learning_
187184188188-La récompense associée à un état $S_t$ et une action $A_t$, appelée $Q(S_t, A_t)$ ici pour "quality" @qlearning-etymology, est mise à jour ainsi @maxq:
185185+La récompense associée à un état $S_t$ et une action $A_t$, appelée $Q(S_t, A_t)$ ici pour "quality" @qlearning-etymology, est mise à jour avec cette valeur @maxq:
189186190187$
191191-Q(S_t, A_t) <- (1 - alpha) underbrace(Q(S_t, A_t), "valeur actuelle") + alpha ( underbrace(R_(t+1), "récompense\npour cette action") + gamma underbrace(max_a Q(S_(t+1), a), "récompense de la meilleure\naction pour l'état suivant") )
188188+(1 - alpha) underbrace(Q(S_t, A_t), "valeur actuelle") + alpha ( underbrace(R_(t+1), "récompense\npour cette action") + gamma underbrace(max_a Q(S_(t+1), a), "récompense de la meilleure\naction pour l'état suivant") )
192189$
193190194191L'expression comporte deux hyperparamètres:
···199196200197201198==== _Trust Region Policy Optimization_
199199+200200+201201+202202203203==== _Proximal Policy Optimization_
204204
···11+#import "utils.typ": todo, comment, refneeded
22+13== Reproductibilité
2435=== État dans le domaine de la programmation
···34363537=== État dans le domaine de la robotique
36383737-En robotique, pour donner des ordres au matériel, on intéragit beaucoup avec le monde extérieur (ordres et lecture d'état de servo-moteurs, flux vidéo d'une caméra, etc), souvent dans un langage plutôt bas-niveau, pour des questions de performance et de proximité abstractionnelle au matériel
3939+En robotique, pour donner des ordres au matériel, on intéragit beaucoup avec le monde extérieur (ordres et lecture d'état de servo-moteurs, flux vidéo d'une caméra, etc), souvent dans un langage plutôt bas-niveau, pour des questions de performance et de proximité abstractionnelle au matériel.
38403939-De fait, les langages employés sont communément C, C++ ou Python#footnote[Il arrive assez communément d'utiliser Python, un langage haut-niveau, mais c'est dans ce cas à but de prototypage, et le code contrôlant les moteurs est écrit dans un langage bas niveau plus appelé par Python par FFI] @programming-languages-robotics, des langages bien plus impératifs que fonctionnels @imperative-languages.
4141+De fait, les langages employés sont communément C, C++ ou Python#footnote[Il arrive assez communément d'utiliser Python, un langage haut-niveau, mais c'est dans ce cas à but de prototypage, et le code contrôlant les moteurs est écrit dans un langage bas niveau puis appelé par Python par FFI.] @programming-languages-robotics, des langages bien plus impératifs que fonctionnels @imperative-languages.
40424143L'idée de s'affranchir d'effets de bords pour rendre les programmes dans la recherche en robotique reproductibles est donc plus utopique que réaliste.
424443454446=== Environnements de développement
45474646-Cependant, ce qui fait un programme n'est pas seulement son code: surtout dans des langages plus anciens sans gestion de dépendance simple, les dépendances (bibliothèques) du programme, ainsi que l'environnement et les étapes de compilation de ce dernier, représentent également une partie considérable de la complexité du programme (par exemple, en C++, on utilise un outil générant des fichiers de configuration pour un autre outil qui à son tour configure le compilateur de C++ @cmake)
4848+Cependant, ce qui fait un programme n'est pas seulement son code: surtout dans des langages plus anciens sans gestion de dépendance intégrée au langage, les dépendances (bibliothèques) du programme, ainsi que l'environnement et les étapes de compilation de ce dernier, représentent également une partie considérable de la complexité du programme (par exemple, en C++, on utilise un outil générant des fichiers de configuration pour un autre outil qui à son tour configure le compilateur de C++ @cmake)
47494850C'est cette partie que Nix, le gestionnaire de paquet, permet d'encapsuler et de rendre reproductible. Dans ce modèle, la compilation (et de manière plus générale la construction, ou _build_) du projet est la fonction que l'on veut rendre pure. L'entrée est le code source, et le résultat de la fonction est un binaire, qui ne doit dépendre que du code source.
4951···169171170172Lorsqu'il y a un ordinateur embarqué, comme par exemple une Raspberry Pi @raspi, il faut choisir un OS sur lequel faire tourner le programme.
171173172172-La encore, un OS s'accompagne d'un amas considérable de configuration des différentes parties du système: accès au réseau, drivers,…
174174+Là encore, un OS s'accompagne d'un amas considérable de configuration des différentes parties du système: accès au réseau, drivers,…
173175174174-Sur les OS Linux classiques tels que Ubuntu ou Debian, cette configuration est parfois stockée dans des fichiers, ou parfois retenue en mémoire, modifiée par l'execution de commandes.
176176+Sur les OS Linux classiques tels que Ubuntu ou Debian, cette configuration est parfois stockée dans des fichiers, ou parfois retenue en mémoire, modifiée par l'éxécution de commandes.
175177176178C'est un problème assez récurrent dans Linux de manière générale: d'un coup, le son ne marche plus, on passe ½h sur un forum à copier-coller des commandes dans un terminal, et le problème est réglé… jusqu'à ce qu'il survienne à nouveau après un redémarrage ou une réinstallation.
177179178178-Ici, NixOS assure que toute modification de la configuration d'un système est _déclarée_ (d'où l'adjectif "déclaratif") dans des fichiers de configurations, également écrit dans des fichiers `.nix` @nixos-impatient.
180180+Ici, NixOS assure que toute modification de la configuration d'un système est _déclarée_ (d'où l'adjectif "déclaratif") dans des fichiers de configurations, également écrits dans des fichiers `.nix` @nixos-impatient.
179181180182Ici encore, cela apporte un gain en terme de reproductibilité: l'état de configuration de l'OS sur lequel est déployé le programme du robot est, lui aussi, rendu reproductible.
183183+184184+== Packaging Nix pour _gz-unitree_
185185+186186+#todo[Faire cette partie]