OpenAI Gym學(xué)習(xí)(三):Mujoco訓(xùn)練REINFORCE(一種早期的策略梯度方法)
MuJoCo是一個(gè)免費(fèi)開源的物理引擎,旨在促進(jìn)機(jī)器人、生物力學(xué)、圖形和動(dòng)畫以及其他需要快速準(zhǔn)確模擬的領(lǐng)域的研究和開發(fā)。
MuJoCo提供了速度、精度和建模能力的獨(dú)特組合,但它不僅僅是一個(gè)更好的模擬器。相反,它是第一個(gè)從頭開始設(shè)計(jì)的全功能模擬器,用于基于模型的優(yōu)化,特別是通過接觸進(jìn)行優(yōu)化。
MuJoCo使優(yōu)化控制、物理一致狀態(tài)估計(jì)、系統(tǒng)識(shí)別和自動(dòng)機(jī)構(gòu)設(shè)計(jì)等計(jì)算密集型技術(shù)得以擴(kuò)展,并將其應(yīng)用于具有豐富接觸行為的復(fù)雜動(dòng)力系統(tǒng)。它還具有更傳統(tǒng)的應(yīng)用,如在物理機(jī)器人上部署之前測(cè)試和驗(yàn)證控制方案、交互式科學(xué)可視化、虛擬環(huán)境、動(dòng)畫和游戲。
本教程有兩個(gè)目的:
1、了解如何從零開始實(shí)現(xiàn)強(qiáng)化學(xué)習(xí)算法以解決Mujoco的倒立式InvertedPendulum-v4
2、利用Gymnasium v0.26+step()函數(shù)實(shí)現(xiàn)深度強(qiáng)化學(xué)習(xí)算法
我們將使用最早的策略梯度方法之一。與先學(xué)習(xí)一個(gè)價(jià)值函數(shù),然后從中推導(dǎo)出一個(gè)策略不同,REINFORCE直接優(yōu)化了策略。換句話說,它被訓(xùn)練為最大化蒙特卡洛回歸的概率。稍后會(huì)詳細(xì)介紹。
Inverted Pendulum倒立擺是Mujoco版本的cartpole,但現(xiàn)在由Mujoco物理模擬器驅(qū)動(dòng),該模擬器可以進(jìn)行更復(fù)雜的實(shí)驗(yàn)(例如改變重力的影響)。這種環(huán)境包括一個(gè)可以線性移動(dòng)的推車(Cart),一端固定一根桿子,另一端自由。推車(Cart)可以向左或向右推動(dòng),目的是通過在推車上施加力來平衡推車頂部的桿子。有關(guān)環(huán)境的更多信息,請(qǐng)?jiān)L問https://gymnasium.farama.org/environments/mujoco/inverted_pendulum/
Training Objectives:平衡推車頂部的桿(倒立擺)
Action:agent采用1D矢量進(jìn)行動(dòng)作。動(dòng)作空間是[-3,3]中的連續(xù)(動(dòng)作),其中動(dòng)作表示施加到推車上的數(shù)值力(大小表示力的大小,符號(hào)表示方向)
Approach,方法:我們使用PyTorch從頭開始對(duì)REINFORCE進(jìn)行編碼,以訓(xùn)練掌握倒立擺的神經(jīng)網(wǎng)絡(luò)策略。
Gymnasium v0.26+Env.step()函數(shù)的一個(gè)解釋
step(A)允許我們?cè)诋?dāng)前環(huán)境“env”中執(zhí)行操作“A”。然后,環(huán)境執(zhí)行該操作并返回五個(gè)變量:
next_obs
: 這是代理在執(zhí)行操作后將收到的觀察結(jié)果。reward
: 這是代理在執(zhí)行操作后將收到的觀察結(jié)果。terminated
: 這是一個(gè)布爾變量,指示環(huán)境是否已終止truncated
: 這是一個(gè)布爾變量,還指示事件是否以提前截?cái)嘟Y(jié)束,即達(dá)到時(shí)間限制。info
: 這是一個(gè)字典,可能包含有關(guān)環(huán)境的其他信息。
Policy Network

我們首先建立一個(gè)策略,代理將使用鋼筋學(xué)習(xí)。策略是從當(dāng)前環(huán)境觀察到要采取的行動(dòng)的概率分布的映射。教程中使用的策略由神經(jīng)網(wǎng)絡(luò)參數(shù)化。它由兩個(gè)線性層組成,在預(yù)測(cè)平均值和標(biāo)準(zhǔn)差之間共享。此外,使用單個(gè)單獨(dú)的線性層來估計(jì)平均值和標(biāo)準(zhǔn)偏差。Tanh被用作隱藏層之間的非線性算子。以下函數(shù)估計(jì)正態(tài)分布的平均值和標(biāo)準(zhǔn)偏差,從中對(duì)動(dòng)作進(jìn)行采樣。因此,預(yù)計(jì)該政策將根據(jù)當(dāng)前觀察結(jié)果學(xué)習(xí)輸出均值和標(biāo)準(zhǔn)差的適當(dāng)權(quán)重。
Building an agent

既然我們已經(jīng)完成了策略的制定,讓我們開發(fā)增強(qiáng)型,為策略網(wǎng)絡(luò)注入活力。REINFORCE的算法可以在上面找到。如前所述,REINFORCE旨在最大化蒙特卡洛回報(bào)。
有趣的事實(shí):REINFOCE是“RE”ward“I increment”N on negative“F”actor times“O’ffset”R“inforcement times”C“haracteristic”E“igibility”的縮寫
注意:超參數(shù)的選擇是為了訓(xùn)練一個(gè)性能良好的agent。沒有進(jìn)行廣泛的超參數(shù)調(diào)整。
現(xiàn)在讓我們使用REINFORCE來訓(xùn)練策略來掌握倒立擺的任務(wù)。
以下是訓(xùn)練程序的概覽
注意:在許多常見的用例中,Deep RL在隨機(jī)種子方面相當(dāng)脆弱(https://spinningup.openai.com/en/latest/spinningup/spinningup.html)。因此,測(cè)試各種種子是很重要的,我們將要這樣做。
Plot learning curve

License: MIT License
References
[1] Williams, Ronald J.. “Simple statistical gradient-following algorithms for connectionist reinforcement learning.” Machine Learning 8 (2004): 229-256.