本文分享自華為云社區(qū)《MindSpore強化學(xué)習(xí):使用PPO配合環(huán)境HalfCheetah-v2進行訓(xùn)練》,作者: irrational。
半獵豹(Half Cheetah)是一個基于MuJoCo的強化學(xué)習(xí)環(huán)境,由P. Wawrzyński在“A Cat-Like Robot Real-Time Learning to Run”中提出。這個環(huán)境中的半獵豹是一個由9個鏈接和8個關(guān)節(jié)組成的2D機器人(包括兩個爪子)。在這個環(huán)境中,目標是通過施加扭矩在關(guān)節(jié)上使獵豹盡可能快地向前(向右)奔跑,正向獎勵基于前進的距離,而向后移動則會得到負向獎勵。獵豹的軀干和頭部是固定的,扭矩只能施加在前后大腿、小腿和腳上。
動作空間是一個Box(-1, 1, (6,), float32)
,其中每個動作代表鏈接之間的扭矩。觀察空間包含獵豹不同身體部位的位置值和速度值,其中所有位置值在前,所有速度值在后。默認情況下,觀察不包括獵豹質(zhì)心x坐標,可以通過在構(gòu)建時傳遞exclude_current_positions_from_observation=False
來包括它。如果包括,觀察空間將有18個維度,其中第一個維度代表獵豹質(zhì)心的x坐標。
獎勵分為兩部分:向前獎勵和控制成本。向前獎勵是根據(jù)動作前后x坐標的變化計算的,控制成本是為了懲罰獵豹采取過大動作的成本??偑剟钍窍蚯蔼剟顪p去控制成本。
每個狀態(tài)的開始是在狀態(tài)(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,)上添加噪聲以增加隨機性。前8個值是位置值,最后9個值是速度值。位置值添加均勻噪聲,而初始速度值(全為零)添加標準正態(tài)噪聲。
當(dāng)一個劇集的長度超過1000時,該劇集將被截斷。
該環(huán)境的詳細信息可以參考:https://www.gymlibrary.dev/environments/mujoco/half_cheetah/
這個比很多環(huán)境都要復(fù)雜。
不過沒關(guān)系,我們有ppo算法,這個算法可以跑強化學(xué)習(xí),甚至大語言模型。
PPO(Proximal Policy Optimization)算法是一種用于強化學(xué)習(xí)的策略優(yōu)化方法,它旨在解決傳統(tǒng)策略梯度方法(如TRPO,Trust Region Policy Optimization)中的信任區(qū)域問題
PPO算法通過引入clipping技巧和重要性采樣技巧來減少計算梯度時的方差,從而提高算法的收斂速度和穩(wěn)定性。
在PPO算法中,有兩個關(guān)鍵概念:
- 策略(Policy):策略是一個函數(shù),它定義了在給定狀態(tài)s時采取動作a的概率分布。
- 價值函數(shù)(Value Function):價值函數(shù)估計了在給定策略下,從狀態(tài)s出發(fā),到達某個特定狀態(tài)或終端時所能獲得的期望回報。
PPO算法的主要步驟包括:
- 采樣(Sampling):從當(dāng)前策略中采樣數(shù)據(jù),包括狀態(tài)、動作、獎勵和下一個狀態(tài)。
- 計算目標(Calculating Targets):使用目標策略計算目標價值函數(shù),并計算目標策略的KL散度。
- 更新策略(Updating Policy):使用重要性采樣技巧和clipping技巧更新策略。
- 更新價值函數(shù)(Updating Value Function):使用策略梯度方法更新價值函數(shù)。
PPO算法的核心思想是交替更新策略和價值函數(shù),以實現(xiàn)策略和價值的共同優(yōu)化。這種方法可以有效減少計算梯度時的方差,提高算法的收斂速度和穩(wěn)定性。
以下是PPO算法的一個簡化的Markdown公式:# Proximal Policy Optimization (PPO) Algorithm ## 1. Sampling 采樣當(dāng)前策略的數(shù)據(jù),包括狀態(tài) $ s $、動作 $ a $、獎勵 $ r $ 和下一個狀態(tài) $ s' $。 ## 2. Calculating Targets 使用目標策略計算目標價值函數(shù),并計算目標策略的KL散度。 ## 3. Updating Policy 使用重要性采樣技巧和clipping技巧更新策略。 ## 4. Updating Value Function 使用策略梯度方法更新價值函數(shù)。 ## 重復(fù)步驟1-4,實現(xiàn)策略和價值的共同優(yōu)化。
這個公式是一個簡化的版本,實際上PPO算法還包括了許多其他細節(jié)和技巧,如經(jīng)驗回放、動態(tài)調(diào)整學(xué)習(xí)率等。
import argparse import os from mindspore import context from mindspore import dtype as mstype from mindspore.communication import get_rank, init import mindspore_rl.distribution.distribution_policies as DP from mindspore_rl.algorithm.ppo import config from mindspore_rl.algorithm.ppo.ppo_session import PPOSession from mindspore_rl.algorithm.ppo.ppo_trainer import PPOTrainer parser = argparse.ArgumentParser(description="MindSpore Reinforcement PPO") parser.add_argument("--episode", type=int, default=650, help="total episode numbers.") parser.add_argument( "--device_target", type=str, default="Auto", choices=["Ascend", "CPU", "GPU", "Auto"], help="Choose a device to run the ppo example(Default: Auto).", ) parser.add_argument( "--precision_mode", type=str, default="fp32", choices=["fp32", "fp16"], help="Precision mode", ) parser.add_argument( "--env_yaml", type=str, default="../env_yaml/HalfCheetah-v2.yaml", help="Choose an environment yaml to update the ppo example(Default: HalfCheetah-v2.yaml).", ) parser.add_argument( "--algo_yaml", type=str, default=None, help="Choose an algo yaml to update the ppo example(Default: None).", ) parser.add_argument( "--enable_distribute", type=bool, default=False, help="Train in distribute mode (Default: False).", ) parser.add_argument( "--worker_num", type=int, default=2, help="Worker num (Default: 2)." ) parser.add_argument( "--graph_op_run", type=int, default=1, help="Run kernel by kernel (Default: 1)." ) options, _ = parser.parse_known_args()`
wget https://www.roboti.us/download/mujoco200_linux.zip mv mujoco200_linux ~/.mujoco/mujoco200 wget https://www.roboti.us/file/mjkey.txt cp mjkey.txt /home/kewei/.mujoco/mjkey.txt wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/p/patchelf-0.12-1.el7.x86_64.rpm yum localinstall patchelf-0.12-1.el7.x86_64.rpm pip install 'mujoco_py==2.0.2.13'
第一次編譯mujoco會有一點久
在bashrc加入如下內(nèi)容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco200/bin export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH} export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/kewei/.mujoco/mujoco210/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
然后就可以開啟訓(xùn)練了。使用上一節(jié)的with保留輸入。
# dqn_session.run(class_type=DQNTrainer, episode=episode) with RealTimeCaptureAndDisplayOutput() as captured_new: ppo_session.run(class_type=PPOTrainer, episode=episode, duration=duration)
?文章來源地址http://www.zghlxwxcb.cn/news/detail-861845.html
點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~文章來源:http://www.zghlxwxcb.cn/news/detail-861845.html
?
到了這里,關(guān)于MindSpore強化學(xué)習(xí):使用PPO配合環(huán)境HalfCheetah-v2進行訓(xùn)練的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!