深度強化學習課程文件

訓練你的第一個深度強化學習智慧體 🤖

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

訓練你的第一個深度強化學習智慧體 🤖

Ask a Question Open In Colab

現在你已經學習了強化學習的基礎知識,你已經準備好訓練你的第一個智慧體並透過 Hub 🔥 分享給社群:一個月球著陸器智慧體,它將學習正確降落在月球上 🌕

LunarLander

最後,你將把這個訓練好的智慧體上傳到 Hugging Face Hub 🤗,這是一個免費、開放的平臺,人們可以在其中共享機器學習模型、資料集和演示。

透過我們的排行榜,你將能夠將你的結果與其他同學進行比較,並交流最佳實踐以提高你的智慧體得分。誰將贏得第一單元的挑戰 🏆?

為了驗證本次實踐並符合認證流程,你需要將訓練好的模型推送到 Hub,並獲得 >= 200 的結果

要檢視你的結果,請訪問排行榜,找到你的模型,**結果 = 平均獎勵 - 獎勵標準差**

如果你沒有找到你的模型,請滾動到頁面底部並點選重新整理按鈕。

有關認證流程的更多資訊,請檢視此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process

你可以在這裡檢視你的進度 👉 https://huggingface.co/spaces/ThomasSimonini/Check-my-progress-Deep-RL-Course

那麼,我們開始吧!🚀

要開始實踐,請點選“在 Colab 中開啟”按鈕 👇

Open In Colab

我們強烈**建議學生使用 Google Colab 進行實踐練習**,而不是在個人電腦上執行。

使用 Google Colab,**您可以專注於學習和實驗,而無需擔心環境設定的技術問題。**

單元 1:訓練你的第一個深度強化學習智慧體 🤖

Unit 1 thumbnail

在本筆記本中,你將訓練你的第一個深度強化學習智慧體,一個月球著陸器智慧體,它將學習正確降落在月球上 🌕。使用Stable-Baselines3,一個深度強化學習庫,與社群分享它們,並嘗試不同的配置

環境 🎮

使用的庫 📚

我們一直在努力改進我們的教程,因此,如果你在此筆記本中發現任何問題,請在 Github Repo 上提交問題

本筆記本的目標 🏆

在本筆記本結束時,您將:

  • 能夠使用Gymnasium,環境庫。
  • 能夠使用Stable-Baselines3,深度強化學習庫。
  • 能夠將訓練好的智慧體以精美影片回放和評估分數的推送到 Hub 🔥。

本筆記本來自深度強化學習課程

Deep RL Course illustration

在這門免費課程中,你將:

  • 📖 **理論與實踐**地學習深度強化學習。
  • 🧑‍💻 學習使用著名的深度強化學習庫,如 Stable Baselines3、RL Baselines3 Zoo、CleanRL 和 Sample Factory 2.0。
  • 🤖 在獨特環境中訓練智慧體
  • 🎓 完成 80% 的作業,即可獲得結業證書

以及更多!

檢視 📚 課程大綱 👉 https://simoninithomas.github.io/deep-rl-course

別忘了註冊課程(我們正在收集你的電子郵件,以便在每個單元釋出時向你傳送連結並提供有關挑戰和更新的資訊)。

保持聯絡和提問的最佳方式是加入我們的 Discord 伺服器,與社群和我們交流 👉🏻 https://discord.gg/ydHrjt3WP5

先決條件 🏗️

在深入學習本筆記本之前,您需要:

🔲 📝 閱讀單元 0,其中包含所有課程資訊並幫助你入門 🤗

🔲 📚 透過閱讀單元 1瞭解強化學習的基礎知識(MC、TD、獎勵假設……)。

深度強化學習小結 📚

The RL process

讓我們來回顧一下第一單元所學的內容

  • 強化學習是一種從行動中學習的計算方法。我們透過試錯與環境互動,並接收獎勵(負面或正面)作為反饋,從而構建一個從環境中學習的智慧體。

  • 任何強化學習智慧體的目標都是最大化其預期累積獎勵(也稱為預期回報),因為強化學習基於“獎勵假說”,即所有目標都可以描述為預期累積獎勵的最大化。

  • 強化學習過程是一個迴圈,輸出狀態、動作、獎勵和下一個狀態的序列

  • 為了計算預期的累積獎勵(預期回報),我們會對獎勵進行折現:較早(遊戲開始時)發生的獎勵更有可能發生,因為它們比長期未來獎勵更可預測。

  • 要解決強化學習問題,你需要找到一個最優策略;策略是你的 AI 的“大腦”,它會告訴我們給定一個狀態時要採取什麼行動。最優策略是能讓你採取最大化預期回報的行動。

有兩種方法可以找到你的最優策略

  • 透過直接訓練你的策略:基於策略的方法。

  • 透過訓練一個價值函式,該函式會告訴我們智慧體在每個狀態下將獲得的預期回報,並使用此函式來定義我們的策略:基於價值的方法。

  • 最後,我們討論了深度強化學習,因為我們引入了深度神經網路來估計要採取的行動(基於策略)或估計狀態的價值(基於價值),因此得名“深度”

讓我們訓練我們的第一個深度強化學習智慧體並將其上傳到 Hub 🚀

獲得證書 🎓

為了驗證本次實踐並符合認證流程,你需要將訓練好的模型推送到 Hub,並獲得 >= 200 的結果

要檢視你的結果,請訪問排行榜,找到你的模型,**結果 = 平均獎勵 - 獎勵標準差**

有關認證流程的更多資訊,請檢視此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process

設定 GPU 💪

  • 為了加速智慧體的訓練,我們將使用 GPU。為此,請轉到 Runtime > Change Runtime type
GPU Step 1
  • 硬體加速器 > GPU
GPU Step 2

安裝依賴並建立虛擬螢幕 🔽

第一步是安裝依賴項,我們將安裝多個依賴項。

  • gymnasium[box2d]: 包含 LunarLander-v2 環境 🌛
  • stable-baselines3[extra]: 深度強化學習庫。
  • huggingface_sb3: Stable-baselines3 的額外程式碼,用於從 Hugging Face 🤗 Hub 載入和上傳模型。

為了方便起見,我們建立了一個指令碼來安裝所有這些依賴項。

apt install swig cmake
pip install -r https://raw.githubusercontent.com/huggingface/deep-rl-class/main/notebooks/unit1/requirements-unit1.txt

在筆記本中,我們需要生成一個重播影片。為此,在 Colab 中,**我們需要一個虛擬螢幕才能渲染環境**(從而錄製幀)。

因此,以下單元格將安裝虛擬螢幕庫並建立和執行虛擬螢幕 🖥

sudo apt-get update
apt install python3-opengl
apt install ffmpeg
apt install xvfb
pip3 install pyvirtualdisplay

為了確保使用新安裝的庫,有時需要重啟筆記本執行時。下一個單元格將強制執行時崩潰,因此你需要重新連線並從這裡開始執行程式碼。透過這個技巧,我們將能夠執行我們的虛擬螢幕。

import os

os.kill(os.getpid(), 9)
# Virtual display
from pyvirtualdisplay import Display

virtual_display = Display(visible=0, size=(1400, 900))
virtual_display.start()

匯入包 📦

我們匯入的另一個庫是 huggingface_hub,能夠從 hub 上傳和下載訓練好的模型

Hugging Face Hub 🤗 作為一箇中心平臺,任何人都可以共享和探索模型和資料集。它具有版本控制、度量、視覺化和其他功能,可以讓你輕鬆地與他人協作。

你可以在這裡檢視所有可用的深度強化學習模型👉 https://huggingface.co/models?pipeline_tag=reinforcement-learning&sort=downloads

import gymnasium

from huggingface_sb3 import load_from_hub, package_to_hub
from huggingface_hub import (
    notebook_login,
)  # To log to our Hugging Face account to be able to upload models to the Hub.

from stable_baselines3 import PPO
from stable_baselines3.common.env_util import make_vec_env
from stable_baselines3.common.evaluation import evaluate_policy
from stable_baselines3.common.monitor import Monitor

瞭解 Gymnasium 及其工作原理 🤖

🏋 包含我們環境的庫叫做 Gymnasium。你將在深度強化學習中大量使用 Gymnasium。

Gymnasium 是 由 Farama Foundation 維護的 Gym 庫的新版本。

Gymnasium 庫提供兩件事

  • 一個允許你建立強化學習環境的介面。
  • 環境集合(gym-control、atari、box2D……)。

讓我們看一個例子,但首先我們回顧一下強化學習迴圈。

The RL process

每一步

  • 我們的智慧體從環境中接收到一個狀態(S0)——我們接收到遊戲(環境)的第一幀。
  • 基於那個狀態(S0),智慧體採取一個動作(A0)——我們的智慧體將向右移動。
  • 環境轉換到新狀態(S1)——新幀。
  • 環境給智慧體一些獎勵(R1)——我們沒死(正面獎勵 +1)

使用 Gymnasium

1️⃣ 我們使用 gymnasium.make() 建立環境

2️⃣ 我們使用 observation = env.reset() 將環境重置為初始狀態

每一步

3️⃣ 使用我們的模型獲取一個動作(在我們的示例中,我們採取一個隨機動作)

4️⃣ 使用 env.step(action),我們在環境中執行此動作並獲得

  • observation:新狀態 (st+1)
  • reward:執行動作後獲得的獎勵
  • terminated:指示回合是否終止(智慧體是否達到終止狀態)
  • truncated:此新版本引入,表示時間限制或智慧體是否超出環境邊界。
  • info:一個提供額外資訊的字典(取決於環境)。

更多解釋請檢視 👉 https://gymnasium.llms.tw/api/env/#gymnasium.Env.step

如果回合終止

  • 我們使用 observation = env.reset() 將環境重置為初始狀態

讓我們來看一個例子!請務必閱讀程式碼

import gymnasium as gym

# First, we create our environment called LunarLander-v2
env = gym.make("LunarLander-v2")

# Then we reset this environment
observation, info = env.reset()

for _ in range(20):
    # Take a random action
    action = env.action_space.sample()
    print("Action taken:", action)

    # Do this action in the environment and get
    # next_state, reward, terminated, truncated and info
    observation, reward, terminated, truncated, info = env.step(action)

    # If the game is terminated (in our case we land, crashed) or truncated (timeout)
    if terminated or truncated:
        # Reset the environment
        print("Environment is reset")
        observation, info = env.reset()

env.close()

建立 LunarLander 環境 🌛 並瞭解其工作原理

環境 🎮

在第一個教程中,我們將訓練我們的智慧體,一個月球著陸器使其正確降落在月球上。為此,智慧體需要學習調整其速度和位置(水平、垂直和角度)才能正確著陸。


💡 開始使用環境時的一個好習慣是檢視其文件

👉 https://gymnasium.llms.tw/environments/box2d/lunar_lander/


讓我們看看環境長什麼樣

# We create our environment with gym.make("<name_of_the_environment>")
env = gym.make("LunarLander-v2")
env.reset()
print("_____OBSERVATION SPACE_____ \n")
print("Observation Space Shape", env.observation_space.shape)
print("Sample observation", env.observation_space.sample())  # Get a random observation

我們看到,Observation Space Shape (8,) 表示觀測是一個大小為 8 的向量,其中每個值包含有關著陸器的不同資訊

  • 水平墊座標 (x)
  • 垂直墊座標 (y)
  • 水平速度 (x)
  • 垂直速度 (y)
  • 角度
  • 角速度
  • 左腿接觸點是否接觸地面(布林值)
  • 右腿接觸點是否接觸地面(布林值)
print("\n _____ACTION SPACE_____ \n")
print("Action Space Shape", env.action_space.n)
print("Action Space Sample", env.action_space.sample())  # Take a random action

動作空間(智慧體可以採取的可能動作集)是離散的,有 4 個可用動作 🎮

  • 動作 0:什麼都不做,
  • 動作 1:啟動左側方向引擎,
  • 動作 2:啟動主引擎,
  • 動作 3:啟動右側方向引擎。

獎勵函式(在每個時間步給予獎勵的函式)💰

每一步後都會獲得獎勵。一個回合的總獎勵是該回合內所有步驟的獎勵之和

對於每一步,獎勵

  • 著陸器距離著陸墊越近/越遠,獎勵增加/減少。
  • 著陸器移動越慢/越快,獎勵增加/減少。
  • 著陸器傾斜度越大(角度不水平),獎勵減少。
  • 每條腿接觸地面,獎勵增加 10 分。
  • 每個側引擎點火一幀,獎勵減少 0.03 分。
  • 主引擎點火一幀,獎勵減少 0.3 分。

如果墜毀或安全著陸,該回合將分別獲得額外獎勵 -100 或 +100 分。

如果得分至少達到 200 分,則認為該回合是一個解決方案。

向量化環境

  • 我們建立了一個包含 16 個環境的向量化環境(一種將多個獨立環境堆疊成一個環境的方法),這樣,我們將在訓練期間獲得更多樣化的經驗。
# Create the environment
env = make_vec_env("LunarLander-v2", n_envs=16)

建立模型 🤖

  • 我們已經研究了我們的環境並理解了問題:透過控制左、右和主方向引擎,使月球著陸器正確降落在著陸墊上。現在讓我們構建我們將用於解決此問題的演算法 🚀。

  • 為此,我們將使用我們的第一個深度強化學習庫,Stable Baselines3 (SB3)

  • SB3 是一套PyTorch 中強化學習演算法的可靠實現


💡 使用新庫時的一個好習慣是首先深入研究文件:https://stable-baselines3.readthedocs.io/en/master/,然後嘗試一些教程。


Stable Baselines3

為了解決這個問題,我們將使用 SB3 PPOPPO (即近端策略最佳化) 是你將在本課程中學習的 SOTA (最先進) 深度強化學習演算法之一

PPO是以下各項的組合

  • 基於價值的強化學習方法:學習一個行動價值函式,它會告訴我們給定狀態和行動下最寶貴的行動
  • 基於策略的強化學習方法:學習一個策略,它將為我們提供行動的機率分佈

Stable-Baselines3 易於設定

1️⃣ 你建立你的環境(在我們的例子中已完成)

2️⃣ 你定義要使用的模型並例項化該模型 model = PPO("MlpPolicy")

3️⃣ 你使用 model.learn 訓練智慧體並定義訓練時間步數

# Create environment
env = gym.make('LunarLander-v2')

# Instantiate the agent
model = PPO('MlpPolicy', env, verbose=1)
# Train the agent
model.learn(total_timesteps=int(2e5))
# TODO: Define a PPO MlpPolicy architecture
# We use MultiLayerPerceptron (MLPPolicy) because the input is a vector,
# if we had frames as input we would use CnnPolicy
model =

解決方案

# SOLUTION
# We added some parameters to accelerate the training
model = PPO(
    policy="MlpPolicy",
    env=env,
    n_steps=1024,
    batch_size=64,
    n_epochs=4,
    gamma=0.999,
    gae_lambda=0.98,
    ent_coef=0.01,
    verbose=1,
)

訓練 PPO 智慧體 🏃

  • 讓我們訓練我們的智慧體 1,000,000 個時間步,別忘了在 Colab 上使用 GPU。這大約需要 20 分鐘,但如果你只是想嘗試一下,可以使用更少的時間步。
  • 訓練期間,喝杯咖啡休息一下吧,這是你應得的 🤗
# TODO: Train it for 1,000,000 timesteps

# TODO: Specify file name for model and save the model to file
model_name = "ppo-LunarLander-v2"

解決方案

# SOLUTION
# Train it for 1,000,000 timesteps
model.learn(total_timesteps=1000000)
# Save the model
model_name = "ppo-LunarLander-v2"
model.save(model_name)

評估智慧體 📈

  • 請記住將環境包裝在 Monitor 中。
  • 現在我們的月球著陸器智慧體已經訓練好了🚀,我們需要檢查它的效能
  • Stable-Baselines3 提供了一個方法來做到這一點:evaluate_policy
  • 要填寫這部分,你需要檢視文件
  • 下一步,我們將看到如何自動評估並分享你的智慧體以在排行榜中競爭,但現在讓我們自己來做

💡 評估智慧體時,你不應使用訓練環境,而應建立一個評估環境。

# TODO: Evaluate the agent
# Create a new environment for evaluation
eval_env =

# Evaluate the model with 10 evaluation episodes and deterministic=True
mean_reward, std_reward = 

# Print the results

解決方案

# @title
eval_env = Monitor(gym.make("LunarLander-v2"))
mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True)
print(f"mean_reward={mean_reward:.2f} +/- {std_reward}")
  • 在我的情況下,訓練 100 萬步後,我獲得了 200.20 +/- 20.80 的平均獎勵,這意味著我們的月球著陸器智慧體已經準備好登陸月球了 🌛🥳。

在 Hub 上釋出我們訓練好的模型 🔥

既然我們已經看到訓練後取得了良好的結果,我們可以用一行程式碼將我們訓練好的模型釋出到 hub 🤗。

📚 庫文件 👉 https://github.com/huggingface/huggingface_sb3/tree/main#hugging-face—x-stable-baselines3-v20

這是一個模型卡(包含太空入侵者)的示例

透過使用 package_to_hub,你將評估、錄製回放、生成你的智慧體的模型卡並將其推送到 Hub

透過這種方式

為了能夠與社群分享你的模型,還需要完成三個步驟

1️⃣(如果尚未完成)在 Hugging Face ➡ https://huggingface.co/join 上建立一個帳戶

2️⃣ 登入後,你需要從 Hugging Face 網站儲存你的身份驗證令牌。

Create HF Token
  • 複製令牌
  • 執行下方單元格並貼上令牌
notebook_login()
!git config --global credential.helper store

如果你不想使用 Google Colab 或 Jupyter Notebook,你需要改用此命令:huggingface-cli login

3️⃣ 我們現在準備使用 package_to_hub() 函式將我們訓練好的智慧體推送到 🤗 Hub 🔥

讓我們填寫 package_to_hub 函式

  • model:我們訓練好的模型。
  • model_name:我們在 model_save 中定義的訓練模型的名稱
  • model_architecture:我們使用的模型架構,在我們的例子中是 PPO
  • env_id:環境的名稱,在我們的例子中是 LunarLander-v2
  • eval_env:在 eval_env 中定義的評估環境
  • repo_id:將要建立/更新的 Hugging Face Hub 儲存庫的名稱 (repo_id = {username}/{repo_name})

💡 一個好的名稱是 {username}/{model_architecture}-{env_id}

  • commit_message:提交訊息
import gymnasium as gym
from stable_baselines3.common.vec_env import DummyVecEnv
from stable_baselines3.common.env_util import make_vec_env

from huggingface_sb3 import package_to_hub

## TODO: Define a repo_id
## repo_id is the id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2
repo_id = 

# TODO: Define the name of the environment
env_id = 

# Create the evaluation env and set the render_mode="rgb_array"
eval_env = DummyVecEnv([lambda: gym.make(env_id, render_mode="rgb_array")])


# TODO: Define the model architecture we used
model_architecture = ""

## TODO: Define the commit message
commit_message = ""

# method save, evaluate, generate a model card and record a replay video of your agent before pushing the repo to the hub
package_to_hub(model=model, # Our trained model
               model_name=model_name, # The name of our trained model 
               model_architecture=model_architecture, # The model architecture we used: in our case PPO
               env_id=env_id, # Name of the environment
               eval_env=eval_env, # Evaluation Environment
               repo_id=repo_id, # id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2
               commit_message=commit_message)

解決方案

import gymnasium as gym

from stable_baselines3 import PPO
from stable_baselines3.common.vec_env import DummyVecEnv
from stable_baselines3.common.env_util import make_vec_env

from huggingface_sb3 import package_to_hub

# PLACE the variables you've just defined two cells above
# Define the name of the environment
env_id = "LunarLander-v2"

# TODO: Define the model architecture we used
model_architecture = "PPO"

## Define a repo_id
## repo_id is the id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2
## CHANGE WITH YOUR REPO ID
repo_id = "ThomasSimonini/ppo-LunarLander-v2"  # Change with your repo id, you can't push with mine 😄

## Define the commit message
commit_message = "Upload PPO LunarLander-v2 trained agent"

# Create the evaluation env and set the render_mode="rgb_array"
eval_env = DummyVecEnv([lambda: Monitor(gym.make(env_id, render_mode="rgb_array"))])

# PLACE the package_to_hub function you've just filled here
package_to_hub(
    model=model,  # Our trained model
    model_name=model_name,  # The name of our trained model
    model_architecture=model_architecture,  # The model architecture we used: in our case PPO
    env_id=env_id,  # Name of the environment
    eval_env=eval_env,  # Evaluation Environment
    repo_id=repo_id,  # id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2
    commit_message=commit_message,
)

恭喜🥳你剛剛訓練並上傳了你的第一個深度強化學習智慧體。上面的指令碼應該顯示了一個模型倉庫的連結,例如https://huggingface.co/osanseviero/test_sb3。當你訪問此連結時,你可以

  • 在右側檢視您的代理的影片預覽。
  • 點選“檔案和版本”檢視倉庫中的所有檔案。
  • 點選“在 stable-baselines3 中使用”獲取顯示如何載入模型的程式碼片段。
  • 一個模型卡(README.md 檔案),其中包含模型的描述

在底層,Hub 使用基於 Git 的倉庫(如果你不瞭解 Git,別擔心),這意味著你可以在實驗並改進智慧體時使用新版本更新模型。

使用排行榜 🏆 將你的 LunarLander-v2 的結果與你的同學進行比較 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard

從 Hub 載入已儲存的 LunarLander 模型 🤗

感謝 ironbar 的貢獻。

從 Hub 載入已儲存的模型非常簡單。

你可以訪問 https://huggingface.co/models?library=stable-baselines3 檢視所有 Stable-baselines3 已儲存模型的列表。

  1. 您選擇一個並複製其 repo_id
Copy-id
  1. 然後我們只需要使用 load_from_hub 並提供
  • 倉庫 ID
  • 檔名:倉庫中儲存的模型及其副檔名 (*.zip)

因為我從 Hub 下載的模型是用 Gym(Gymnasium 的舊版本)訓練的,所以我們需要安裝 shimmy,這是一個 API 轉換工具,它將幫助我們正確執行環境。

Shimmy 文件:https://github.com/Farama-Foundation/Shimmy

!pip install shimmy
from huggingface_sb3 import load_from_hub

repo_id = "Classroom-workshop/assignment2-omar"  # The repo_id
filename = "ppo-LunarLander-v2.zip"  # The model filename.zip

# When the model was trained on Python 3.8 the pickle protocol is 5
# But Python 3.6, 3.7 use protocol 4
# In order to get compatibility we need to:
# 1. Install pickle5 (we done it at the beginning of the colab)
# 2. Create a custom empty object we pass as parameter to PPO.load()
custom_objects = {
    "learning_rate": 0.0,
    "lr_schedule": lambda _: 0.0,
    "clip_range": lambda _: 0.0,
}

checkpoint = load_from_hub(repo_id, filename)
model = PPO.load(checkpoint, custom_objects=custom_objects, print_system_info=True)

讓我們評估這個智慧體

# @title
eval_env = Monitor(gym.make("LunarLander-v2"))
mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True)
print(f"mean_reward={mean_reward:.2f} +/- {std_reward}")

一些額外挑戰 🏆

學習的最佳方式是親自動手嘗試!正如你所看到的,當前的智慧體表現不佳。第一個建議是,你可以訓練更多的步數。經過 1,000,000 步的訓練,我們看到了一些出色的結果!

排行榜中你會找到你的智慧體。你能名列前茅嗎?

以下是一些實現方法

使用排行榜🏆將你的 LunarLander-v2 的結果與你的同學進行比較

登月對你來說太無聊了嗎?嘗試改變環境,為什麼不使用 MountainCar-v0、CartPole-v1 或 CarRacing-v0 呢?查閱 Gym 文件瞭解它們的工作原理,盡情玩樂吧 🎉。


恭喜你完成這一章!這是最大的一章,資訊量很大。

如果你仍然對所有這些元素感到困惑……這完全正常!我和所有學習強化學習的人都經歷過同樣的情況。

花時間真正掌握這些材料,然後再繼續並嘗試額外的挑戰。掌握這些元素並打下堅實的基礎非常重要。

當然,在課程中,我們將深入探討這些概念,但在進入下一章之前,最好現在就對它們有一個很好的理解。

下次,在獎勵單元 1 中,你將訓練小狗 Huggy 去撿棍子。

Huggy

繼續學習,保持出色 🤗

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.