Acme : 概要 – DeepMind 強化学習ライブラリ (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 06/12/2020
* 本ページは、Acme の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
概要
Acme は強化学習 (RL) エージェントとエージェント・ビルディングブロックのライブラリです。Acme はポピュラーなアルゴリズムの参照実装としてそして強力なベースラインとして役立つような、単純で、効率的で可読なエージェントを公開するための努力をする一方で、新規の研究を行なうために十分な柔軟性を依然として提供しています。Acme の設計はまた複雑さの異なるレベルで RL 問題への複数のエントリポイントを提供することも試みています。
概要
Acme を使用して素早く始めることを単に望む場合、ライブラリについて知るべき主要なことは幾つかのエージェント実装と次のように利用できる EnvironmentLoop プリミティブを公開していることです :
loop = acme.EnvironmentLoop(environment, agent) loop.run()
これは単純なループを実行します、そこでは与えられたエージェントは環境と相互作用してこの相互作用から学習します。これはエージェント・インスタンス (その実装は ここ で見つけられます) と環境インスタンスを仮定します、これは DeepMind Environment API を実装しています。個々のエージェントはまた実装をより詳細に説明する README.md ファイルを含みます。もちろん、これら 2 行のコードは描写を明確に単純化しています。実際に始めるために、examples サブディレクトリで見つかる詳細なワーキングコードサンプルを見てください、これらは幾つかのエージェントと環境をどのようにインスタンス化するかを示します。クイックスタート・ノートブック もまた含みます。
Acme はまた、エージェントアルゴリズムに深く潜る、あるいはそれらをより複雑な設定で利用する一方で、このレベルの単純性を維持しようとします。基礎的なコンポーネントのより詳細な説明とともに Acme の概要は ドキュメント を参照することにより見つけられます。そして典型的な Acme エージェントの裏の基礎的なコンポーネントそしてこれらが新規の実装を形成するためにどのように結合できるかをより詳細に説明する チュートリアルノートブック も含みます。
インストール
Python 3.6 と 3.7 上で acme をテストしました。
- オプション: バージョン衝突を避けるために依存性を管理するため Python 仮想環境を使用することを強く推奨します :
python3 -m venv acme source acme/bin/activate pip install --upgrade pip setuptools
- (Reverb, ストレージ・バックエンドを含む) コアライブラリをインストールするには :
pip install dm-acme pip install dm-acme[reverb]
- JAX or TensorFlow ベースのエージェントのための依存性をインストールするには :
pip install dm-acme[tf] # and/or pip install dm-acme[jax]
- 最後に、環境 (gym, dm_control, bsuite) をインストールするには :
pip install dm-acme[envs]
Citing Acme
(訳注: 必要な場合には 原文 を参照してください。)
docs/index.md
概要
Acme は強化学習 (RL) エージェントとエージェント・ビルディングブロックのライブラリです。Acme は全体として新規の実装を作成するために十分な柔軟性を依然として提供する一方で、単純で、効率的で可読なエージェントベースラインを公開する努力をしています。Acme の設計は複雑さの異なるレベルで RL 問題への複数のエントリポイントを提供することを試みています。最初のエントリポイント – そして始めるに最も容易な方法 – は最先端技術のベースライン・エージェントの一つを単に実行することによります。これは単純に環境ループを使用してエージェント (or アクター) インスタンスを環境に接続することにより成されます。これは RL に共通な環境との相互作用の標準モードをインスタンス化して次の図で示されます :
この設定はもちろん、任意の RL 実践者に見覚えがあるでしょう、そしてこれによって貴方は始めて 2, 3 行のコードで Acme エージェントを実行することができます。Acme により利用される環境は DeepMind Environment API に従うことが想定されます、これは環境をある初期状態にリセットすることと環境をステップさせて観測を生成することの両者への単純なメカニズムを提供します。
Acme のアクターは 3 つの主要なメソッドを公開します : select_action は取られるアクションを返します、observe は環境からの観測を記録します、そして update メソッドです。実際に、これらのメソッドを利用することにより、上で示された EnvironmentLoop は以下によりおおよそ近似できます :
while True: # Make an initial observation. step = environment.reset() actor.observe_first(step.observation) while not step.last(): # Evaluate the policy and take a step in the environment. action = actor.select_action(step.observation) step = environment.step(action) # Make an observation and update the actor. actor.observe(action, next_step=step) actor.update()
NOTE : 現在 Acme では利用するデータを観測するためのデフォルトメソッドは observe/observe_last メソッドを利用しています (上の反対)。これは上のために段階的に廃止され、これらが間もなくデフォルトになるでしょう。
内部的には、Acme を使用して構築されるエージェントはモジュール acting と learning コンポーネントで書かれています。acting により経験を生成するために使用されるサブコンポーネントを参照して learning により適切なアクション選択モデル (典型的にはニューラルネットワーク) を訓練するプロセスを参照しています。エージェントのこの分解の図は下で与えられます :
表面的にはこれはマルチエージェントの間で同じ実験生成コードを共有することを可能にします。より重要なことに、この精神は分散エージェントがどのように構築されるかという方法を大きく単純化します。
分散エージェントはシングルプロセスの対応物と総て同じコンポーネントを使用して構築されますが、行動、学習、評価、再生等のためのコンポーネントが各々それら自身のプロセスで動作するように分割されます。この図は下で示されます、そしてここではそれが単に多くの異なるアクター/環境とともに、上と同じテンプレートに従うことを見れるでしょう :
これは新規のエージェントを設計して既存のエージェントをテストするプロセスを非常に単純化します、そこではスケールの違いは大雑把には無視できます。これはバッチや (そこではデータ生成プロセスはなく固定データセットだけの) オフライン設定への幅広いスケールダウンも可能にします :
最後に、Acme はまたエージェントコードを可読に保持し、そして次のエージェントを書くプロセスを遥かに容易にする幾つかの有用なユティリティも含みます。チェックポイントからスナップショット、ロギングの様々な形式、そして他の低位計算に渡るこれらのコンポーネントのための一般的なツールを提供します。上で説明された構造に加えてこれらのコンポーネントのより多くの情報については、Acme コンポーネント のより詳細な議論を見るか、様々な エージェント の完全な実装を見てください。
以上