深度強化學習課程文件
訓練你的第一個深度強化學習智慧體 🤖
並獲得增強的文件體驗
開始使用
訓練你的第一個深度強化學習智慧體 🤖
現在你已經學習了強化學習的基礎知識,你已經準備好訓練你的第一個智慧體並透過 Hub 🔥 分享給社群:一個月球著陸器智慧體,它將學習正確降落在月球上 🌕
最後,你將把這個訓練好的智慧體上傳到 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 中開啟”按鈕 👇
我們強烈**建議學生使用 Google Colab 進行實踐練習**,而不是在個人電腦上執行。
使用 Google Colab,**您可以專注於學習和實驗,而無需擔心環境設定的技術問題。**
單元 1:訓練你的第一個深度強化學習智慧體 🤖
在本筆記本中,你將訓練你的第一個深度強化學習智慧體,一個月球著陸器智慧體,它將學習正確降落在月球上 🌕。使用Stable-Baselines3,一個深度強化學習庫,與社群分享它們,並嘗試不同的配置
環境 🎮
使用的庫 📚
我們一直在努力改進我們的教程,因此,如果你在此筆記本中發現任何問題,請在 Github Repo 上提交問題。
本筆記本的目標 🏆
在本筆記本結束時,您將:
- 能夠使用Gymnasium,環境庫。
- 能夠使用Stable-Baselines3,深度強化學習庫。
- 能夠將訓練好的智慧體以精美影片回放和評估分數的推送到 Hub 🔥。
本筆記本來自深度強化學習課程
在這門免費課程中,你將:
- 📖 **理論與實踐**地學習深度強化學習。
- 🧑💻 學習使用著名的深度強化學習庫,如 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、獎勵假設……)。
深度強化學習小結 📚
讓我們來回顧一下第一單元所學的內容
強化學習是一種從行動中學習的計算方法。我們透過試錯與環境互動,並接收獎勵(負面或正面)作為反饋,從而構建一個從環境中學習的智慧體。
任何強化學習智慧體的目標都是最大化其預期累積獎勵(也稱為預期回報),因為強化學習基於“獎勵假說”,即所有目標都可以描述為預期累積獎勵的最大化。
強化學習過程是一個迴圈,輸出狀態、動作、獎勵和下一個狀態的序列。
為了計算預期的累積獎勵(預期回報),我們會對獎勵進行折現:較早(遊戲開始時)發生的獎勵更有可能發生,因為它們比長期未來獎勵更可預測。
要解決強化學習問題,你需要找到一個最優策略;策略是你的 AI 的“大腦”,它會告訴我們給定一個狀態時要採取什麼行動。最優策略是能讓你採取最大化預期回報的行動。
有兩種方法可以找到你的最優策略
透過直接訓練你的策略:基於策略的方法。
透過訓練一個價值函式,該函式會告訴我們智慧體在每個狀態下將獲得的預期回報,並使用此函式來定義我們的策略:基於價值的方法。
最後,我們討論了深度強化學習,因為我們引入了深度神經網路來估計要採取的行動(基於策略)或估計狀態的價值(基於價值),因此得名“深度”。
讓我們訓練我們的第一個深度強化學習智慧體並將其上傳到 Hub 🚀
獲得證書 🎓
為了驗證本次實踐並符合認證流程,你需要將訓練好的模型推送到 Hub,並獲得 >= 200 的結果。
要檢視你的結果,請訪問排行榜,找到你的模型,**結果 = 平均獎勵 - 獎勵標準差**
有關認證流程的更多資訊,請檢視此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process
設定 GPU 💪
- 為了加速智慧體的訓練,我們將使用 GPU。為此,請轉到
Runtime > Change Runtime type
硬體加速器 > GPU
安裝依賴並建立虛擬螢幕 🔽
第一步是安裝依賴項,我們將安裝多個依賴項。
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……)。
讓我們看一個例子,但首先我們回顧一下強化學習迴圈。
每一步
- 我們的智慧體從環境中接收到一個狀態(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/,然後嘗試一些教程。
為了解決這個問題,我們將使用 SB3 PPO。PPO (即近端策略最佳化) 是你將在本課程中學習的 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。
透過這種方式
- 你可以展示我們的工作 🔥
- 你可以視覺化你的智慧體在玩遊戲 👀
- 你可以與社群分享一個其他人可以使用的智慧體 💾
- 你可以訪問排行榜 🏆 檢視你的智慧體與同學相比表現如何 👉 https://huggingface.co/spaces/huggingface-projects/Deep-Reinforcement-Learning-Leaderboard
為了能夠與社群分享你的模型,還需要完成三個步驟
1️⃣(如果尚未完成)在 Hugging Face ➡ https://huggingface.co/join 上建立一個帳戶
2️⃣ 登入後,你需要從 Hugging Face 網站儲存你的身份驗證令牌。
- 建立一個新令牌(https://huggingface.co/settings/tokens),並賦予寫入許可權
- 複製令牌
- 執行下方單元格並貼上令牌
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:我們使用的模型架構,在我們的例子中是 PPOenv_id:環境的名稱,在我們的例子中是LunarLander-v2eval_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 已儲存模型的列表。
- 您選擇一個並複製其 repo_id
- 然後我們只需要使用 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 步的訓練,我們看到了一些出色的結果!
在排行榜中你會找到你的智慧體。你能名列前茅嗎?
以下是一些實現方法
- 訓練更多步
- 嘗試 PPO 的不同超引數。你可以在 https://stable-baselines3.readthedocs.io/en/master/modules/ppo.html#parameters 檢視它們。
- 查閱 Stable-Baselines3 文件並嘗試使用其他模型,例如 DQN。
- **將您新訓練的模型推送到 Hub** 🔥
使用排行榜🏆將你的 LunarLander-v2 的結果與你的同學進行比較
登月對你來說太無聊了嗎?嘗試改變環境,為什麼不使用 MountainCar-v0、CartPole-v1 或 CarRacing-v0 呢?查閱 Gym 文件瞭解它們的工作原理,盡情玩樂吧 🎉。
恭喜你完成這一章!這是最大的一章,資訊量很大。
如果你仍然對所有這些元素感到困惑……這完全正常!我和所有學習強化學習的人都經歷過同樣的情況。
花時間真正掌握這些材料,然後再繼續並嘗試額外的挑戰。掌握這些元素並打下堅實的基礎非常重要。
當然,在課程中,我們將深入探討這些概念,但在進入下一章之前,最好現在就對它們有一個很好的理解。
下次,在獎勵單元 1 中,你將訓練小狗 Huggy 去撿棍子。