···22#import "@preview/fletcher:0.5.8": diagram, node, edge
334455-65== Bases théoriques du _Reinforcement Learning_
7687L'apprentissage par renforcement, ou _Reinforcement Learning_, permet de développer des programmes sans expliciter leur logique: on décrit plutôt quatre choses, qui vont permettre à la logique d'émerger pendant la phase d'entraînement:
···219218220219$
221220max_(s in S) D_"KL" (Q'(s, dot) || Q(s, dot)) < delta
221221+$
222222+223223+Ce qui revient à limiter non pas la simple distance entre les deux politiques, mais _limiter la modification de la politique sur chaqune de ses actions_.
224224+225225+Ceci permet d'éviter d'avoir deux politiques jugées similaires par $D_"KL"$ à cause d'une "compensation" de la modification de la probabilité pour un $Q(s, a_2)$ par une autre modification pour $Q(s, a_1)$:
226226+227227+228228+Imaginons:
229229+230230+#let si = $& quad "si"$
231231+#let sinon = $& quad "sinon"$
232232+233233+234234+$
235235+Q' := (s, a) |-> cases(
236236+ Q(s, a) dot 2 si a = 1 \
237237+ Q(s, a) dot 1/2 si a = 2 \
238238+ Q(s, a) sinon
239239+) \
240240+241241+forall s in S, Q(s, 1) = Q(s, 2)
242242+$
243243+244244+On a dans ce cas
245245+246246+#let kl = (a, b) => $#a log #a / #b$
247247+248248+#let crossout = (content, why) => $undershell(cancel(#content), "car " #why)$
249249+250250+$
251251+D_"KL" ( Q || Q' )
252252+&= sum_((s, a) in S times A) kl(Q(s, a), Q'(s, a)) \
253253+&= sum_(s in S)
254254+crossout(
255255+ sum_(a in A - {1, 2}) [ kl(Q(s, a), Q'(s, a)) ],
256256+ Q(s, a) = Q'(s, a) " pour " a in.not {1, 2}
257257+)
258258++ kl(Q(s, 1), 2Q(s, 1)) + kl(Q(s, 2), 1/2 Q(s, 2)) \
259259+&= sum_(s in S)
260260+Q(s, 1) lr([ log Q(s, 1) - log Q(s, 1) - log 2 ], size: #200%) +
261261+Q(s, 2) [ log Q(s, 2) - log Q(s, 2) - log 1/2 ] \
262262+&= sum_(s in S)
263263+- Q(s, 1) log 2 + Q(s, 2) log 2
222264$
223265224266Avec $delta$ une limite supérieure de distance entre $Q'$, la nouvelle politique, et $Q$, l'ancienne.