強化學習(RL)是一種機器學習方法,它允許代理人透過試誤來學習如何在環境中表現。行為主體會因為採取行動導致預期結果而獲得獎勵或懲罰。隨著時間的推移,代理人會學會採取行動,以使得其預期回報最大化
#RL代理通常使用馬可夫決策過程( MDP)進行訓練,MDP是為順序決策問題建模的數學架構。 MDP由四個部分組成:
代理程式的目標是學習策略函數,將狀態對應到動作。透過策略函數來最大化代理隨著時間的預期回報。
Deep Q-learning是一種使用深度神經網路學習策略函數的強化學習演算法。深度神經網路以當前狀態作為輸入,並輸出一個值向量,其中每個值代表一個可能的動作。然後代理根據具有最高值的操作進行採取
Deep Q-learning是一種基於值的強化學習演算法,這意味著它學習每個狀態-動作對的值。狀態-動作對的值是agent在該狀態下採取該動作所獲得的預期獎勵。
Actor-Critic是一種結合了基於值和基於策略的RL演算法。有兩個組成部分:
Actor:參與者負責選擇操作。
Critic:負責評價Actor的行為。
演員和評論家同時接受訓練。演員接受培訓以最大化預期獎勵,評論家接受培訓以準確預測每個狀態-動作對的預期獎勵
Actor-Critic演算法相對於其他強化學習演算法有幾個優點。首先,它更加穩定,這意味著在訓練過程中不太可能出現偏差。其次,它更加高效,這意味著它可以更快地學習。第三,它具有更好的可擴展性,可以應用於具有大型狀態和操作空間的問題
#下面的表格總結了Deep Q-learning和Actor-Critic之間的主要差異:
## 演員-評論家是一種受歡迎的強化學習體系結構,它結合了基於策略和基於價值的方法。它有許多優點,使其成為解決各種強化學習任務的強有力的選擇:
相較於傳統的策略梯度方法,A2C 在訓練過程中通常具有較低的變異數。這是因為 A2C 同時使用了策略梯度和值函數,在梯度的計算中利用值函數來降低變異數。低方差表示訓練過程更穩定,能夠更快收斂到更優的策略
由於低方差的特性,A2C 通常能夠以更快的速度學習到一個好的策略。這對於需要進行大量模擬的任務來說尤其重要,因為較快的學習速度可以節省寶貴的時間和計算資源。
A2C 的一個顯著特徵是它同時學習策略和值函數。這種結合使得代理人能夠更好地理解環境和動作的關聯,從而更好地指導策略改進。值函數的存在也有助於減小策略最佳化中的誤差,並提高訓練的效率。
#A2C 可以適應不同類型的動作空間,包括連續和離散動作,而且非常通用。這就使得A2C 成為一個廣泛適用的強化學習演算法,可以應用於各種任務,從機器人控製到遊戲玩法最佳化
A2C 可以輕鬆地並行化,充分利用多核心處理器和分散式運算資源。這意味著可以在更短的時間內收集更多的經驗數據,從而提高訓練效率。
儘管Actor-Critic方法具有一些優勢,但是它們也面臨一些挑戰,例如超參數調優和訓練中的潛在不穩定性。然而,透過適當的調整以及經驗回放和目標網路等技術,這些挑戰可以在很大程度上得到緩解,使得Actor-Critic成為強化學習中有價值的方法
#panda-gym 基於PyBullet 引擎開發,圍繞panda 機械手臂封裝了reach、push、slide、 pick&place、stack、flip 等6 個任務,主要也是受OpenAI Fetch 啟發。
我們將使用panda-gym作為範例來展示下面的程式碼
首先,我們需要初始化強化學習環境的程式碼:
!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_gym
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_env
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 action
強化學習最佳化的一個好方法是對輸入特徵進行歸一化。我們透過包裝器計算輸入特徵的運行平均值和標準差。同時也透過加入norm_reward = True來規範化獎勵
env = make_vec_env(env_id, n_envs=4) env = VecNormalize(env, norm_obs=True, norm_reward=True, clip_obs=10.)
##我們使用Stable-Baselines3團隊訓練過的官方代理
model = A2C(policy = "MultiInputPolicy",env = env,verbose=1)
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")
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}")
在「panda-gym」將Panda機械手臂和GYM環境有效的結合使得我們可以輕鬆的在本地進行機械手臂的強化學習,
##Actor-Critic架構中代理會學會在每個時間步驟中進行漸進式改進,這與稀疏的獎勵函數形成對比(在稀疏的獎勵函數中結果是二元的),這使得Actor-Critic方法特別適合於此類任務。透過無縫結合策略學習和值估計,機器人代理程式能夠熟練地操縱機械手臂末端執行器,準確地到達指定的目標位置。這不僅為機器人控制等任務提供了實用的解決方案,還具有改變各種需要敏捷和明智決策的領域的潛力
以上是使用Panda-Gym的機器臂模擬實現Deep Q-learning強化學習的詳細內容。更多資訊請關注PHP中文網其他相關文章!