深度強化學習課程文件
實戰
並獲得增強的文件體驗
開始使用
動手實踐
既然你已經瞭解了多智慧體的基礎知識,那麼你就可以在多智慧體系統中訓練你的第一個智慧體了:一個 2 對 2 的足球隊,需要擊敗對手。
你將參加 AI 對 AI 的挑戰,你訓練的智慧體將每天與同學的智慧體競爭,並在新的排行榜上排名。
要透過認證流程驗證此動手實踐,你只需推送一個訓練好的模型。沒有最低成績要求。
有關認證流程的更多資訊,請檢視此部分 👉 https://huggingface.co/deep-rl-course/en/unit0/introduction#certification-process
這次動手實踐將有所不同,因為要獲得正確的結果,你需要訓練你的智慧體 4 到 8 小時。鑑於 Colab 中存在超時風險,我們建議你在自己的電腦上進行訓練。你不需要超級計算機:一臺簡單的筆記型電腦足以完成此練習。
開始吧!🔥
什麼是 AI 對 AI?
AI 對 AI 是我們 Hugging Face 開發的一款開源工具,用於在多智慧體環境中讓 Hub 上的智慧體相互競爭。這些模型隨後會在排行榜上排名。
這個工具的理念是擁有一款可靠的評估工具:透過與許多其他智慧體一起評估你的智慧體,你將很好地瞭解你的策略的質量。
更確切地說,AI 對 AI 是三個工具
- 一個匹配過程,定義比賽(哪個模型對哪個模型)並使用 Space 中的後臺任務執行模型戰鬥。
- 一個排行榜,獲取比賽歷史結果並顯示模型的 ELO 評級:https://huggingface.co/spaces/huggingface-projects/AIvsAI-SoccerTwos
- 一個Space 演示,用於視覺化你的智慧體與其他智慧體對戰:https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos
除了這三個工具,你的同學 cyllum 還建立了一個 🤗 SoccerTwos 挑戰分析工具,你可以在其中檢視模型的詳細比賽結果:https://huggingface.co/spaces/cyllum/soccertwos-analytics
我們寫了一篇部落格文章來詳細解釋這個 AI 對 AI 工具,但總的來說它的工作方式是這樣的
- 每隔四小時,我們的演算法會獲取給定環境(在本例中為 ML-Agents-SoccerTwos)的所有可用模型。
- 它會使用匹配演算法建立比賽佇列。
- 我們在 Unity 無頭程序中模擬比賽並收集比賽結果(如果第一個模型獲勝為 1,平局為 0.5,第二個模型獲勝為 0)並將其儲存在資料集中。
- 然後,當比賽佇列中的所有比賽都完成後,我們會更新每個模型的 ELO 分數並更新排行榜。
比賽規則
第一次 AI 對 AI 比賽是一次實驗:目標是根據你的反饋在未來改進工具。因此在挑戰過程中可能會出現一些中斷。但別擔心,所有結果都儲存在資料集中,所以我們可以始終正確地重新開始計算而不會丟失資訊。
為了使你的模型能夠正確地與其他模型進行評估,你需要遵守以下規則
- 你不能改變智慧體的觀察空間或行動空間。 這樣做會導致你的模型在評估期間無法工作。
- 你目前不能使用自定義訓練器, 你需要使用 Unity MLAgents 的訓練器。
- 我們提供可執行檔案來訓練你的智慧體。如果你願意,也可以使用 Unity 編輯器,但為了避免錯誤,我們建議你使用我們的可執行檔案。
本次挑戰中,決定勝負的關鍵是你選擇的超引數。
我們一直在努力改進我們的教程,因此,如果您在本筆記本中發現任何問題,請在 GitHub 倉庫中提出問題。
在 Discord 上與同學聊天、分享建議和提問
- 我們建立了一個名為
ai-vs-ai-challenge的新頻道,用於交流建議和提問。 - 如果你還沒有加入 Discord 伺服器,你可以在這裡加入。
步驟 0:安裝 MLAgents 並下載正確的可執行檔案
我們建議您使用conda作為包管理器並建立一個新環境。
使用 conda,我們建立了一個名為 rl 的新環境,使用 Python 3.10.12
conda create --name rl python=3.10.12 conda activate rl
為了正確訓練我們的智慧體並推送到 Hub,我們需要安裝 ML-Agents
git clone https://github.com/Unity-Technologies/ml-agents克隆完成後(佔用 2.63 GB),我們進入倉庫並安裝包
cd ml-agents
pip install -e ./ml-agents-envs
pip install -e ./ml-agents使用 Apple Silicon 的 Mac 使用者在安裝時可能會遇到問題(例如 ONNX 輪子構建失敗),您應該首先嚐試安裝 grpcio
conda install grpcio
官方 ml-agent 倉庫中的此 GitHub 問題也可能對您有所幫助。
最後,你需要安裝 git-lfs:https://git-lfs.com/
現在已經安裝好了,我們需要新增環境訓練可執行檔案。根據你的作業系統,你需要下載其中一個,解壓縮並將其放在 `ml-agents` 內部的一個新資料夾中,你可以稱之為 `training-envs-executables`
最終,你的可執行檔案應該在 ml-agents/training-envs-executables/SoccerTwos 中
Windows:下載此可執行檔案
Linux (Ubuntu):下載此可執行檔案
Mac:下載此可執行檔案 ⚠ 對於 Mac,您還需要呼叫 xattr -cr training-envs-executables/SoccerTwos/SoccerTwos.app 才能執行 SoccerTwos
步驟 1:瞭解環境
該環境名為 SoccerTwos。它由 Unity MLAgents 團隊建立。你可以在此處找到其文件。
此環境的目標是將球射入對手的球門,同時阻止球進入自己的球門。
獎勵函式
獎勵函式為
觀察空間
觀察空間由大小為 336 的向量組成
- 11 條向前射線,分佈在 120 度(264 狀態維度)
- 3 條向後射線,分佈在 90 度(72 狀態維度)
- 這些射線都可以檢測到 6 個物體
- 球
- 藍方球門
- 紫方球門
- 牆壁
- 藍方智慧體
- 紫方智慧體
行動空間
行動空間分為三個離散分支
步驟 2:瞭解 MA-POCA
我們知道如何訓練智慧體相互對戰:我們可以使用自博弈。 這對於 1 對 1 的情況非常完美。
但在我們的例子中,是 2 對 2,每個團隊有 2 個智慧體。那麼我們如何訓練智慧體群體的協作行為呢?
正如Unity 部落格中所解釋的,當團隊進球時,智慧體通常會作為整體獲得獎勵(+1 - 懲罰)。這意味著團隊中的每個智慧體都會獲得獎勵,即使每個智慧體對勝利的貢獻不同,這使得很難獨立學習該做什麼。
Unity MLAgents 團隊在一種名為MA-POCA(多智慧體追溯信用分配)的新型多智慧體訓練器中開發瞭解決方案。
這個想法很簡單但很強大:一個集中的評論家處理團隊中所有智慧體的狀態,以估計每個智慧體的表現如何。可以把這個評論家想象成一個教練。
這使得每個智慧體都能夠僅根據其區域性感知進行決策,同時評估其行為在整個團隊環境中的好壞。
那麼解決方案就是使用自博弈配合 MA-POCA 訓練器(稱為 poca)。poca 訓練器將幫助我們訓練協作行為和自博弈,以贏得對抗對手團隊的勝利。
如果你想深入瞭解 MA-POCA 演算法,你需要閱讀他們此處發表的論文以及我們在補充閱讀部分提供的資源。
步驟 3:定義配置檔案
我們已經在第 5 單元中瞭解到,在 ML-Agents 中,您在config.yaml檔案中定義訓練超引數。
有多個超引數。要更好地理解它們,您應該閱讀文件中每個超引數的解釋。
我們將要使用的配置檔案位於 ./config/poca/SoccerTwos.yaml。它看起來像這樣
behaviors:
SoccerTwos:
trainer_type: poca
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: constant
network_settings:
normalize: false
hidden_units: 512
num_layers: 2
vis_encode_type: simple
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
keep_checkpoints: 5
max_steps: 5000000
time_horizon: 1000
summary_freq: 10000
self_play:
save_steps: 50000
team_change: 200000
swap_steps: 2000
window: 10
play_against_latest_model_ratio: 0.5
initial_elo: 1200.0與 Pyramids 或 SnowballTarget 相比,我們有了新的超引數,並加入了自博弈部分。你如何修改它們對於獲得好結果至關重要。
我在這裡給你的建議是,對照文件,檢查每個引數(特別是自博弈引數)的解釋和推薦值。
現在你已經修改了我們的配置檔案,你已經準備好訓練你的智慧體了。
步驟 4:開始訓練
要訓練智慧體,我們需要啟動 mlagents-learn 並選擇包含環境的可執行檔案。
我們定義四個引數
mlagents-learn <config>:超引數配置檔案的路徑。-env:環境可執行檔案所在位置。-run_id:你希望給你的訓練執行 ID 起的名稱。-no-graphics:訓練期間不啟動視覺化。
根據你的硬體,5M 時間步(推薦值,但你也可以嘗試 10M)將需要 5 到 8 小時的訓練。在此期間你可以繼續使用你的電腦,但我建議關閉電腦待機模式以防止訓練中斷。
根據你使用的可執行檔案(windows、ubuntu、mac),訓練命令會像這樣(你的可執行檔案路徑可能不同,所以執行前請務必檢查)。
對於 Windows,它可能看起來像這樣
mlagents-learn ./config/poca/SoccerTwos.yaml --env=./training-envs-executables/SoccerTwos.exe --run-id="SoccerTwos" --no-graphics對於 Mac,它可能看起來像這樣
mlagents-learn ./config/poca/SoccerTwos.yaml --env=./training-envs-executables/SoccerTwos/SoccerTwos.app --run-id="SoccerTwos" --no-graphics可執行檔案包含 8 份 SoccerTwos 副本。
⚠️ 在達到 2M 步之前,如果 ELO 分數沒有顯著增加(甚至降至 1200 以下),這是正常的,因為你的智慧體在能夠進球之前大部分時間都會在場上隨機移動。
⚠️ 你可以使用 Ctrl + C 停止訓練,但請注意只輸入一次此命令來停止訓練,因為 MLAgents 需要在關閉執行之前生成一個最終的 .onnx 檔案。
步驟 5:將智慧體推送到 Hugging Face Hub
現在我們已經訓練了我們的智慧體,我們已經準備好將它們推送到 Hub,以便參與 AI 對 AI 挑戰並在瀏覽器中視覺化它們的執行情況🔥。
為了能夠與社群分享你的模型,還有三個步驟需要遵循
1️⃣(如果尚未完成)建立 HF 賬戶 ➡ https://huggingface.co/join
2️⃣ 登入並從 Hugging Face 網站儲存你的身份驗證令牌。
建立一個新令牌(https://huggingface.co/settings/tokens)具有寫入許可權
複製令牌,執行此命令,然後貼上令牌
huggingface-cli login
然後,我們需要執行 mlagents-push-to-hf。
我們定義了四個引數
-run-id:訓練執行 ID 的名稱。-local-dir:智慧體儲存的位置,是 results/<run_id name>,所以我的情況是 results/First Training。-repo-id:您要建立或更新的 Hugging Face 倉庫的名稱。它總是 <您的 huggingface 使用者名稱>/<倉庫名稱> 如果倉庫不存在,它將自動建立--commit-message:由於 HF 倉庫是 git 倉庫,您需要提供一個提交訊息。
在我的例子中
mlagents-push-to-hf --run-id="SoccerTwos" --local-dir="./results/SoccerTwos" --repo-id="ThomasSimonini/poca-SoccerTwos" --commit-message="First Push"`mlagents-push-to-hf --run-id= # Add your run id --local-dir= # Your local dir --repo-id= # Your repo id --commit-message="First Push"如果一切順利,過程結束時您應該會看到這個(但 URL 不同😆)
您的模型已推送到 Hub。您可以在此處檢視您的模型:https://huggingface.co/ThomasSimonini/poca-SoccerTwos
這是您的模型連結。它包含一個模型卡,解釋瞭如何使用它,您的 Tensorboard 和您的配置檔案。最棒的是它是一個 git 倉庫,這意味著您可以有不同的提交,透過新的推送更新您的倉庫等。
步驟 6:驗證您的模型是否已準備好參加 AI vs AI 挑戰
現在你的模型已推送到 Hub,它將自動新增到 AI vs AI 挑戰的模型池中。 鑑於我們每 4 小時進行一次比賽,你的模型可能需要一些時間才能新增到排行榜。
但為了確保一切正常,你需要檢查
- 你的模型中是否有這個標籤:ML-Agents-SoccerTwos。這是我們用來選擇新增到挑戰池中的模型的標籤。要做到這一點,請訪問你的模型並檢查標籤
如果不是,你只需要修改 README 並新增它
- 你有一個
SoccerTwos.onnx檔案
我們強烈建議您在推送到 Hub 時建立一個新模型,如果您想再次訓練它或訓練一個新版本。
步驟 7:在我們的演示中視覺化一些比賽
現在你的模型已成為 AI vs AI 挑戰的一部分,你可以視覺化它與其他模型的表現:https://huggingface.co/spaces/unity/ML-Agents-SoccerTwos
為此,你只需前往此演示
- 選擇您的模型作為藍隊(或者如果您更喜歡紫隊),然後選擇另一個模型進行比賽。與您的模型進行比較的最佳對手是排行榜上排名靠前的模型或基線模型。
您即時看到的比賽不用於計算您的結果,但它們是視覺化您的智慧體表現好壞的好方法。
別忘了在 Discord 的 #rl-i-made-this 頻道分享你的智慧體獲得的最高分哦!🔥
< > 在 GitHub 上更新