深度強化學習課程文件

讓我們和Huggy 🐶一起訓練和玩耍吧

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

讓我們和Huggy 🐶一起訓練和玩耍吧

Ask a Question Open In Colab

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

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

讓我們訓練Huggy 🐶

要開始訓練Huggy,請點選“在Colab中開啟”按鈕 👇

Open In Colab

Bonus Unit 1Thumbnail

在此筆記本中,我們將透過教導狗狗Huggy撿回棍子,然後在瀏覽器中直接與它玩耍來鞏固在第一單元中學到的知識

Huggy

環境 🎮

使用的庫 📚

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

本筆記本的目標 🏆

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

  • 理解用於訓練Huggy的狀態空間、動作空間和獎勵函式
  • 訓練你自己的Huggy去撿回棍子。
  • 能夠在你的瀏覽器中直接玩耍你訓練好的Huggy

先決條件 🏗️

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

🔲 📚 透過學習單元1,理解強化學習的基礎知識(MC、TD、獎勵假設等)

🔲 📚 透過學習獎勵單元1,閱讀Huggy的介紹

設定GPU 💪

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

克隆倉庫 🔽

  • 我們需要克隆包含 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

我們使用 wgethttps://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 action

關節馬達驅動Huggy的腿部。這意味著為了拿到目標,Huggy需要學會正確地旋轉每條腿的關節馬達,以便它能夠移動

獎勵函式

獎勵函式的設計旨在讓Huggy完成它的目標:撿回棍子。

請記住,強化學習的基礎之一是獎勵假設:一個目標可以被描述為最大化預期累積獎勵

在這裡,我們的目標是讓Huggy走向棍子,但不要轉動太多。因此,我們的獎勵函式必須實現這個目標。

我們的獎勵函式:

Huggy reward function
  • 方向獎勵:我們獎勵它接近目標
  • 時間懲罰:每次行動都會給予固定的時間懲罰,以促使它儘快拿到棍子
  • 旋轉懲罰:如果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 learn function

使用ML Agents,我們執行一個訓練指令碼。我們定義四個引數:

  1. mlagents-learn <config>:超引數配置檔案的路徑。
  2. --env:環境可執行檔案所在的位置。
  3. --run-id:您希望給訓練執行ID的名稱。
  4. --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網站獲取您的令牌。

Create HF Token
  • 複製令牌
  • 執行下方單元格並貼上令牌
from huggingface_hub import notebook_login

notebook_login()

如果您不想使用 Google Colab 或 Jupyter Notebook,則需要使用此命令代替:huggingface-cli login

然後,我們只需執行 mlagents-push-to-hf

ml learn function

我們定義四個引數:

  1. --run-id:訓練執行 ID 的名稱。
  2. --local-dir:智慧體儲存的位置,即results/<run_id name>,在我的例子中是results/First Training。
  3. --repo-id:您要建立或更新的Hugging Face倉庫的名稱。它總是<您的Hugging Face使用者名稱>/<倉庫名稱>。如果倉庫不存在,它將自動建立
  4. --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倉庫,這意味著您可以有不同的提交、用新的推送更新您的倉庫、開啟拉取請求等等。

ml learn function

但現在最精彩的部分來了:能夠線上玩Huggy 👀。

和你的Huggy玩耍 🐕

這一步是最簡單的

load-huggy
  1. 在步驟1中,輸入您的使用者名稱(您的使用者名稱區分大小寫:例如,我的使用者名稱是ThomasSimonini,而不是thomassimonini或ThOmasImoNInI),然後點選搜尋按鈕。

  2. 在步驟2中,選擇您的模型倉庫。

  3. 在步驟3中,選擇您想要重放的模型

  • 我有很多模型,因為我們每 500000 步儲存一個模型。
  • 但由於我想要最新的一個,所以我選擇 Huggy.onnx

👉 嘗試使用不同的模型步驟來檢視智慧體的改進會很有幫助。

恭喜你完成這個獎勵單元!

現在你可以坐下來享受和你的Huggy 🐶玩耍的樂趣了。別忘了將Huggy分享給你的朋友,傳播愛心 🤗。如果你在社交媒體上分享,請@huggingface和@simoninithomas標記我們

Huggy cover

繼續學習,保持出色 🤗

< > 在 GitHub 上更新

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