Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

編輯:LRS

【新智元導讀】2020年DeepMind就推出了他們的強化學習框架Acme,但缺少教程和入門材料。倫敦政經博士用了一次之後直呼好用,立刻寫了一篇部落格自發推廣!

研究強化學習的你還在苦於重複造輪子嗎?苦於尋找執行環境嗎?

DeepMind給你帶來了Acme框架!

Acme是一個基於 python 的強化學習研究框架,2020年由 Google 的 DeepMind 開源。這個框架簡化了新型 RL 智慧體(agent)的開發,加快了 RL 研究的步伐。

DeepMind 是強化學習和人工智慧研究的先行者,根據他們自己的研究人員所說,Acme 已經成為 DeepMind 的日常使用的框架了。

目前Acme在Git已經獲得了超過2。1k個星星。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

Acme的學習曲線也是相當平緩的。但由於Acme有多個不同複雜程度的介面作為切入點,也就是說,這個框架不僅適用於高階研究人員,而且允許初學者實現甚至是簡單的演算法,類似於 TensorFlow 和 PyTorch 能夠同時被初學者和專家所使用。

但這個框架唯一的缺點就是,由於框架仍然是相當新的,沒有真正完整的文件可用,也沒有任何優秀的教程。

針對這個問題,倫敦政治經濟學院一個博士生寫了一篇教學部落格,幫助瞭解Acme框架,據作者所說,這篇教程文章並不打算成為或取代一個完整的文件,而是對 Acme 的一個簡潔、實用的介紹。最重要的是,它應該讓讀者瞭解框架底層的設計選擇,以及這對 RL 演算法的實現意味著什麼。

Acme的基本架構

以21點遊戲(BlackJack)作為例子來介紹框架。

Acme 的智慧體的執行環境沒有設計與Gym執行環境互動,而是採用DeepMind 自己建立的 RL 環境 API。它們的區別主要在於時間步是如何表示的。

幸運的是, Acme 的開發人員已經為Gym環境提供了包裝器函式。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

21點有32 x 11 x 2個狀態,儘管並不是所有這些狀態都能在一場比賽中實際發生,並且有兩個action可選,hit或是stick。

三個重要的角色分別是actor, learner, 智慧體agent。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

learner使用actor收集的資料來學習或改進策略,通常採用迭代的線上方式。例如,學習可能包括更新神經網路的引數。新的引數被傳遞給actor,然後actor根據更新的策略進行操作。

智慧體只是簡單地將行為和學習元件結合起來,但是通常不需要實現額外的強化學習邏輯。下面的圖片包含了所有三個元件。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

這種將actor、learner和agent分解的主要原因之一是為了促進分散式強化學習。如果我們不關心這些,或者演算法足夠簡單,那麼也可以只實現actor,並簡單地將學習步驟整合到actor的更新方法中。

例如,下面的隨機智慧體繼承自 acme的Actor類。開發人員必須實現的方法是 select_action、 observe_first、observe 和 update。正如剛才提到的,後者是沒有額外的learner組成部分的學習。

注意,這個agent將以同樣的方式工作,而不會子類化 acme。Actor。基類僅確定必須覆蓋的方法。這還確保agent按照預期的方式與其他 Acme 元件整合,例如環境迴圈(environment loop)。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

這個agent使用一個隨機選擇hit或stick的策略,但是通常框架允許您在如何實現策略方面有很大的靈活性。後面還會實現一個貪婪的政策。

在其他情況下,策略可能包含一個神經網路,可以使用 TensorFlow、 PyTorch 或 JAX 來實現它。在這個意義上,Acme 是框架是不可知的,可以將它與任何機器學習庫結合起來。

在更新方法中,actor通常只從learner中提取最新的引數。

但是,如果不使用單獨的學習者,那麼 RL 邏輯將進入update方法。

一個 強化學習演算法通常由一個迴圈組成,每個迴圈由四個步驟組成,重複這四個步驟,直到達到一個終止狀態。

1、觀察狀態

2、根據行為策略選擇下一步行動

3、觀察獎勵

4、更新策略

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

在大多數情況下,這個迴圈總是完全相同的。

方便的是,在 Acme 中有一個快捷方式: EnvironmentLoop,它執行的步驟幾乎與上面看到的步驟一模一樣。只需傳遞環境和代理例項,然後可以使用單行程式碼執行單個事件或任意多個事件。還有一些記錄器可以跟蹤重要的指標,比如每一個迭代採取的步驟數和收集到的獎勵。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

SARSA 智慧體

SARSA 是一個基於策略的演算法,其更新依賴於狀態(state)、行動(action)、獎勵(reward)、下一個狀態(next state)和下一個行動(next action)而得名。

首先,在智慧體的 __init__ 方法中,我們初始化 Q、狀態動作值矩陣和行為策略,這是一個 epsilon 貪婪策略。還要注意,這個代理必須始終儲存它的上一個 timestep、 action 和下一個 timestep,因為它們在更新步驟中是必需的。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

在observe函式中,通常沒有什麼必須做的事。

在這種情況下,我們只是儲存觀察到的時間步和所採取的操作,然而,這並不總是必要的。例如,有時可能希望將時間步驟(和整個軌跡)儲存在資料集或重播緩衝區中。

Acme 還為此提供了資料集和額外的元件。事實上,還有一個由 DeepMind 開發的Reverb庫用來做這件事。

上面的 transform_state 方法只是一個輔助函式,用於將狀態轉換為正確的格式,以便正確地對 Q 矩陣進行索引。

最後,訓練 SARSA 的環境為500,000步。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

Q learning 智慧體

下面的 Q learning 智慧體與 SARSA 智慧體非常相似。它們的不同之處僅在於如何更新 Q 矩陣。這是因為 Q 學習是一種非策略演算法。

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

Acme框架真香!用過一次後 倫敦博士撰文大讚DeepMind強化學習框架

部落格作者認為, Acme 是一個非常好的強化學習框架,因為你不需要從頭開發你的演算法。所以,與其自己琢磨如何編寫可讀和可重複的 RL 程式碼,你可以依靠 DeepMind 的聰明的研究人員和開發人員,他們已經為你做到了。

在他們的倉庫中,Deep Q-Networks (DQN)、Deep Deterministic Policy Gradient(DDPG)、Monte Carlo Tree Search (MCTS)、Behavior Cloning(BC)、 IMPALA 等常用演算法的實現。

參考資料:

https://towardsdatascience。com/deepminds-reinforcement-learning-framework-acme-87934fa223bf