this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Continue rapport

+32 -6
+7
bib.yaml
··· 540 540 parent: 541 541 type: periodical 542 542 543 + ppo-openai: 544 + type: web 545 + title: Proximal Policy Optimization — Spinning Up documentation 546 + url: 547 + date: '2025-10-16' 548 + value: https://spinningup.openai.com/en/latest/algorithms/ppo.html 549 +
+25 -6
rapport/context.typ
··· 2 2 #import "@preview/fletcher:0.5.8": node, edge 3 3 #import "@preview/fletcher:0.5.8" 4 4 5 - #let diagram = (..args) => pad(y: 3em, align(center, fletcher.diagram(..args))) 5 + #show figure: set block(spacing: 4em) 6 + #let diagram = (caption: none, ..args) => figure(caption: caption, fletcher.diagram(..args)) 6 7 7 8 #show math.equation.where(block: true): set block(spacing: 2em) 8 9 ··· 443 444 444 445 Il est théoriquement possible d'utiliser $A$ pour optimiser une politique, en maximisant sa valeur à un état donné: 445 446 446 - #diagram( 447 + #diagram(caption: [Boucle d'entraînement], 447 448 node((0, 0))[$s_t$], 448 449 edge("-"), 449 450 node(name: <policy>, (0, -1))[$cal(P)$], ··· 451 452 node((1, -2))[$a_t$], 452 453 edge("->", corner: right)[$M$], 453 454 node(name: <final>, (2, 0))[$s_(t+1)$], 454 - edge((2, 0), (2, .75), (0, .75), (0, 0), "-->", label-side: left)[itération], 455 + edge(<final>, (0, 0), "-->", label-side: left)[itération], 455 456 // edge("d,d,l,l,l,u,u,u", <policy>, "->", label-pos: 33%, label-side: left, align(center, [$Q_cal(P)(s_(t+1), argmax_(a in A) A_(cal(P), R)(s_(t+1), a)) <- A_(cal(P), R) (dots)$ \ Mise à jour])) 456 457 // edge("d,d,l,l,l,u,u,u", <policy>, "->", label-pos: 37%, label-side: left, align(center)[$argmax_(a in A) A_(cal(P), R)(s_(t+1), a)$ \ mise à jour de $cal(P)$]) 457 - edge("d,d,l,l,l,u,u,u", <policy>, "->", label-pos: 37%, label-side: left, align(center)[$Q_cal(P)(s_(t+1), a_(t+1)^*) &= A_(cal(P), R)(s_(t+1), a_(t+1)^*)$ \ mise à jour de $cal(P)$]) 458 - ) 458 + edge("d,l,l,l,u,u", <policy>, "->", label-pos: 33%, label-side: left, align(center)[ 459 + // mise à jour de $cal(P)$ \ 460 + $Q_cal(P)(s_(t+1), a_(t+1)^*) <- A_(cal(P), R)(s_(t+1), a_(t+1)^*)$ 461 + ]) 462 + ) <policy-update-loop> 459 463 460 464 Avec 461 465 ··· 499 503 Il existe plusieurs manières de mesurer l'écart entre deux distributions de probabilité, dont notamment la _divergence de Kullback-Leibler_, aussi appelée entropie relative @kullback-leibler @kullback-leibler2: 500 504 501 505 $ 502 - D_"KL" (P || P') := sum_(x in cal(X)) P(x) log P(x) / P'(x) 506 + D_"KL" (P || P') := sum_(x in cal(X)) P(x) log P(x) / (P'(x)) 503 507 $ 504 508 505 509 Avec $cal(X)$ l'espace des échantillons et $P, P'$ deux distributions de probabilité sur celui-ci. Dans notre cas, $cal(X) = S times A$, ··· 562 566 563 567 ==== _Proximal Policy Optimization_ 564 568 569 + La _PPO_ repose sur le même principe de stabilisation de l'entraînement par limitation de l'ampleur des changements de politique à chaque pas. 565 570 571 + #section[Avec pénalité _(PPO-Penalty)_] 566 572 573 + #section[Par _clipping_ _(PPO-Clip)_] 574 + 575 + _PPO-Clip_ évite le calcul d'une distance K-L#footnote[Kullback-Leibler] et enlève la contraînte sur le problème d'optimisation. 576 + 577 + On préfère changer la mise à jour de la politique, pour limiter directement dans son expression l'ampleur de la modification à $Q_cal(P) (s_(t+1), a_(t+1)^*)$ (cf @policy-update-loop) 578 + 579 + On utilise cette mise à jour @ppo-openai 580 + 581 + $ 582 + Q_cal(P) (s_(t+1), a_(t+1)) <- min( 583 + 584 + ) 585 + $ 567 586 568 587 569 588 == Le H1v2 d'_Unitree_