使用Panda-Gym的機器臂模擬進行Deep Q-learning強化學(xué)習(xí)
強化學(xué)習(xí)(RL)是一種機器學(xué)習(xí)方法,它允許代理通過試錯來學(xué)習(xí)如何在環(huán)境中表現(xiàn)。行為主體因采取行動導(dǎo)致預(yù)期結(jié)果而獲得獎勵,因采取行動導(dǎo)致預(yù)期結(jié)果而受到懲罰。隨著時間的推移,代理學(xué)會采取行動,使其預(yù)期回報最大化。

RL代理通常使用馬爾可夫決策過程(MDP)進行訓(xùn)練,馬爾可夫決策過程是為順序決策問題建模的數(shù)學(xué)框架。MDP由四個部分組成:
- 狀態(tài):環(huán)境的可能狀態(tài)的集合。
 - 動作:代理可以采取的一組動作。
 - 轉(zhuǎn)換函數(shù):在給定當前狀態(tài)和動作的情況下,預(yù)測轉(zhuǎn)換到新狀態(tài)的概率的函數(shù)。
 - 獎勵函數(shù):為每次轉(zhuǎn)換分配獎勵給代理的函數(shù)。
 
代理的目標是學(xué)習(xí)策略函數(shù),將狀態(tài)映射到動作。通過策略函數(shù)來最大化代理隨著時間的預(yù)期回報。
Deep Q-learning是一種使用深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)策略函數(shù)的強化學(xué)習(xí)算法。深度神經(jīng)網(wǎng)絡(luò)將當前狀態(tài)作為輸入,并輸出一個值向量,每個值代表一個可能的動作。然后代理采取具有最高值的操作。
Deep Q-learning是一種基于值的強化學(xué)習(xí)算法,這意味著它學(xué)習(xí)每個狀態(tài)-動作對的值。狀態(tài)-動作對的值是agent在該狀態(tài)下采取該動作所獲得的預(yù)期獎勵。
Actor-Critic是一種結(jié)合了基于值和基于策略的RL算法。有兩個組成部分:
- Actor:參與者負責(zé)選擇操作。
 - Critic:負責(zé)評價Actor的行為。
 
Actor和Critic同時接受訓(xùn)練。Actor被訓(xùn)練去最大化預(yù)期獎勵,Critic被訓(xùn)練去準確地預(yù)測每個狀態(tài)-動作對的預(yù)期獎勵。
Actor-Critic算法與其他RL算法相比有幾個優(yōu)點。首先它更穩(wěn)定,這意味著在訓(xùn)練過程中不太可能出現(xiàn)偏差。其次它更有效率,這意味著它可以更快地學(xué)習(xí)。第三它更具可擴展性,這意味著它可以應(yīng)用于具有大型狀態(tài)和操作空間的問題。
下面的表格總結(jié)了Deep Q-learning和Actor-Critic之間的主要區(qū)別:

Actor-Critic (A2C)的優(yōu)勢
Actor-Critic是一種流行的強化學(xué)習(xí)架構(gòu),它結(jié)合了基于策略和基于價值的方法。它有幾個優(yōu)點,使其成為解決各種強化學(xué)習(xí)任務(wù)的強大選擇:
1、低方差
與傳統(tǒng)的策略梯度方法相比,A2C 在訓(xùn)練期間通常具有更低的方差。這是因為 A2C 同時使用了策略梯度和值函數(shù),通過值函數(shù)來減小梯度的方差。低方差意味著訓(xùn)練過程更加穩(wěn)定,能夠更快地收斂到較好的策略。
2、更快的學(xué)習(xí)速度
由于低方差的特性,A2C 通常能夠以更快的速度學(xué)習(xí)到一個良好的策略。這對于那些需要進行大量模擬的任務(wù)來說尤為重要,因為較快的學(xué)習(xí)速度可以節(jié)省寶貴的時間和計算資源。
3、結(jié)合策略和值函數(shù)
A2C 的一個顯著特點是它同時學(xué)習(xí)策略和值函數(shù)。這種結(jié)合使得代理能夠更好地理解環(huán)境和動作的關(guān)聯(lián),從而更好地指導(dǎo)策略改進。值函數(shù)的存在還有助于減小策略優(yōu)化中的誤差,提高訓(xùn)練的效率。
4、支持連續(xù)和離散動作空間
A2C 可以輕松適應(yīng)不同類型的動作空間,包括連續(xù)和離散動作。這種通用性使得 A2C 成為一個廣泛適用的強化學(xué)習(xí)算法,可以應(yīng)用于各種任務(wù),從機器人控制到游戲玩法優(yōu)化。
5、并行訓(xùn)練
A2C 可以輕松地并行化,充分利用多核處理器和分布式計算資源。這意味著可以在更短的時間內(nèi)收集更多的經(jīng)驗數(shù)據(jù),從而提高訓(xùn)練效率。
雖然Actor-Critic方法提供了一些優(yōu)勢,但它們也有自己的挑戰(zhàn),例如超參數(shù)調(diào)優(yōu)和訓(xùn)練中的潛在不穩(wěn)定性。但是通過適當?shù)恼{(diào)整和經(jīng)驗回放和目標網(wǎng)絡(luò)等技術(shù),這些挑戰(zhàn)可以在很大程度上得到緩解,使Actor-Critic成為強化學(xué)習(xí)中有價值的方法。

panda-gym
panda-gym 基于 PyBullet 引擎開發(fā),圍繞 panda 機械臂封裝了 reach、push、slide、pick&place、stack、flip 等 6 個任務(wù),主要也是受 OpenAI Fetch 啟發(fā)。

我們下面的代碼將使用panda-gym作為示例:
1、安裝庫
代碼首先初始化強化學(xué)習(xí)環(huán)境:
!apt-get install -y \
    libgl1-mesa-dev \
    libgl1-mesa-glx \
    libglew-dev \
    xvfb \
    libosmesa6-dev \
    software-properties-common \
    patchelf
 
 !pip install \
    free-mujoco-py \
    pytorch-lightning \
    optuna \
    pyvirtualdisplay \
    PyOpenGL \
    PyOpenGL-accelerate\
    stable-baselines3[extra] \
    gymnasium \
    huggingface_sb3 \
    huggingface_hub \ 
    panda_gym2、導(dǎo)入庫
import os
 
 import gymnasium as gym
 import panda_gym
 
 from huggingface_sb3 import load_from_hub, package_to_hub
 
 from stable_baselines3 import A2C
 from stable_baselines3.common.evaluation import evaluate_policy
 from stable_baselines3.common.vec_env import DummyVecEnv, VecNormalize
 from stable_baselines3.common.env_util import make_vec_env3、創(chuàng)建運行環(huán)境
env_id = "PandaReachDense-v3"
 
 # Create the env
 env = gym.make(env_id)
 
 # Get the state space and action space
 s_size = env.observation_space.shape
 a_size = env.action_space
 
 print("\n _____ACTION SPACE_____ \n")
 print("The Action Space is: ", a_size)
 print("Action Space Sample", env.action_space.sample()) # Take a random action4、觀察和獎勵的規(guī)范化
強化學(xué)習(xí)優(yōu)化的一個好方法是對輸入特征進行歸一化。我們通過包裝器計算輸入特征的運行平均值和標準偏差。同時還通過添加norm_reward = True來規(guī)范化獎勵
env = make_vec_env(env_id, n_envs=4)
 
 env = VecNormalize(env, norm_obs=True, norm_reward=True, clip_obs=10.)5、創(chuàng)建A2C模型
我們使用Stable-Baselines3團隊訓(xùn)練過的官方代理
model = A2C(policy = "MultiInputPolicy",
            env = env,
            verbose=1)6、訓(xùn)練A2C
model.learn(1_000_000)
 
 # Save the model and VecNormalize statistics when saving the agent
 model.save("a2c-PandaReachDense-v3")
 env.save("vec_normalize.pkl")7、評估代理
from stable_baselines3.common.vec_env import DummyVecEnv, VecNormalize
 
 # Load the saved statistics
 eval_env = DummyVecEnv([lambda: gym.make("PandaReachDense-v3")])
 eval_env = VecNormalize.load("vec_normalize.pkl", eval_env)
 
 # We need to override the render_mode
 eval_env.render_mode = "rgb_array"
 
 # do not update them at test time
 eval_env.training = False
 # reward normalization is not needed at test time
 eval_env.norm_reward = False
 
 # Load the agent
 model = A2C.load("a2c-PandaReachDense-v3")
 
 mean_reward, std_reward = evaluate_policy(model, eval_env)
 
 print(f"Mean reward = {mean_reward:.2f} +/- {std_reward:.2f}")總結(jié)
在“panda-gym”將Panda機械臂和GYM環(huán)境有效的結(jié)合使得我們可以輕松的在本地進行機械臂的強化學(xué)習(xí),Actor-Critic架構(gòu)中代理會學(xué)會在每個時間步驟中進行漸進式改進,這與稀疏的獎勵函數(shù)形成對比(在稀疏的獎勵函數(shù)中結(jié)果是二元的),這使得Actor-Critic方法特別適合于此類任務(wù)。
通過將策略學(xué)習(xí)和值估計無縫結(jié)合,代理能夠熟練地操縱機械臂末端執(zhí)行器到達指定的目標位置。這不僅為機器人控制等任務(wù)提供了實用的解決方案,而且還具有改變各種需要敏捷和明智決策的領(lǐng)域的潛力。















 
 
 
















 
 
 
 