深度強化學習課程文件

實戰

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

實戰

Ask a Question Open In Colab

既然你已經學習了深度 Q-學習的理論,你已經準備好訓練你的深度 Q-學習智慧體來玩雅達利遊戲了。我們將從《太空侵略者》開始,但你可以使用任何你想要的雅達利遊戲 🔥

Environments

我們使用的是 RL-Baselines-3 Zoo 整合,這是一個 Deep Q-Learning 的原始版本,沒有像 Double-DQN、Dueling-DQN 或優先經驗回放等擴充套件。

此外,如果你想在此實戰後自己學習如何實現深度 Q-學習,你絕對應該看看 CleanRL 的實現:https://github.com/vwxyzjn/cleanrl/blob/master/cleanrl/dqn_atari.py

為了驗證本次實戰並獲得認證,你需要將訓練好的模型上傳到 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

單元 3:使用 RL Baselines3 Zoo 在雅達利遊戲中進行深度 Q-學習 👾

Unit 3 Thumbnail

在本次實戰中,你將**訓練一個深度 Q-學習智慧體**來玩《太空侵略者》,使用 RL Baselines3 Zoo,這是一個基於 Stable-Baselines3 的訓練框架,提供用於訓練、評估智慧體、調整超引數、繪製結果和錄製影片的指令碼。

我們使用的是 RL-Baselines-3 Zoo 整合,這是一個原始版本的深度 Q-學習,沒有 Double-DQN、Dueling-DQN 和優先經驗回放等擴充套件。

🎮 環境:

你可以在這裡看到《太空侵略者》不同版本之間的區別 👉 https://gymnasium.llms.tw/environments/atari/space_invaders/#variants

📚 RL 庫:

本次實戰的目標 🏆

在本次實戰結束時,你將:

  • 能夠更深入地理解 RL Baselines3 Zoo 的工作原理
  • 能夠將你訓練好的智慧體和程式碼上傳到 Hub,並附帶精彩的影片回放和評估分數 🔥。

先決條件 🏗️

在深入實踐之前,你需要

🔲 📚 透過閱讀單元 3 學習深度 Q-學習 🤗

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

讓我們訓練一個玩雅達利《太空侵略者》的深度 Q-學習智慧體 👾 並將其上傳到 Hub。

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

透過使用 Google Colab,你可以專注於學習和實驗,而無需擔心環境設定的技術方面

為了驗證本次實戰並獲得認證,你需要將訓練好的模型上傳到 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

安裝 RL-Baselines3 Zoo 及其依賴項 📚

如果你看到 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. 這是正常的,它不是一個嚴重錯誤,只是版本衝突。但是我們需要的包已經安裝好了。

# For now we install this update of RL-Baselines3 Zoo
pip install git+https://github.com/DLR-RM/rl-baselines3-zoo
apt-get install swig cmake ffmpeg

為了能夠在 Gymnasium 中使用 Atari 遊戲,我們需要安裝 atari 包。並接受 rom-license 以下載 rom 檔案(遊戲檔案)。

!pip install gymnasium[atari]
!pip install gymnasium[accept-rom-license]

建立虛擬顯示器 🔽

在實戰過程中,我們需要生成一個回放影片。為此,如果你在無頭機器上訓練它,我們需要一個虛擬螢幕才能渲染環境(從而錄製幀)。

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

apt install python-opengl
apt install ffmpeg
apt install xvfb
pip3 install pyvirtualdisplay
# Virtual display
from pyvirtualdisplay import Display

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

訓練我們的深度 Q-學習智慧體來玩《太空侵略者》👾

要使用 RL-Baselines3-Zoo 訓練智慧體,我們只需要做兩件事

  1. 建立一個名為 dqn.yml 的超引數配置檔案,其中包含我們的訓練超引數。

這是一個模板示例

SpaceInvadersNoFrameskip-v4:
  env_wrapper:
    - stable_baselines3.common.atari_wrappers.AtariWrapper
  frame_stack: 4
  policy: 'CnnPolicy'
  n_timesteps: !!float 1e7
  buffer_size: 100000
  learning_rate: !!float 1e-4
  batch_size: 32
  learning_starts: 100000
  target_update_interval: 1000
  train_freq: 4
  gradient_steps: 1
  exploration_fraction: 0.1
  exploration_final_eps: 0.01
  # If True, you need to deactivate handle_timeout_termination
  # in the replay_buffer_kwargs
  optimize_memory_usage: False

我們在這裡看到

  • 我們使用 Atari Wrapper,它對輸入進行預處理(幀縮減、灰度、堆疊 4 幀)
  • 我們使用 CnnPolicy,因為我們使用卷積層來處理幀
  • 我們訓練它 1000 萬個 n_timesteps
  • 記憶(經驗回放)大小為 100000,即你儲存的用於再次訓練智慧體的經驗步數。

💡 我的建議是將訓練時間步數減少到 1M,這在 P100 上大約需要 90 分鐘。!nvidia-smi 將告訴你正在使用哪個 GPU。在 1000 萬步時,這將需要大約 9 小時。我建議在本地計算機(或其他地方)執行此操作。只需點選:檔案 > 下載

在超引數最佳化方面,我的建議是關注這三個超引數:

  • 學習率
  • 緩衝區大小(經驗記憶大小)
  • 批處理大小

作為一項好的實踐,你需要查閱文件以瞭解每個超引數的作用https://stable-baselines3.readthedocs.io/en/master/modules/dqn.html#parameters

  1. 我們開始訓練並將模型儲存到 logs 資料夾 📁
  • --algo 後定義演算法,在 -f 後定義模型儲存位置,在 -c 後定義超引數配置。
python -m rl_zoo3.train --algo ________ --env SpaceInvadersNoFrameskip-v4  -f _________  -c _________

解決方案

python -m rl_zoo3.train --algo dqn  --env SpaceInvadersNoFrameskip-v4 -f logs/ -c dqn.yml

讓我們評估我們的智慧體 👀

  • RL-Baselines3-Zoo 提供了 enjoy.py,這是一個用於評估我們智慧體的 python 指令碼。在大多數 RL 庫中,我們將評估指令碼稱為 enjoy.py
  • 讓我們評估它 5000 個時間步 🔥
python -m rl_zoo3.enjoy  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --no-render  --n-timesteps _________  --folder logs/

解決方案

python -m rl_zoo3.enjoy  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --no-render  --n-timesteps 5000  --folder logs/

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

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

Space Invaders model

透過使用 rl_zoo3.push_to_hub你可以評估、錄製回放、生成你的智慧體的模型卡並將其推送到 hub

透過這種方式

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

1️⃣ (如果尚未完成)建立 HF 帳戶 ➡ https://huggingface.co/join

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

Create HF Token
  • 複製令牌
  • 執行下面的單元格並貼上令牌
from huggingface_hub import notebook_login # To log to our Hugging Face account to be able to upload models to the Hub.
notebook_login()
!git config --global credential.helper store

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

3️⃣ 現在我們準備好將訓練好的智慧體推送到 🤗 Hub 🔥

讓我們執行 push_to_hub.py 檔案,將我們訓練好的智慧體上傳到 Hub。

--repo-name:倉庫名稱

-orga:你的 Hugging Face 使用者名稱

-f:訓練好的模型資料夾的位置(在本例中為 logs

Select Id
python -m rl_zoo3.push_to_hub  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --repo-name _____________________ -orga _____________________ -f logs/

解決方案

python -m rl_zoo3.push_to_hub  --algo dqn  --env SpaceInvadersNoFrameskip-v4  --repo-name dqn-SpaceInvadersNoFrameskip-v4  -orga ThomasSimonini  -f logs/

###.

恭喜 🥳 你剛剛使用 RL-Baselines-3 Zoo 訓練並上傳了你的第一個深度 Q-學習智慧體。上面的指令碼應該顯示了一個指向模型倉庫的連結,例如 https://huggingface.co/ThomasSimonini/dqn-SpaceInvadersNoFrameskip-v4。當你訪問此連結時,你可以

  • 在右側檢視您的智慧體影片預覽
  • 點選“檔案和版本”以檢視儲存庫中的所有檔案。
  • 點選“在 stable-baselines3 中使用”以獲取載入模型的程式碼片段。
  • 一個模型卡(README.md 檔案),它提供了模型的描述和你使用的超引數。

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

使用排行榜🏆比較你的智慧體和同學們的成績

載入一個強大的預訓練模型 🔥

  • Stable-Baselines3 團隊已經在 Hub 上上傳了超過 150 個訓練好的深度強化學習智慧體

你可以在這裡找到它們:👉 https://huggingface.co/sb3

一些例子

讓我們載入一個玩 Beam Rider 的智慧體:https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4

  1. 我們使用 rl_zoo3.load_from_hub 下載模型,並將其放入一個我們可以命名為 rl_trained 的新資料夾中
# Download model and save it into the logs/ folder
python -m rl_zoo3.load_from_hub --algo dqn --env BeamRiderNoFrameskip-v4 -orga sb3 -f rl_trained/
  1. 讓我們評估它 5000 個時間步
python -m rl_zoo3.enjoy --algo dqn --env BeamRiderNoFrameskip-v4 -n 5000  -f rl_trained/ --no-render

為什麼不嘗試訓練你自己的玩 BeamRiderNoFrameskip-v4 的深度 Q-學習智慧體? 🏆

如果你想嘗試,請檢視https://huggingface.co/sb3/dqn-BeamRiderNoFrameskip-v4#hyperparameters在模型卡中,你可以找到已訓練智慧體的超引數。

但是尋找超引數可能是一項艱鉅的任務。幸運的是,我們將在下一單元中看到如何使用 Optuna 最佳化超引數 🔥。

一些額外的挑戰 🏆

學習的最好方式就是自己動手嘗試

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

以下是一些可以嘗試訓練智慧體的環境列表

  • 光束騎手無跳幀-v4
  • 打磚塊無跳幀-v4
  • 耐力賽無跳幀-v4
  • 乒乓球無跳幀-v4

此外,如果你想自己學習如何實現深度 Q-學習,你絕對應該看看 CleanRL 的實現:https://github.com/vwxyzjn/cleanrl/blob/master/cleanrl/dqn_atari.py

Environments

恭喜你完成了本章!

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

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

在下一單元,我們將學習 Optuna。在深度強化學習中,找到一組好的訓練超引數是最關鍵的任務之一。而 Optuna 是一個幫助你自動化搜尋過程的庫。

這是一個與你一起構建的課程 👷🏿‍♀️

最後,我們希望根據您的反饋迭代改進和更新課程。如果您有任何反饋,請填寫此表格 👉 https://forms.gle/3HgA7bEHwAmmLfwh9

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

附加單元 2 再見!🔥

持續學習,保持出色 🤗

< > 在 GitHub 上更新

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