5種用于Python的強化學習框架
從頭開始編寫自己的Reinforcement Learning實施可能會花費很多工作,但是您不需要這樣做。 有許多出色,簡單和免費的框架可讓您在幾分鐘之內開始學習。

有很多標準的庫用于監督和無監督的機器學習,例如Scikit-learn,XGBoost甚至Tensorflow,這些庫可以立即讓您入門,并且可以在線找到支持的日志。 可悲的是,對于強化學習(RL)并非如此。
并不是說沒有框架,事實上,有很多RL框架。 問題是尚無標準,因此很難找到在線開始,解決問題或定制解決方案的支持。 這可能是由于以下事實造成的:盡管RL是一個非常受歡迎的研究主題,但它仍處于行業實施和使用的初期。
但這并不意味著就沒有強大的框架可以幫助您啟動并使用RL解決您喜歡的任何問題。 我在這里列出了一些我逐漸了解和使用的框架,以及它們的優缺點。 我希望這能為您提供有關當前可用的RL框架的快速概述,以便您可以選擇更適合您的需求的框架。
1. Keras-RL
我必須從整個列表中承認,這是我的最愛。 我認為,到目前為止,它是幾種RL算法的代碼實現的最簡單的理解,包括深度Q學習(DQN),雙DQN,深度確定性策略梯度(DDPG),連續DQN(CDQN或NAF),交叉熵方法(CEM) ,決斗DQN)和SARSA。 當我說"最容易理解的代碼"時,我指的不是使用它,而是對其進行自定義并將其用作您的項目的構建塊*。 Keras-RL github還包含一些示例,您可以立即使用它們來入門。 它當然使用Keras,您可以將其與Tensorflow或PyTorch一起使用。
不幸的是,Keras-RL尚未得到很好的維護,其官方文檔也不是最好的。 這為這個名為Keras-RL2的項目的分支提供了啟發。
(*)我使用此框架的目的是什么? 好吧,很高興您問-是我嗎? 我已經使用此框架創建了定制的Tutored DQN代理,您可以在此處了解更多信息。
2. Keras-RL2
Keras-RL2是Keras-RL的一個分支,因此它與Keras-RL2共享對相同代理的支持,并且易于定制。 這里最大的變化是Keras-RL2得到了更好的維護,并使用了Tensorflow 2.1.0。 不幸的是,該庫沒有文檔,即使Keras-RL的文檔也可以輕松地用于此fork。
3. OpenAI Baselines
OpenAI Baselines是OpenAI的一組高質量RL算法實現,OpenAI是AI尤其是RL研究和開發的領先公司之一。 它的構想是使研究人員可以輕松地比較其RL算法,并以OpenAI的最新技術(即名稱)為基準。 該框架包含許多流行代理的實現,例如A2C,DDPG,DQN,PPO2和TRPO。
> [plots from Stable baselines benchmark.]
不利的一面是,盡管在代碼上有很多有用的注釋,但OpenAI Baselines的文檔卻不夠完善。 另外,由于它被開發為用作基準而不是用作構建基塊,因此如果您要為項目自定義或修改某些代理,則代碼不是那么友好。 實際上,下一個框架是此基礎上的一個分支,可以解決大多數這些問題。
4. Stable Baselines
> [image from Stable Baselines documentation.]
Stable Baselines 是OpenAI Baselines的一個分支,具有主要的結構重構和代碼清除功能。 其官方文檔站點中列出的更改如下:
- 所有算法的統一結構
- 符合PEP8(統一代碼樣式)
- 記錄的功能和類
- 更多測試和更多代碼覆蓋率
- 附加算法:SAC和TD3(+對DQN,DDPG,SAC和TD3的HER支持)
我過去曾親自使用過"Stable Baselines",可以確認它確實有據可查且易于使用。 甚至可以使用一個班輪來訓練OpenAI Gym環境的代理:
- from stable_baselines import PPO2PPO2model = PPO2('MlpPolicy', 'CartPole-v1').learn(10000)
5. Acme
Acme來自DeepMind,它可能是研究RL的最著名公司。 這樣,它已被開發用于構建可讀的,高效的,面向研究的RL算法,并且包含幾種最新代理的實現,例如D4PG,DQN,R2D2,R2D3等。 Acme使用Tensorflow作為后端,并且某些代理實現還使用JAX和Tensorflow的組合。
Acme的開發牢記要使其代碼盡可能地可重用,因此其設計是模塊化的,易于定制。 它的文檔并不豐富,但是足以為您很好地介紹該庫,并且還提供了一些示例來幫助您入門Jupyter筆記本。
總結
此處列出的所有框架都是任何RL項目的可靠選擇。 根據您的喜好以及要使用的功能來決定使用哪個。 為了更好地可視化每個框架及其優缺點,我做了以下視覺摘要:
- Keras-RL — Github:RL算法的選擇:☆☆☆文檔:☆☆☆自定義:☆☆☆☆☆維護:☆后端:Keras和Tensorflow 1.14。
- Keras-RL2 — Github:RL算法的選擇:☆☆☆文檔:不可用自定義:☆☆☆☆☆維護:☆☆☆后端:Keras and Tensorflow 2.1.0。
- OpenAI基準— Github:RL算法的選擇:☆☆☆文檔:☆☆自定義:☆☆維護:☆☆☆后端:Tensorflow 1.14。
- 穩定的基線— Github:RL算法的選擇:☆☆☆☆文檔:☆☆☆☆☆自定義:☆☆☆維護:☆☆☆☆☆后端:Tensorflow 1.14。
- Acme-Github:RL算法的選擇:☆☆☆☆文檔:☆☆☆自定義:☆☆☆☆維護:☆☆☆☆☆后端:Tensorflow v2 +和JAX
如果您已經決定使用哪種框架,那么現在只需要一個環境即可。 您可以開始使用OpenAI Gym,在這些框架的大多數示例中已經使用了OpenAI Gym,但是如果您想在其他任務(例如交易股票,建立網絡關系或提出建議)上嘗試RL,則可以找到易于使用的清單。