該儲存庫包含 Motif 的 PyTorch 程式碼,使用源自法學碩士偏好的獎勵函數在 NetHack 上訓練 AI 代理程式。
主題:人工智慧回饋的內在動機
作者:Martin Klissarov* 和 Pierluca D'Oro*、Shagun Sodhani、Roberta Raileanu、Pierre-Luc Bacon、Pascal Vincent、Amy Zhang 和 Mikael Henaff
Motif 引出大型語言模型 (LLM) 對來自 NetHack 上收集的交互資料集的標題觀察對的偏好。它會自動將法學碩士的常識提煉成獎勵函數,用於透過強化學習來訓練代理。
為了方便比較,我們在pickle檔案motif_results.pkl
中提供訓練曲線,其中包含以任務為鍵的字典。對於每個任務,我們提供了多個種子的 Motif 和基準的時間步長和平均回報清單。
如下圖所示,Motif 有三個階段:
我們透過提供必要的資料集、命令和原始結果來重現論文中的實驗來詳細介紹每個階段。
我們透過 NetHack 學習環境評估 Motif 在具有挑戰性、開放式和程式生成的 NetHack 遊戲中的表現。我們研究了 Motif 如何主要產生直觀的人類行為(可以透過及時修改來輕鬆控制)及其擴展屬性。
要安裝整個管道所需的依賴項,只需執行pip install -r requirements.txt
。
在第一階段,我們使用經過強化學習訓練的代理人收集的標題(即來自遊戲的訊息)的觀察對資料集,以最大化遊戲得分。我們在此存儲庫中提供資料集。我們將不同的部分儲存到motif_dataset_zipped
目錄中,可以使用以下命令解壓縮。
cat motif_dataset_zipped/motif_dataset_part_* > motif_dataset.zip; unzip motif_dataset.zip; rm motif_dataset.zip
我們提供的資料集包含 Llama 2 模型給出的一組偏好,包含在preference/
目錄中,並使用論文中描述的不同提示。包含註解的.npy
檔案的名稱遵循範本llama{size}b_msg_{instruction}_{version}
,其中size
是集合{7,13,70}
中的 LLM 大小, instruction
是引入到從集合{defaultgoal, zeroknowledge, combat, gold, stairs}
給 LLM 的提示, version
是集合{default, reworded}
中要使用的提示範本的版本。在這裡,我們提供了可用註釋的摘要:
註解 | 論文中的用例 |
---|---|
llama70b_msg_defaultgoal_default | 主要實驗 |
llama70b_msg_combat_default | 轉向怪物殺手的行為 |
llama70b_msg_gold_default | 引導黃金收藏家的行為 |
llama70b_msg_stairs_default | 轉向下降行為 |
llama7b_msg_defaultgoal_default | 縮放實驗 |
llama13b_msg_defaultgoal_default | 縮放實驗 |
llama70b_msg_zeroknowledge_default | 零知識提示實驗 |
llama70b_msg_defaultgoal_reworded | 及時改寫實驗 |
為了建立註釋,我們使用 vLLM 和 Llama 2 的聊天版本。 )。
註解腳本假設資料集將使用n-annotation-chunks
參數以不同的區塊進行註解。這使得進程可以根據資源的可用性進行並行化,並且對於重新啟動/搶佔具有穩健性。若要使用單一區塊運行(即處理整個資料集)並使用預設提示範本和任務規範進行註釋,請執行下列命令。
python -m scripts.annotate_pairs_dataset --directory motif_dataset
--prompt-version default --goal-key defaultgoal
--n-annotation-chunks 1 --chunk-number 0
--llm-size 70 --num-gpus 8
請注意,預設行為透過將註解附加到指定配置的檔案來恢復註解過程,除非使用--ignore-existing
標誌另有指示。也可以使用--custom-annotator-string
標誌手動選擇為註解建立的「.npy」檔案的名稱。可以使用具有 32GB 記憶體的單一 GPU 使用--llm-size 7
和--llm-size 13
進行註解。您可以使用--llm-size 70
和 8-GPU 節點進行註解。我們在這裡提供了 NVIDIA V100s 32G GPU 對 10 萬對資料集註釋時間的粗略估計,這應該能夠粗略地重現我們的大部分結果(使用 50 萬對獲得)。
模型 | 要註釋的資源 |
---|---|
駱駝 2 7b | 約 32 個 GPU 小時 |
駱駝 2 13b | 約 40 個 GPU 小時 |
駱駝 2 70b | 約 72 個 GPU 小時 |
在第二階段,我們透過交叉熵將LLM的偏好提煉成獎勵函數。若要使用預設超參數啟動獎勵訓練,請使用下列命令。
python -m scripts.train_reward --batch_size 1024 --num_workers 40
--reward_lr 1e-5 --num_epochs 10 --seed 777
--dataset_dir motif_dataset --annotator llama70b_msg_defaultgoal_default
--experiment standard_reward --train_dir train_dir/reward_saving_dir
獎勵函數將透過位於--dataset_dir
中的annotator
的註解進行訓練。產生的函數將保存在子資料夾--experiment
下的train_dir
中。
最後,我們透過強化學習使用由此產生的獎勵函數來訓練代理。要在NetHackScore-v1
任務上訓練代理,並使用用於結合內在和外在獎勵的實驗的預設超參數,您可以使用以下命令。
python -m scripts.main --algo APPO --env nle_fixed_eat_action --num_workers 24
--num_envs_per_worker 20 --batch_size 4096 --reward_scale 0.1 --obs_scale 255.0
--train_for_env_steps 2_000_000_000 --save_every_steps 10_000_000
--keep_checkpoints 5 --stats_avg 1000 --seed 777 --reward_dir train_dir/reward_saving_dir/standard_reward/
--experiment standard_motif --train_dir train_dir/rl_saving_dir
--extrinsic_reward 0.1 --llm_reward 0.1 --reward_encoder nle_torchbeast_encoder
--root_env NetHackScore-v1 --beta_count_exponent 3 --eps_threshold_quantile 0.5
要更改任務,只需修改--root_env
參數即可。下表明確說明了與本文中提出的實驗相符所需的值。 NetHackScore-v1
任務的extrinsic_reward
值為0.1
,而所有其他任務的值為10.0
,以激勵智能體達成目標。
環境 | root_env |
---|---|
分數 | NetHackScore-v1 |
樓梯 | NetHackStaircase-v1 |
樓梯(3層) | NetHackStaircaseLvl3-v1 |
樓梯(4層) | NetHackStaircaseLvl4-v1 |
甲骨文 | NetHackOracle-v1 |
神諭清醒 | NetHackOracleSober-v1 |
此外,如果您想只使用來自 LLM 的內在獎勵而不是來自環境的獎勵來訓練代理,只需設定--extrinsic_reward 0.0
。在僅內在獎勵實驗中,我們僅在智能體死亡時終止情節,而不是在智能體達到目標時終止。下表列出了這些修改的環境。
環境 | root_env |
---|---|
樓梯(第 3 層)- 僅內在 | NetHackStaircaseLvl3Continual-v1 |
樓梯(4 層)- 僅內在 | NetHackStaircaseLvl4Continual-v1 |
我們還提供了一個腳本,用於視覺化經過訓練的 RL 代理程式。這可以提供對其行為的重要見解,而且還將產生每個情節的重要訊息,這可以幫助理解它正在嘗試優化的內容。您只需執行以下命令即可。
python -m scripts.visualize --train_dir train_dir/rl_saving_dir --experiment standard_motif
如果您以我們的工作為基礎或發現它有用,請使用以下 bibtex 來引用它。
@article{klissarovdoro2023motif,
title={Motif: Intrinsic Motivation From Artificial Intelligence Feedback},
author={Klissarov, Martin and D’Oro, Pierluca and Sodhani, Shagun and Raileanu, Roberta and Bacon, Pierre-Luc and Vincent, Pascal and Zhang, Amy and Henaff, Mikael},
year={2023},
month={9},
journal={arXiv preprint arXiv:2310.00166}
}
Motif 的大部分內容均根據 CC-BY-NC 獲得許可,但該項目的部分內容可根據單獨的許可條款獲得:sample-factory 根據 MIT 許可獲得許可。