Policy Optimization-强化学习业界手册
文章目錄
- Deriving the Simplest Policy Gradient
- 1.軌跡的概率 (Probability of a Trajectory)
- 2.對(duì)數(shù)導(dǎo)數(shù)技巧
- 3.軌跡的對(duì)數(shù)概率
- 4.環(huán)境函數(shù)的梯度
- 5.軌跡的梯度對(duì)數(shù)概率
- 綜上所述,我們得出以下結(jié)論:
- Implementing the Simplest Policy Gradient
- 1.建立策略網(wǎng)絡(luò)
- 2.構(gòu)建損失函數(shù)
- 3.運(yùn)行訓(xùn)練的一個(gè)Epoch
- Expected Grad-Log-Prob Lemma
- Don't Let the Past Distract You
- Implementing Reward-to-Go Policy Gradient
- Baselines in Policy Gradients
- Other Forms of the Policy Gradient
- Reference:
在本節(jié)中,我們將討論政策優(yōu)化算法的數(shù)學(xué)基礎(chǔ), 我們將介紹政策梯度理論中的三個(gè)關(guān)鍵結(jié)果:
- 關(guān)于策略參數(shù)的最簡(jiǎn)單的等式描述策略表現(xiàn)的梯度,
- 一條規(guī)則,允許我們從該表達(dá)式中刪除無(wú)用的術(shù)語(yǔ),
- 以及允許我們?cè)谠摫磉_(dá)式中添加有用術(shù)語(yǔ)的規(guī)則。
最后,我們將這些結(jié)果結(jié)合在一起,并描述策略梯度的基于優(yōu)勢(shì)的表達(dá)式,這是我們?cè)赩anilla Policy Gradient實(shí)現(xiàn)中使用的版本。
Deriving the Simplest Policy Gradient
在這里,我們考慮一種隨機(jī)的,參數(shù)化的策略,πθ\pi_\thetaπθ?. 我們的目標(biāo)是最大化期望收益 J(πθ)=Eτ~πθR(τ)J(\pi_\theta)=E_{\tau\sim\pi_\theta}R(\tau)J(πθ?)=Eτ~πθ??R(τ)。 出于此推導(dǎo)的目的,我們將使用R(τ)R(\tau)R(τ)來(lái)給出有限步長(zhǎng)的無(wú)折扣收益,此外無(wú)限步長(zhǎng)的折現(xiàn)收益設(shè)置的推導(dǎo)幾乎是相同的。
我們想通過(guò)梯度上升來(lái)優(yōu)化策略,例如:
θk+1=θk+α?θJ(πθ)∣θk.\theta_{k+1}=\theta_k+\alpha\nabla_\theta J(\pi_\theta)|_{\theta_k}.θk+1?=θk?+α?θ?J(πθ?)∣θk??.
策略的梯度?θJ(πθ)\nabla_\theta J(\pi_\theta)?θ?J(πθ?)稱為策略梯度,以這種方式優(yōu)化策略的算法稱為策略梯度算法。 (示例包括Vanilla Policy Gradient和TRPO。PPO通常被稱為策略梯度算法,盡管這有點(diǎn)不準(zhǔn)確。)
要實(shí)際使用此算法,我們需要一個(gè)可以通過(guò)數(shù)值計(jì)算的策略梯度表達(dá)式。 這涉及兩個(gè)步驟:1)得出策略表現(xiàn)的分析梯度,結(jié)果證明是期望值的形式,然后2)構(gòu)建該期望值的樣本估計(jì)值,可以使用代理與環(huán)境相互作用有限數(shù)量的數(shù)據(jù)來(lái)計(jì)算 。
在本小節(jié)中,我們將找到該表達(dá)式的最簡(jiǎn)單形式。 在后面的小節(jié)中,我們將展示如何以最簡(jiǎn)單的形式進(jìn)行改進(jìn),以獲取我們?cè)跇?biāo)準(zhǔn)策略梯度實(shí)現(xiàn)中實(shí)際使用的版本。
我們將從列出一些對(duì)得出分析梯度有用的事實(shí)開始。
1.軌跡的概率 (Probability of a Trajectory)
給定動(dòng)作來(lái)自πθπ_θπθ?的軌跡τ=(s0,a0,...,sT+1)τ=(s_0,a_0,...,s_{T + 1})τ=(s0?,a0?,...,sT+1?)的概率為:
P(τ∣θ)=ρ0(s0)∏t=0TP(st+1∣st,at)πθ(at∣st).P(\tau|\theta) = \rho_0 (s_0) \prod_{t=0}^{T} P(s_{t+1}|s_t, a_t) \pi_{\theta}(a_t |s_t). P(τ∣θ)=ρ0?(s0?)t=0∏T?P(st+1?∣st?,at?)πθ?(at?∣st?).
2.對(duì)數(shù)導(dǎo)數(shù)技巧
對(duì)數(shù)導(dǎo)數(shù)技巧是基于微積分的簡(jiǎn)單規(guī)則:logxlogxlogx相對(duì)于x的導(dǎo)數(shù)為1 ? x。 重新排列并與鏈?zhǔn)揭?guī)則結(jié)合后,我們得到:
?θP(τ∣θ)=P(τ∣θ)?θlog?P(τ∣θ).\nabla_{\theta} P(\tau | \theta) = P(\tau | \theta) \nabla_{\theta} \log P(\tau | \theta).?θ?P(τ∣θ)=P(τ∣θ)?θ?logP(τ∣θ).
3.軌跡的對(duì)數(shù)概率
軌跡的對(duì)數(shù)概率就是:
log?P(τ∣θ)=log?ρ0(s0)+∑t=0T(log?P(st+1∣st,at)+log?πθ(at∣st)).\log P(\tau|\theta) = \log \rho_0 (s_0) + \sum_{t=0}^{T} \bigg( \log P(s_{t+1}|s_t, a_t) + \log \pi_{\theta}(a_t |s_t)\bigg).logP(τ∣θ)=logρ0?(s0?)+t=0∑T?(logP(st+1?∣st?,at?)+logπθ?(at?∣st?)).
4.環(huán)境函數(shù)的梯度
環(huán)境不依賴于θθθ,因此ρ0(s0),P(st+1∣st,at)ρ_0(s_0),P(s_{t + 1}| s_t,a_t)ρ0?(s0?),P(st+1?∣st?,at?)和R(τ)R(τ)R(τ)的梯度為零。
5.軌跡的梯度對(duì)數(shù)概率
因此,軌跡的對(duì)數(shù)概率的梯度為
?θlog?P(τ∣θ)=?θlog?ρ0(s0)+∑t=0T(?θlog?P(st+1∣st,at)+?θlog?πθ(at∣st))=∑t=0T?θlog?πθ(at∣st).\begin{aligned}\nabla_{\theta} \log P(\tau | \theta) &= {\nabla_{\theta} \log \rho_0 (s_0)} + \sum_{t=0}^{T} \bigg( {\nabla_{\theta} \log P(s_{t+1}|s_t, a_t)} + \nabla_{\theta} \log \pi_{\theta}(a_t |s_t)\bigg) \\ &= \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t)\end{aligned}.?θ?logP(τ∣θ)?=?θ?logρ0?(s0?)+t=0∑T?(?θ?logP(st+1?∣st?,at?)+?θ?logπθ?(at?∣st?))=t=0∑T??θ?logπθ?(at?∣st?)?.
綜上所述,我們得出以下結(jié)論:
?θJ(πθ)=?θEτ~πθR(τ)=?θ∫τP(τ∣θ)R(τ)Expand?expectation=∫τ?θP(τ∣θ)R(τ)Bring?gradient?under?integral=∫τP(τ∣θ)?θlog?P(τ∣θ)R(τ)Log-derivative?trick=Eτ~πθ?θlog?P(τ∣θ)R(τ)Return?to?expectation?form∴?θJ(πθ)=Eτ~πθ∑t=0T?θlog?πθ(at∣st)R(τ)Expression?for?grad-log-prob\begin{aligned} \nabla_{\theta} J(\pi_{\theta}) &= \nabla_{\theta} E_{\tau \sim \pi_{\theta}}{R(\tau)} & \\ &= \nabla_{\theta} \int_{\tau} P(\tau|\theta) R(\tau) & \text{Expand expectation} \\ &= \int_{\tau} \nabla_{\theta} P(\tau|\theta) R(\tau) & \text{Bring gradient under integral} \\ &= \int_{\tau} P(\tau|\theta) \nabla_{\theta} \log P(\tau|\theta) R(\tau) & \text{Log-derivative trick} \\ &= E_{\tau \sim \pi_{\theta}}{\nabla_{\theta} \log P(\tau|\theta) R(\tau)} & \text{Return to expectation form} \\ \therefore \nabla_{\theta} J(\pi_{\theta}) &= E_{\tau \sim \pi_{\theta}}{\sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t) R(\tau)} & \text{Expression for grad-log-prob} \end{aligned}?θ?J(πθ?)∴?θ?J(πθ?)?=?θ?Eτ~πθ??R(τ)=?θ?∫τ?P(τ∣θ)R(τ)=∫τ??θ?P(τ∣θ)R(τ)=∫τ?P(τ∣θ)?θ?logP(τ∣θ)R(τ)=Eτ~πθ???θ?logP(τ∣θ)R(τ)=Eτ~πθ??t=0∑T??θ?logπθ?(at?∣st?)R(τ)?Expand?expectationBring?gradient?under?integralLog-derivative?trickReturn?to?expectation?formExpression?for?grad-log-prob?
這是一個(gè)期望,這意味著我們可以使用樣本均值對(duì)其進(jìn)行估計(jì)。 如果我們收集一組軌跡:D={τi}i=1,...,N\mathcal{D} = \{\tau_i \}_{i = 1,...,N}D={τi?}i=1,...,N?`,其中通過(guò)使代理πθ\pi_{\theta}πθ?在環(huán)境中作用獲得每個(gè)軌跡 ,策略梯度可以使用以下作為估計(jì):
g^=1∣D∣∑τ∈D∑t=0T?θlog?πθ(at∣st)R(τ),\hat{g} = \frac{1}{|\mathcal{D}|} \sum_{\tau \in \mathcal{D}} \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t) R(\tau), g^?=∣D∣1?τ∈D∑?t=0∑T??θ?logπθ?(at?∣st?)R(τ),
其中∣D∣|\mathcal{D}|∣D∣ 是 D\mathcal{D}D 中軌跡τ\tauτ的個(gè)數(shù)(here, NNN).
最后一個(gè)表達(dá)式是我們想要的可計(jì)算表達(dá)式的最簡(jiǎn)單版本。 假設(shè)我們以可計(jì)算出 ?θlog?πθ(a∣s)\nabla_{\theta}\log\pi_{\theta}(a | s)?θ?logπθ?(a∣s) 的方式表示我們的策略,并且如果是在能夠收集軌跡數(shù)據(jù)集的環(huán)境中,我們可以計(jì)算策略梯度并采取更新步驟。
Implementing the Simplest Policy Gradient
我們?cè)趕pinup / examples / pg_math / 1_simple_pg.py中給出了這個(gè)簡(jiǎn)單版本的策略梯度算法的簡(jiǎn)短Tensorflow實(shí)現(xiàn)。 (也可以在github https://github.com/openai/spinningup/blob/master/spinup/examples/pg_math/1_simple_pg.py __上查看)。它只有122行,因此我們高度重視 建議您深入閱讀。 盡管我們不會(huì)在此處介紹全部代碼,但我們將重點(diǎn)介紹一些重要的部分。
1.建立策略網(wǎng)絡(luò)
# make core of policy networkobs_ph = tf.placeholder(shape=(None, obs_dim), dtype=tf.float32)logits = mlp(obs_ph, sizes=hidden_sizes+[n_acts]) # make action selection op (outputs int actions, sampled from policy)actions =tf.squeeze(tf.multinomial(logits=logits,num_samples=1), axis=1)此塊構(gòu)建了前饋神經(jīng)網(wǎng)絡(luò)分類策略。 (有關(guān)更新,請(qǐng)參閱第1部分中的隨機(jī)策略部分。)logits張量可用于構(gòu)造對(duì)數(shù)概率和操作的概率,而action張量基于logit隱含的概率對(duì)操作進(jìn)行采樣。
2.構(gòu)建損失函數(shù)
# make loss function whose gradient, for the right data, is policy gradientweights_ph = tf.placeholder(shape=(None,), dtype=tf.float32)act_ph = tf.placeholder(shape=(None,), dtype=tf.int32)action_masks = tf.one_hot(act_ph, n_acts)log_probs = tf.reduce_sum(action_masks * tf.nn.log_softmax(logits), axis=1)loss = -tf.reduce_mean(weights_ph * log_probs)在此塊中,我們?yōu)椴呗蕴荻人惴?gòu)建“損失”函數(shù)。 當(dāng)插入合適的數(shù)據(jù)時(shí),策略梯度等于這個(gè)損失的梯度。 合適的數(shù)據(jù)表示根據(jù)當(dāng)前策略執(zhí)行操作時(shí)收集的一組(狀態(tài),動(dòng)作,權(quán)重)元組,其中狀態(tài)-動(dòng)作對(duì)的權(quán)重是從其所屬回合返回的。 (盡管我們將在后面的小節(jié)中顯示,但是您可以插入其他值來(lái)也可以正常工作的重量。)
即使我們將其描述為損失函數(shù),但從監(jiān)督學(xué)習(xí)的角度來(lái)看,它并不是典型的損失函數(shù)。與標(biāo)準(zhǔn)損失函數(shù)有兩個(gè)主要區(qū)別。
1.數(shù)據(jù)分布取決于參數(shù)。損失函數(shù)通常在固定的數(shù)據(jù)分布上定義,該分布與我們要優(yōu)化的參數(shù)無(wú)關(guān)。這里不是,必須在最新策略上對(duì)數(shù)據(jù)進(jìn)行采樣。
2.它無(wú)法衡量效果。損失函數(shù)通常會(huì)評(píng)估我們關(guān)注的性能指標(biāo)。在這里,我們關(guān)心期望收益J(πθ)J(\pi_{\theta})J(πθ?),但即使在期望中,我們的“損失”函數(shù)也根本不近似。此“損失”功能僅對(duì)我們有用,因?yàn)楫?dāng)在當(dāng)前參數(shù)下進(jìn)行評(píng)估時(shí),使用當(dāng)前參數(shù)生成的數(shù)據(jù)時(shí),其性能會(huì)呈現(xiàn)負(fù)梯度。
但是,在梯度下降的第一步之后,就不再與性能相關(guān)。這意味著,對(duì)于給定的一批數(shù)據(jù),最小化此“損失”功能無(wú)法保證提高預(yù)期收益。可以將這一損失放到?∞-\infty?∞,而策略表現(xiàn)能可能會(huì)下降;實(shí)際上,通常會(huì)這樣。有時(shí),資深RL研究人員可能會(huì)將此結(jié)果描述為對(duì)大量數(shù)據(jù)“過(guò)度擬合”的策略。這是描述性的,但不應(yīng)從字面上理解,因?yàn)樗鼪]有涉及泛化錯(cuò)誤。
我們提出這一點(diǎn)是因?yàn)?#xff0c;ML練習(xí)者通常會(huì)在訓(xùn)練過(guò)程中將損失函數(shù)解釋為有用的信號(hào)-“如果損失減少了,一切都會(huì)好起來(lái)的。”在政策梯度中,這種直覺是錯(cuò)誤的,您應(yīng)該只在乎平均回報(bào)率。損失函數(shù)沒有任何意義。
此處用于制作log_probs張量的方法(創(chuàng)建操作掩碼,并使用它來(lái)選擇特定的對(duì)數(shù)概率)僅適用于分類策略。 通常它不起作用。
3.運(yùn)行訓(xùn)練的一個(gè)Epoch
# for training policy def train_one_epoch():# make some empty lists for logging.batch_obs = [] # for observationsbatch_acts = [] # for actionsbatch_weights = [] # for R(tau) weighting in policy gradientbatch_rets = [] # for measuring episode returnsbatch_lens = [] # for measuring episode lengths# reset episode-specific variablesobs = env.reset() # first obs comes from starting distributiondone = False # signal from environment that episode is overep_rews = [] # list for rewards accrued throughout ep# render first episode of each epochfinished_rendering_this_epoch = False# collect experience by acting in the environment with current policywhile True:# renderingif not(finished_rendering_this_epoch):env.render()# save obsbatch_obs.append(obs.copy())# act in the environmentact = sess.run(actions, {obs_ph: obs.reshape(1,-1)})[0]obs, rew, done, _ = env.step(act)# save action, rewardbatch_acts.append(act)ep_rews.append(rew)if done:# if episode is over, record info about episodeep_ret, ep_len = sum(ep_rews), len(ep_rews)batch_rets.append(ep_ret)batch_lens.append(ep_len)# the weight for each logprob(a|s) is R(tau)batch_weights += [ep_ret] * ep_len# reset episode-specific variablesobs, done, ep_rews = env.reset(), False, []# won't render again this epochfinished_rendering_this_epoch = True# end experience loop if we have enough of itif len(batch_obs) > batch_size:break# take a single policy gradient update stepbatch_loss, _ = sess.run([loss, train_op],feed_dict={obs_ph: np.array(batch_obs),act_ph: np.array(batch_acts),weights_ph: np.array(batch_weights)})return batch_loss, batch_rets, batch_lenstrain_one_epoch()函數(shù)運(yùn)行策略梯度的一個(gè)“epoch”,我們定義為
- 1.經(jīng)驗(yàn)收集步驟(L62-97),其中代理使用最新策略在環(huán)境中互動(dòng)一定數(shù)量的回合,其后是
- 2.一個(gè)策略梯度的更新 (L99-105).
Expected Grad-Log-Prob Lemma
在本小節(jié)中,我們將得出一個(gè)中間結(jié)果,該結(jié)果在整個(gè)政策梯度理論中得到了廣泛使用。 我們將其稱為“梯度對(duì)數(shù)概率期望(EGLP)”引理 [1]。
EGLP引理。 假設(shè)PθP_{\theta}Pθ?是隨機(jī)變量x上的參數(shù)化概率分布。 然后:
Ex~Pθ?θlog?Pθ(x)=0.E_{x \sim P_{\theta}} {\nabla_{\theta} \log P_{\theta}(x)} = 0.Ex~Pθ???θ?logPθ?(x)=0.
回想一下,所有概率分布都是“歸一化”的:
∫xPθ(x)=1.\int_x P_{\theta}(x) = 1.∫x?Pθ?(x)=1.
取兩側(cè)的梯度:
?θ∫xPθ(x)=?θ1=0.\nabla_{\theta} \int_x P_{\theta}(x) = \nabla_{\theta} 1 = 0.?θ?∫x?Pθ?(x)=?θ?1=0.
使用對(duì)數(shù)派生技巧可以獲取:
0=?θ∫xPθ(x)=∫x?θPθ(x)=∫xPθ(x)?θlog?Pθ(x)∴0=Ex~Pθ?θlog?Pθ(x).\begin{aligned}0 &= \nabla_{\theta} \int_x P_{\theta}(x) \\ &= \int_x \nabla_{\theta} P_{\theta}(x) \\ &= \int_x P_{\theta}(x) \nabla_{\theta} \log P_{\theta}(x) \\ \therefore 0 &=E_{x \sim P_{\theta}}{\nabla_{\theta} \log P_{\theta}(x)}. \end{aligned} 0∴0?=?θ?∫x?Pθ?(x)=∫x??θ?Pθ?(x)=∫x?Pθ?(x)?θ?logPθ?(x)=Ex~Pθ???θ?logPθ?(x).?
[1] 本文的作者沒有意識(shí)到在文獻(xiàn)中的任何地方都給該引理指定了標(biāo)準(zhǔn)名稱。 但是考慮到它出現(xiàn)的頻率,似乎很值得給它起一個(gè)名字以便于參考。
Don’t Let the Past Distract You
到現(xiàn)在的策略梯度的表達(dá)變成了:
?θJ(πθ)=Eτ~πθ∑t=0T?θlog?πθ(at∣st)R(τ).\nabla_{\theta} J(\pi_{\theta}) = E_{\tau \sim \pi_{\theta}}{\sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t) R(\tau)}. ?θ?J(πθ?)=Eτ~πθ??t=0∑T??θ?logπθ?(at?∣st?)R(τ).
在這個(gè)梯度上邁出一步,將每個(gè)動(dòng)作的對(duì)數(shù)概率與R(τ)R(\tau)R(τ)(曾經(jīng)獲得的所有獎(jiǎng)勵(lì)之和)成比例。 但這沒有多大意義。
代理實(shí)際上僅應(yīng)根據(jù)其“后果”加強(qiáng)行動(dòng)。 采取行動(dòng)之前獲得的獎(jiǎng)勵(lì)與行動(dòng)的好壞沒有關(guān)系:僅在“之后”獲得獎(jiǎng)勵(lì)。
事實(shí)證明,這種直覺體現(xiàn)在數(shù)學(xué)上,我們可以證明策略梯度也可以表示為
?θJ(πθ)=Eτ~πθ[∑t=0T?θlog?πθ(at∣st)∑t′=tTR(st′,at′,st′+1)].\nabla_{\theta} J(\pi_{\theta}) = E_{\tau \sim \pi_{\theta}} \bigg[{\sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t) \sum_{t'=t}^T R(s_{t'}, a_{t'}, s_{t'+1})}\bigg]. ?θ?J(πθ?)=Eτ~πθ??[t=0∑T??θ?logπθ?(at?∣st?)t′=t∑T?R(st′?,at′?,st′+1?)].
以這種形式,僅基于采取行動(dòng)后獲得的獎(jiǎng)勵(lì)來(lái)加強(qiáng)行動(dòng)。
我們稱這種形式為“未來(lái)獎(jiǎng)勵(lì)策略梯度”,因?yàn)檐壽E上某點(diǎn)之后的獎(jiǎng)勵(lì)總和,
R^t?∑t′=tTR(st′,at′,st′+1),\hat{R}_t \doteq \sum_{t'=t}^T R(s_{t'}, a_{t'}, s_{t'+1}), R^t??t′=t∑T?R(st′?,at′?,st′+1?),
這就是從 t 時(shí)刻起的“未來(lái)獎(jiǎng)勵(lì)”,而這種策略梯度表述取決于狀態(tài)動(dòng)作對(duì)的“未來(lái)獎(jiǎng)勵(lì)”。
但是,這會(huì)更好嗎? 策略梯度的關(guān)鍵問(wèn)題是需要多少個(gè)樣本軌跡才能獲得它們的低方差樣本估計(jì)。 我們從公式開始就包括了與過(guò)去的報(bào)酬成比例的加強(qiáng)行動(dòng)的條件,所有這些均值均值為零,但方差不為零:結(jié)果,它們只會(huì)給策略梯度的樣本估計(jì)值增加噪音。 通過(guò)刪除它們,我們減少了所需的樣本軌跡數(shù)量。
An (optional) proof of this claim can be found here, and it ultimately depends on the EGLP lemma.
Implementing Reward-to-Go Policy Gradient
We give a short Tensorflow implementation of the reward-to-go policy gradient in spinup/examples/pg_math/2_rtg_pg.py. (It can also be viewed on github <https://github.com/openai/spinningup/blob/master/spinup/examples/pg_math/2_rtg_pg.py>_.)
The only thing that has changed from 1_simple_pg.py is that we now use different weights in the loss function. The code modification is very slight: we add a new function, and change two other lines. The new function is:
def reward_to_go(rews):n = len(rews)rtgs = np.zeros_like(rews)for i in reversed(range(n)):rtgs[i] = rews[i] + (rtgs[i+1] if i+1 < n else 0)return rtgs然后我們從以下方法調(diào)整舊的L86-87,從:
# the weight for each logprob(a|s) is R(tau) batch_weights += [ep_ret] * ep_len到:
# the weight for each logprob(a_t|s_t) is reward-to-go from t batch_weights += list(reward_to_go(ep_rews))Baselines in Policy Gradients
EGLP引理的直接后果是,對(duì)于僅依賴狀態(tài)的任何函數(shù)bbb:
Eat~πθ?θlog?πθ(at∣st)b(st)=0.E_{a_t \sim \pi_{\theta}}{\nabla_{\theta} \log \pi_{\theta}(a_t|s_t) b(s_t)} = 0.Eat?~πθ???θ?logπθ?(at?∣st?)b(st?)=0.
這使我們能夠從我們的策略梯度表達(dá)式中添加或減去任何數(shù)量的這樣的術(shù)語(yǔ),而在期望中無(wú)需更改它:
?θJ(πθ)=Eτ~πθ[∑t=0T?θlog?πθ(at∣st)(∑t′=tTR(st′,at′,st′+1)?b(st))].\nabla_{\theta} J(\pi_{\theta}) =E_{\tau \sim \pi_{\theta}}\bigg[{\sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t) \left(\sum_{t'=t}^T R(s_{t'}, a_{t'}, s_{t'+1}) - b(s_t)\right)}\bigg]. ?θ?J(πθ?)=Eτ~πθ??[t=0∑T??θ?logπθ?(at?∣st?)(t′=t∑T?R(st′?,at′?,st′+1?)?b(st?))].
Any function b used in this way is called a baseline.
基準(zhǔn)的最常見選擇是策略價(jià)值函數(shù)Vπ(st)V^\pi(s_t)Vπ(st?). 這是從狀態(tài)sts_tst?開始,然后遵循策略π\(zhòng)piπ的代理所得到的平均回報(bào)。
根據(jù)經(jīng)驗(yàn),選擇b(st)=Vπ(st)b(s_t)=V^\pi(s_t)b(st?)=Vπ(st?)具有減少策略梯度樣本估計(jì)中方差的理想效果。這樣可以更快,更穩(wěn)定地學(xué)習(xí)策略。 從概念的角度來(lái)看,它也很吸引人:它編碼了一種直覺,即如果一個(gè)代理達(dá)到了預(yù)期,它將“感覺”到中立。
實(shí)際上,Vπ(st)V^\pi(s_t)Vπ(st?)不能夠準(zhǔn)確計(jì)算,所以它需要被近似。這通常用一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)近似,V?(st)V_\phi(s_t)V??(st?),它可以與策略同時(shí)被更新(這樣值網(wǎng)絡(luò)總是近似最近策略的值函數(shù))。
學(xué)習(xí)V?V_\phiV??的最簡(jiǎn)單的方法, 被用在在較多數(shù)策略優(yōu)化算法中(包括VPG,TRPO,PPO,A2C),是去最小化均方誤差項(xiàng):
?k=arg?min??Est,R^t~πk[(V?(st)?R^t)2],\phi_k = \arg \min_{\phi}E_{s_t, \hat{R}_t \sim \pi_k}\bigg[{\left( V_{\phi}(s_t) - \hat{R}_t \right)^2}\bigg], ?k?=arg?min?Est?,R^t?~πk??[(V??(st?)?R^t?)2],
其中πk\pi_kπk?是在第k個(gè)epoch的策略。這是從前一個(gè)值函數(shù)的參數(shù)?k?1\phi_{k-1}?k?1?,通過(guò)梯度下降的一個(gè)或多個(gè)步驟完成的.
Other Forms of the Policy Gradient
到目前為止,我們看到的是策略梯度具有一般形式:
?θJ(πθ)=Eτ~πθ∑t=0T?θlog?πθ(at∣st)Φt,\nabla_{\theta} J(\pi_{\theta}) = E_{\tau \sim \pi_{\theta}}{\sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a_t |s_t) \Phi_t}, ?θ?J(πθ?)=Eτ~πθ??t=0∑T??θ?logπθ?(at?∣st?)Φt?,
其中Φt\Phi_tΦt?可以任意的這些形式:
Φt=R(τ)\Phi_t = R(\tau)Φt?=R(τ)
or:
Φt=∑t′=tTR(st′,at′,st′+1),\Phi_t = \sum_{t'=t}^T R(s_{t'}, a_{t'}, s_{t'+1}), Φt?=t′=t∑T?R(st′?,at′?,st′+1?),
or:
Φt=∑t′=tTR(st′,at′,st′+1)?b(st).\Phi_t = \sum_{t'=t}^T R(s_{t'}, a_{t'}, s_{t'+1}) - b(s_t). Φt?=t′=t∑T?R(st′?,at′?,st′+1?)?b(st?).
盡管有不同的差異,所有這些選擇都會(huì)導(dǎo)致相同的策略梯度期望值。 事實(shí)證明,有兩個(gè)權(quán)重 Φt\Phi_tΦt? 很重要:
-
1.On-Policy Action-Value Function.
Φt=Qπθ(st,at)\Phi_t = Q^{\pi_{\theta}}(s_t, a_t)Φt?=Qπθ?(st?,at?) -
2. The Advantage Function.
回憶動(dòng)作的優(yōu)勢(shì)函數(shù), 定義為 Aπ(st,at)=Qπ(st,at)?Vπ(st)A^\pi(s_t,a_t) = Q^{\pi}(s_t,a_t) - V^{\pi}(s_t)Aπ(st?,at?)=Qπ(st?,at?)?Vπ(st?), (對(duì)于當(dāng)前的策略)描述平均地相對(duì)于其他動(dòng)作而言好還是壞。 這個(gè)選擇:Φt=Aπθ(st,at)\Phi_t = A^{\pi_{\theta}}(s_t, a_t)Φt?=Aπθ?(st?,at?)也是有效的, 證據(jù)是它相當(dāng)于使用Φt=Qπθ(st,at)\Phi_t=Q^{\pi_\theta(s_t,a_t)}Φt?=Qπθ?(st?,at?)然后再使用一個(gè)值函數(shù)的基準(zhǔn)。
具有優(yōu)勢(shì)函數(shù)的策略梯度的制定極為普遍,并且有許多不同的方法來(lái)估算不同算法所使用的優(yōu)勢(shì)函數(shù)。
要對(duì)此主題進(jìn)行更詳細(xì)的處理,您應(yīng)該閱讀有關(guān)廣義優(yōu)勢(shì)估計(jì)(GAE)的文章,該文章深入探討了背景部分中Φt\Phi_tΦt?的不同選擇。
然后,該論文繼續(xù)描述GAE,GAE是一種在策略優(yōu)化算法中具有廣泛用途的近似優(yōu)勢(shì)函數(shù)的方法。 例如,Spinning Up的VPG,TRPO和PPO的實(shí)現(xiàn)都利用了它。 因此,我們強(qiáng)烈建議您進(jìn)行研究。
Reference:
https://github.com/openai/spinningup
總結(jié)
以上是生活随笔為你收集整理的Policy Optimization-强化学习业界手册的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PolicyGradientMethod
- 下一篇: 强化学习核心文章一百篇