尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
作者 | Jesus Rodriguez
譯者 | 夕顏
出品 | AI科技大本營(ID:rgznai100)
【導讀】近幾年,深度強化學習(DRL)一直是人工智能取得最大突破的核心。盡管取得了很多進展,但由於缺乏工具和庫,DRL 方法仍難以應用於主流的解決方案。因此,DRL 主要以研究形式存在,並未在現實世界的機器學習解決方案中得到大量應用。解決這個問題需要更好的工具和框架。而在當前的 AI 領域,DeepMind 在推動 DRL 研發方面做了大量工作,包括構建了許多專有工具和框架,以大規模地簡化 DRL agent 訓練、實驗和管理。
最近,DeepMind 又默默開源了三種 DRL 框架:OpenSpiel、SpriteWorld 和 bsuite,用於簡化 DRL 應用。
【導讀】近幾年,深度強化學習(DRL)一直是人工智能取得最大突破的核心。盡管取得了很多進展,但由於缺乏工具和庫,DRL 方法仍難以應用於主流的解決方案。因此,DRL 主要以研究形式存在,並未在現實世界的機器學習解決方案中得到大量應用。解決這個問題需要更好的工具和框架。而在當前的 AI 領域,DeepMind 在推動 DRL 研發方面做了大量工作,包括構建了許多專有工具和框架,以大規模地簡化 DRL agent 訓練、實驗和管理。
最近,DeepMind 又默默開源了三種 DRL 框架:OpenSpiel、SpriteWorld 和 bsuite,用於簡化 DRL 應用。
作為一種新興的深度學習技術,採用 DRL 面臨著簡單做到算法之外的諸多挑戰,如訓練數據集、環境、監測優化工具和精心設計的實驗,以簡化 DRL 技術的採用。考慮到機制與大多數傳統的機器學習方法不同(DRL agent 嘗試在給定環境中通過反復試驗來完成任務),應用 DRL 更是困難。在這種情況下,環境和實驗的穩健性在 DRL agent 開發的知識中起著最基本的作用。
下面我們開門見山,來看看這三種框架到底有什麼特別之處,以及如何使用。
OpenSpiel
展開全文
GitHub:https://github.com/deepmind/open_spiel
遊戲在 DRL agent的 訓練中發揮著重要作用。與其他數據集一樣,遊戲本質上基於試驗和獎勵機制,可用於訓練 DRL agent。但是,正如我們所想,遊戲環境的複雜度還遠遠不夠。
OpenSpiel 是一系列環境和算法,用於研究一般強化學習和遊戲中的搜尋/規劃。OpenSpiel 的目的是通過與一般遊戲類似的方式促進跨多種不同遊戲類型的一般多智能體強化學習,但是重點是強調學習而不是競爭形式。當前版本的 OpenSpiel 包含 20 多種遊戲的不同類型(完美信息、同步移動、不完美信息、網格世界遊戲、博弈遊戲和某些普通形式/矩陣遊戲)做到。
核心的 OpenSpiel 做到基於 C ++ 和 Python 綁定,這有助於在不同的深度學習框架中採用。該框架包含一系列遊戲,允許 DRL agent 學會合作和競爭行為。同時,OpenSpiel 還包括搜尋、優化和單一 agent 等多種 DRL 算法組合。
安裝
摘要
安裝系統包並下載一些依賴項。只需要運行一次。
安裝 Python 依賴項,例如在 Python 3 中使用 virtualenv:
使用 deactivate 退出虛擬環境。
構建並運行測試以檢查一切是否正常:
添加
到 ./venv/bin/activate 或你的 〜/ .bashrc ,以便從任何地方導入 OpenSpiel。
為了確保 OpenSpiel 在默認配置上運行,我們使用 python3 命令而不是 python(現在 Linux 版本上仍默認為 Python 2)。
開發者指南
代碼結構
一般來說,open_spiel 下的目錄是 C ++(integration_tests 和 python 除外)。open_spiel / python 中提供了類似的結構,包含 Python 等效代碼。
一些頂級目錄是特殊的:
-
open_spiel / integration_tests:所有遊戲的通用(python)測試。
-
open_spiel / tests:C ++ 常用測試實用程序。
-
open_spiel / s:用於開發(構建、運行測試等)的腳本。
open_spiel / integration_tests:所有遊戲的通用(python)測試。
open_spiel / tests:C ++ 常用測試實用程序。
open_spiel / s:用於開發(構建、運行測試等)的腳本。
例如,支持 C ++:
-
open_spiel /:包含遊戲抽象 C ++ API。
-
open_spiel / games:包含 games ++做到。
-
open_spiel / algorithms:在 OpenSpiel 中做到的 C ++ 算法。
-
open_spiel / examples:C ++ 示例。
-
open_spiel / tests:C ++ 常用測試實用程序。
open_spiel /:包含遊戲抽象 C ++ API。
open_spiel / games:包含 games ++做到。
open_spiel / algorithms:在 OpenSpiel 中做到的 C ++ 算法。
open_spiel / examples:C ++ 示例。
open_spiel / tests:C ++ 常用測試實用程序。
支持 Python:
-
open_spiel / python / examples:Python 示例。
-
open_spiel / python / algorithms /:Python算法。
open_spiel / python / examples:Python 示例。
open_spiel / python / algorithms /:Python算法。
添加遊戲
這里僅介紹添加新遊戲最簡單、最快捷的方式。首先要了解通用 API(參見 spiel.h)。
從 games/中選擇要復制的遊戲。推薦遊戲:Tic-Tac-Toe 和 Breakthrough,因為它們包含完美信息,沒有偶然事件,Backgammon 或 Pig 用於完美的信息遊戲與偶然事件,Goofspiel 和Oshi-Zumo 用於同步移動遊戲,Leduc 撲克和 Liar 骰子用於不完美信息遊戲。以下步驟以 Tic-Tac-Toe 為例講解。
將標頭和源:tic_tac_toe.h,tic_tac_toe.cc和tic_tac_toe_test.cc 復制到 new_game.h,new_game.cc 和 new_game_test.cc。
配置 CMake:
-
將新遊戲的源文件添加到 games / CMakeLists.txt。
-
將新遊戲的測試目標添加到 games / CMakeLists.txt。
-
將新遊戲的源文件添加到 games / CMakeLists.txt。
-
將新遊戲的測試目標添加到 games / CMakeLists.txt。
將新遊戲的源文件添加到 games / CMakeLists.txt。
將新遊戲的測試目標添加到 games / CMakeLists.txt。
更新樣板C ++代碼:
-
在 new_game.h 中,重命名文件頂部和底部的標題保護。
-
在新文件中,將最內層的命名空間從 tic_tac_toe 重命名為 new_game。
-
在新文件中,將 TicTacToeGame 和 TicTacToeState 重命名為 NewGameGame 和 NewGameState。
-
在 new_game.cc 的頂部,將短名稱更改為 new_game 並包含新遊戲的標題。
-
在 new_game.h 中,重命名文件頂部和底部的標題保護。
-
在新文件中,將最內層的命名空間從 tic_tac_toe 重命名為 new_game。
-
在新文件中,將 TicTacToeGame 和 TicTacToeState 重命名為 NewGameGame 和 NewGameState。
-
在 new_game.cc 的頂部,將短名稱更改為 new_game 並包含新遊戲的標題。
在 new_game.h 中,重命名文件頂部和底部的標題保護。
在新文件中,將最內層的命名空間從 tic_tac_toe 重命名為 new_game。
在新文件中,將 TicTacToeGame 和 TicTacToeState 重命名為 NewGameGame 和 NewGameState。
在 new_game.cc 的頂部,將短名稱更改為 new_game 並包含新遊戲的標題。
更新 Python 集成測試:
-
將簡短名稱添加到 integration_tests / api_test.py 中的已排除遊戲列表中。
-
在 python / tests / pyspiel_test.py 中將短名稱添加到預期遊戲列表中。
-
將簡短名稱添加到 integration_tests / api_test.py 中的已排除遊戲列表中。
-
在 python / tests / pyspiel_test.py 中將短名稱添加到預期遊戲列表中。
將簡短名稱添加到 integration_tests / api_test.py 中的已排除遊戲列表中。
在 python / tests / pyspiel_test.py 中將短名稱添加到預期遊戲列表中。
現在,你有了一個不同名稱的 Tic-Tac-Toe 復制遊戲。測試運行,並可以通過重建和運行示例 examples / example –game = new_game 來驗證它。
現在,更改 NewGameGame 和 NewGameState 中函數的做到以表示新遊戲的邏輯。你復制的遊戲中的大多數 API 函數都應該與原來的遊戲有區分度。如果沒有,那麼重合的每個API 函數都將在 spiel.h 中的超類中被完整記錄。
完成後,重建並重新運行測試以確保一切都順利(包括新遊戲測試!)。
更新 Python 集成測試:
-
運行 ./s/generate_new_playthrough.sh new_game 生成一些隨機遊戲,用於集成測試以防止任何回歸。open_spiel / integration_tests / playthrough_test.py 將自動加載遊戲並將它們與新生成的遊戲進行比較。
-
運行 ./s/generate_new_playthrough.sh new_game 生成一些隨機遊戲,用於集成測試以防止任何回歸。open_spiel / integration_tests / playthrough_test.py 將自動加載遊戲並將它們與新生成的遊戲進行比較。
運行 ./s/generate_new_playthrough.sh new_game 生成一些隨機遊戲,用於集成測試以防止任何回歸。open_spiel / integration_tests / playthrough_test.py 將自動加載遊戲並將它們與新生成的遊戲進行比較。
SpriteWorld
GitHub:https://github.com/deepmind/spriteworld
幾個月前,DeepMind 發表了一篇研究論文,介紹了一種好奇的基於對象的 seaRch Agent(COBRA),它使用強化學習來識別給定環境中的對象。COBRA agent 使用一系列二維遊戲進行訓練,其中數字可以自由移動。用於訓練 COBRA 的環境,正是 DeepMind 最近開源的 SpriteWorld。
Spriteworld 是一個基於 python 的強化學習環境,由一個可以自由移動的形狀簡單的二維競技場組成。更具體地說,SpriteWorld 是一個二維方形競技場,周圍可隨機放置數量可變的彩色精靈,但不會發生碰撞。SpriteWorld 環境基於一系列關鍵特徵:
-
多目標的競技場反映了現實世界的組合性,雜亂的物體場景可以共享特徵,還可以獨立移動。此外,它還可以測試與任務無關的特徵/對象的穩健性和組合泛化。
-
連續點擊推動動作空間的結構反映了世界空間和運動的結構。它還允許 agent 在任何方向上移動任何可見對象。
-
不以任何特殊方式提供對象的概念(例如,沒有動作空間的特定於對象的組件),agent 也完全可以發現。
多目標的競技場反映了現實世界的組合性,雜亂的物體場景可以共享特徵,還可以獨立移動。此外,它還可以測試與任務無關的特徵/對象的穩健性和組合泛化。
連續點擊推動動作空間的結構反映了世界空間和運動的結構。它還允許 agent 在任何方向上移動任何可見對象。
不以任何特殊方式提供對象的概念(例如,沒有動作空間的特定於對象的組件),agent 也完全可以發現。
SpriteWorld 針對三個主要任務訓練每個 DRL agent:
-
目標尋找。agent 必須將一組目標對象(可通過某些功能識別,例如「綠色」)帶到螢幕上的隱藏位置,忽略干擾對象(例如非綠色的對象)
-
排序。agent 必須根據對象的顏色將每個對象帶到目標位置。
-
聚類。agent 必須根據顏色將對象排列在群集中。
目標尋找。agent 必須將一組目標對象(可通過某些功能識別,例如「綠色」)帶到螢幕上的隱藏位置,忽略干擾對象(例如非綠色的對象)
排序。agent 必須根據對象的顏色將每個對象帶到目標位置。
聚類。agent 必須根據顏色將對象排列在群集中。
安裝
可以使用 pip 安裝 Spriteworld:
或者通過 Github:
或者通過簽出存儲庫的本地副本並運行:
最後一個選項是下載測試,演示 UI 和示例運行循環。
開始
前提
Spriteworld 依賴於numpy,six,absl,PIL,matplotlib,sklearn 和 dm_env。
演示
安裝完成後,您可以通過 run_demo.py 熟悉 Spriteworld:
創建自己的任務
在 spriteworld / tasks.py 中有三個任務:FindGoalPosition、Clustering 和 MetaAggregated。可以以多種方式進行配置和組合,以創建各種任務,包括 COBRA 論文中使用的所有任務。值得注意的是,可以參閱 spriteworld / configs / cobra / sorting.py,了解目標查找任務的組合。
你還可以創建新任務,重新使用這些構建塊,或創建全新類型的任務(只需確保從 spriteworld / tasks.AbstractTask 中繼承)。
運行agent
有關如何在 Spriteworld 任務上運行隨機 agent 的示例,請參閱 example_run_loop.py。如果你更喜歡 OpenAI Gym 環境界面,請參閱 spriteworld / gym_wrapper.py。
bsuite
GitHub:https://github.com/deepmind/bsuite
強化學習行為套件(bsuite,The Behaviour Suite for Reinforcement Learning )的目標是成為強化學習領域的 MNIST。具體來說,bsuite 是一系列用來突出 agent 可擴展性關鍵點的實驗。這些實驗易於測試和迭代,對基本問題,例如「探索」或「記憶」進行試驗。具體來說,bsuite 有兩個主要目標:
-
收集清晰、信息量大且可擴展的問題,以捕獲高效和通用學習算法設計中的關鍵問題。
-
通過在這些共享基準上的表現來研究 agent 行為。
收集清晰、信息量大且可擴展的問題,以捕獲高效和通用學習算法設計中的關鍵問題。
通過在這些共享基準上的表現來研究 agent 行為。
bsuite 當前的做到可以在不同環境中自動執行實驗,並收集可以簡化 DRL agent 訓練的相應指標。
如果你是一個 bsuite 新手,可以開始使用 colab 教程。這款 Jupyter 筆記本電腦配有免費的雲服務器,因此無需任何安裝即可立即開始編碼。在此之後,你可以按照以下說明在本地計算機上運行 bsuite。
安裝
我們已測試了 bsuiteon Python 3.6,且無維護 Python 2.7 版本的計劃。
安裝 bsuite,請運行該命令
或克隆該庫並運行
想要能夠編輯代碼的同時安裝軟件包(請參閱下面的基線),請運行
要同時安裝baselines//示例的依賴項(不包括Gym和Dopamine示例),請安裝:
加載環境
環境由 bsuite_id 字符串指定,例如「deep_sea / 7」。此字符串指定要使用的實驗和(索引)環境設置。
可以通過以下方式以編程方式訪問運行所有實驗所需的 bsuite_ids 序列:
該模塊還包括每個實驗名稱對應的大寫常量單 bsuite_ids,例如:
bsuite報告
你可以使用 bsuite 生成一個自動的 1 頁附錄,該附錄總結了強化學習算法的核心功能。本附錄與大多數主要的機器學習會議格式兼容。例如輸出運行,
由於篇幅有限,無法一一詳細介紹每個框架的具體使用方法,感興趣的朋友們可以在上文 GitHub 鏈接中查詢詳情情況和使用指南,以檢驗OpenSpiel、SpriteWorld 和 bsuite 的真正做到效果,並歡迎在留言中與我們交流上手體驗。
最後,相信隨著越來越多的深度強化學習工具和框架的湧現,把這項新興技術應用於現實世界的進程將大大加快,進一步推動 AI 研究和落地的進展。
https://towardsdatascience.com/deepmind-quietly-open-sourced-three-new-impressive-reinforcement-learning-frameworks-f99443910b16
(*本文為AI科技大本營整理文章,轉載請微信聯繫 1092722531)
◆
◆