深度強化學習課程文件
讓我們和Huggy 🐶一起訓練和玩耍吧
並獲得增強的文件體驗
開始使用
讓我們和Huggy 🐶一起訓練和玩耍吧
我們強烈**建議學生使用 Google Colab 進行實踐練習**,而不是在個人電腦上執行。
使用 Google Colab,**您可以專注於學習和實驗,而無需擔心環境設定的技術問題。**
讓我們訓練Huggy 🐶
要開始訓練Huggy,請點選“在Colab中開啟”按鈕 👇
在此筆記本中,我們將透過教導狗狗Huggy撿回棍子,然後在瀏覽器中直接與它玩耍來鞏固在第一單元中學到的知識
環境 🎮
- Huggy the Dog,一個由Thomas Simonini基於Puppo The Corgi建立的環境
使用的庫 📚
我們一直在努力改進我們的教程,因此,如果你在此筆記本中發現任何問題,請在 Github Repo 上提交問題。
本筆記本的目標 🏆
在本筆記本結束時,您將:
- 理解用於訓練Huggy的狀態空間、動作空間和獎勵函式。
- 訓練你自己的Huggy去撿回棍子。
- 能夠在你的瀏覽器中直接玩耍你訓練好的Huggy。
先決條件 🏗️
在深入學習本筆記本之前,您需要:
🔲 📚 透過學習單元1,理解強化學習的基礎知識(MC、TD、獎勵假設等)
🔲 📚 透過學習獎勵單元1,閱讀Huggy的介紹
設定GPU 💪
- 為了加速智慧體的訓練,我們將使用 GPU。為此,請轉到
Runtime > Change Runtime type
硬體加速器 > GPU
克隆倉庫 🔽
- 我們需要克隆包含 ML-Agents 的倉庫。
# Clone the repository (can take 3min)
git clone --depth 1 https://github.com/Unity-Technologies/ml-agents設定虛擬環境 🔽
為了讓 ML-Agents 在 Colab 中成功執行,Colab 的 Python 版本必須滿足該庫的 Python 要求。
我們可以在
setup.py檔案中的python_requires引數下檢視支援的 Python 版本。這些檔案是設定 ML-Agents 庫以供使用所必需的,可以在以下位置找到:/content/ml-agents/ml-agents/setup.py/content/ml-agents/ml-agents-envs/setup.py
Colab 當前的 Python 版本(可以使用
!python --version檢查)與庫的python_requires引數不匹配,因此安裝可能會靜默失敗,並在稍後執行相同的命令時導致以下錯誤:/bin/bash: line 1: mlagents-learn: 命令未找到/bin/bash: line 1: mlagents-push-to-hf: 命令未找到
為了解決這個問題,我們將建立一個與 ML-Agents 庫相容的 Python 版本的虛擬環境。
注意: 為了未來的相容性,如果 Colab 的 Python 版本不相容,請始終檢查安裝檔案中的 python_requires 引數,並將您的虛擬環境設定為以下指令碼中支援的最高 Python 版本。
# Colab's Current Python Version (Incompatible with ML-Agents)
!python --version# Install virtualenv and create a virtual environment
!pip install virtualenv
!virtualenv myenv
# Download and install Miniconda
!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
!chmod +x Miniconda3-latest-Linux-x86_64.sh
!./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local
# Activate Miniconda and install Python ver 3.10.12
!source /usr/local/bin/activate
!conda install -q -y --prefix /usr/local python=3.10.12 ujson # Specify the version here
# Set environment variables for Python and conda paths
!export PYTHONPATH=/usr/local/lib/python3.10/site-packages/
!export CONDA_PREFIX=/usr/local/envs/myenv# Python Version in New Virtual Environment (Compatible with ML-Agents)
!python --version安裝依賴項 🔽
# Go inside the repository and install the package (can take 3min)
%cd ml-agents
pip3 install -e ./ml-agents-envs
pip3 install -e ./ml-agents下載環境zip檔案並將其移動到./trained-envs-executables/linux/
- 我們的環境可執行檔案是一個zip檔案。
- 我們需要下載它並將其放到
./trained-envs-executables/linux/
mkdir ./trained-envs-executables
mkdir ./trained-envs-executables/linux我們使用 wget 從 https://github.com/huggingface/Huggy 下載了 Huggy.zip 檔案
wget "https://github.com/huggingface/Huggy/raw/main/Huggy.zip" -O ./trained-envs-executables/linux/Huggy.zip%%capture unzip -d ./trained-envs-executables/linux/ ./trained-envs-executables/linux/Huggy.zip
確保您的檔案可訪問
chmod -R 755 ./trained-envs-executables/linux/Huggy讓我們回顧一下這個環境是如何工作的
狀態空間:Huggy感知到的資訊。
Huggy並不能“看見”它的環境。相反,我們向它提供有關環境的資訊:
- 目標(棍子)的位置
- 它自身與目標之間的相對位置
- 它腿部的方向。
有了所有這些資訊,Huggy就可以決定下一步採取什麼行動來完成它的目標。
動作空間:Huggy可以做的動作
關節馬達驅動Huggy的腿部。這意味著為了拿到目標,Huggy需要學會正確地旋轉每條腿的關節馬達,以便它能夠移動。
獎勵函式
獎勵函式的設計旨在讓Huggy完成它的目標:撿回棍子。
請記住,強化學習的基礎之一是獎勵假設:一個目標可以被描述為最大化預期累積獎勵。
在這裡,我們的目標是讓Huggy走向棍子,但不要轉動太多。因此,我們的獎勵函式必須實現這個目標。
我們的獎勵函式:
- 方向獎勵:我們獎勵它接近目標。
- 時間懲罰:每次行動都會給予固定的時間懲罰,以促使它儘快拿到棍子。
- 旋轉懲罰:如果Huggy轉動太多或轉得太快,我們就會懲罰它。
- 到達目標獎勵:我們獎勵Huggy到達目標。
檢查Huggy配置檔案
在ML-Agents中,您可以在config.yaml檔案中定義訓練超引數。
對於本筆記本的範圍,我們不打算修改超引數,但如果您想嘗試作為實驗,Unity提供了非常好的文件,解釋了每個超引數。
我們需要為Huggy建立一個配置檔案。
轉到
/content/ml-agents/config/ppo建立一個名為
Huggy.yaml的新檔案複製並貼上以下內容 🔽
behaviors:
Huggy:
trainer_type: ppo
hyperparameters:
batch_size: 2048
buffer_size: 20480
learning_rate: 0.0003
beta: 0.005
epsilon: 0.2
lambd: 0.95
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: true
hidden_units: 512
num_layers: 3
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.995
strength: 1.0
checkpoint_interval: 200000
keep_checkpoints: 15
max_steps: 2e6
time_horizon: 1000
summary_freq: 50000別忘了儲存檔案!
如果您想修改超引數,在Google Colab筆記本中,您可以點選此處開啟config.yaml:
/content/ml-agents/config/ppo/Huggy.yaml
我們現在準備訓練我們的代理 🔥。
訓練我們的智慧體
為了訓練我們的智慧體,我們只需要啟動mlagents-learn並選擇包含環境的可執行檔案。
使用ML Agents,我們執行一個訓練指令碼。我們定義四個引數:
mlagents-learn <config>:超引數配置檔案的路徑。--env:環境可執行檔案所在的位置。--run-id:您希望給訓練執行ID的名稱。--no-graphics:訓練期間不啟動視覺化。
訓練模型並使用 --resume 標誌以在中斷時繼續訓練。
首次使用
--resume時會失敗,請再次執行該塊以繞過錯誤。
訓練將需要30到45分鐘,具體取決於您的機器(別忘了設定GPU),去喝杯咖啡吧 ☕️ 你值得擁有 🤗。
mlagents-learn ./config/ppo/Huggy.yaml --env=./trained-envs-executables/linux/Huggy/Huggy --run-id="Huggy" --no-graphics將智慧體推送到 🤗 Hub
- 現在我們已經訓練好了智慧體,我們可以將其推送到Hub,以便在您的瀏覽器上與Huggy玩耍🔥。
為了能夠與社群分享你的模型,還需要完成三個步驟
1️⃣ (如果尚未完成)建立 HF 帳戶 ➡ https://huggingface.co/join
2️⃣ 登入並從Hugging Face網站獲取您的令牌。
- 建立一個新令牌(https://huggingface.co/settings/tokens),並賦予寫入許可權
- 複製令牌
- 執行下方單元格並貼上令牌
from huggingface_hub import notebook_login
notebook_login()如果您不想使用 Google Colab 或 Jupyter Notebook,則需要使用此命令代替:huggingface-cli login
然後,我們只需執行 mlagents-push-to-hf。
我們定義四個引數:
--run-id:訓練執行 ID 的名稱。--local-dir:智慧體儲存的位置,即results/<run_id name>,在我的例子中是results/First Training。--repo-id:您要建立或更新的Hugging Face倉庫的名稱。它總是<您的Hugging Face使用者名稱>/<倉庫名稱>。如果倉庫不存在,它將自動建立。--commit-message:由於 HF 倉庫是 git 倉庫,您需要提供一個提交訊息。
mlagents-push-to-hf --run-id="HuggyTraining" --local-dir="./results/Huggy" --repo-id="ThomasSimonini/ppo-Huggy" --commit-message="Huggy"如果一切順利,您應該在過程結束時看到此內容(但網址會不同😆)
Your model is pushed to the hub. You can view your model here: https://huggingface.co/ThomasSimonini/ppo-Huggy這是您模型倉庫的連結。該倉庫包含一個模型卡,解釋瞭如何使用模型、您的Tensorboard日誌和您的配置檔案。最棒的是,它是一個Git倉庫,這意味著您可以有不同的提交、用新的推送更新您的倉庫、開啟拉取請求等等。
但現在最精彩的部分來了:能夠線上玩Huggy 👀。
和你的Huggy玩耍 🐕
這一步是最簡單的
在瀏覽器中開啟Huggy遊戲:https://huggingface.co/spaces/ThomasSimonini/Huggy
點選“玩我的Huggy模型”
在步驟1中,輸入您的使用者名稱(您的使用者名稱區分大小寫:例如,我的使用者名稱是ThomasSimonini,而不是thomassimonini或ThOmasImoNInI),然後點選搜尋按鈕。
在步驟2中,選擇您的模型倉庫。
在步驟3中,選擇您想要重放的模型
- 我有很多模型,因為我們每 500000 步儲存一個模型。
- 但由於我想要最新的一個,所以我選擇
Huggy.onnx
👉 嘗試使用不同的模型步驟來檢視智慧體的改進會很有幫助。
恭喜你完成這個獎勵單元!
現在你可以坐下來享受和你的Huggy 🐶玩耍的樂趣了。別忘了將Huggy分享給你的朋友,傳播愛心 🤗。如果你在社交媒體上分享,請@huggingface和@simoninithomas標記我們。