ホーム » 強化学習 » Tensorforce : 基本 : イントロダクション & Getting Started

Tensorforce : 基本 : イントロダクション & Getting Started

Tensorforce 基本 : イントロダクション & Getting Started (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/24/2020 (0.5.4)

* 本ページは、Tensorforce : Basics の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

基本 : イントロダクション& Getting Started

Tensorforce はオープンソースの深層強化学習フレームワークで、研究と実践におけるアプリケーションのためのモジュール化された柔軟なライブラリ設計と簡単な使い勝手を重視しています。Tensorforce は Google の TensorFlow フレームワーク version 2.0 (!) の上に構築されていて Python 3 と互換です (Python 2 サポートは version 0.5 でドロップされました)。

Tensorforce は高位設計選択のセットに従います、これは他の類似のライブラリから差別化します :

  • モジュール式コンポーネントベースの設計: とりわけ、特徴実装はできる限り一般的に適用可能で構成可能であることを目標にしています、紹介するペーパーの詳細を忠実に似せるためにある程度のコストを潜在的に払いながら。
  • RL アルゴリズムとアプリケーションの分離: アルゴリズムは入力 (状態/観測) と出力 (アクション/決定)、更にアプリケーション環境との相互作用のタイプと構造に不可知論者です。
  • Full-on TensorFlow モデル: アプリケーション・プログラミング言語とは無関係に可搬な計算グラフを可能にし、そしてモデルの配備を容易にするため、制御フローを含む、強化学習ロジック全体は TensorFlow で実装されています。

 

Getting started

環境を初期化する

Environment.create(…) インターフェイスを通して環境を初期化することが推奨されます。

from tensorforce.environments import Environment

例えば、OpenAI CartPole 環境は次のように初期化できます :

environment = Environment.create(
    environment='gym', level='CartPole', max_episode_timesteps=500
)

Gym の事前定義されたバージョンもまたアクセス可能です :

environment = Environment.create(environment='gym', level='CartPole-v1')

代わりに、環境は config ファイルとして指定できます :

{
    "environment": "gym",
    "level": "CartPole"
}

環境 config ファイルはそれらのファイルパスを渡すことによりロードできます :

environment = Environment.create(
    environment='environment.json', max_episode_timesteps=500
)

カスタム Gym 環境が同じ方法で利用できますが、それに応じてインポートされて登録される対応するクラスを必要とします。

最後に、Tensorforce の Environment インターフェイスを使用してカスタム環境を実装することが可能です :

class CustomEnvironment(Environment):

    def __init__(self):
        super().__init__()

    def states(self):
        return dict(type='float', shape=(8,))

    def actions(self):
        return dict(type='int', num_values=4)

    # Optional, should only be defined if environment has a natural maximum
    # episode length
    def max_episode_timesteps(self):
        return super().max_episode_timesteps()

    # Optional
    def close(self):
        super().close()

    def reset(self):
        state = np.random.random(size=(8,))
        return state

    def execute(self, actions):
        assert 0 <= actions.item() <= 3
        next_state = np.random.random(size=(8,))
        terminal = np.random.random() < 0.5
        reward = np.random.random()
        return next_state, terminal, reward

カスタム環境実装はそれらのモジュールパスを渡すことによりロードできます :

environment = Environment.create(
    environment='custom_env.CustomEnvironment', max_episode_timesteps=10
)

環境により指定されない限りは (or 評価のためでなければ) Environment.create(...) の max_episode_timesteps 引数を指定することが強く推奨されます、何故ならばそうでなければより多くのエージェント・パラメータが指定を必要とするかもしれないからです。

 

エージェントを初期化する

環境と同様に、Agent.create(...) インターフェイスを通してエージェントを初期化することが推奨されます。

from tensorforce.agents import Agent

例えば、一般的な Tensorforce エージェント は次のように初期化できます :

agent = Agent.create(
    agent='tensorforce', environment=environment, update=64,
    objective='policy_gradient', reward_estimation=dict(horizon=20)
)

他の事前定義エージェント・クラスも代わりに使用できます、例えば、Proximal Policy Optimization :

agent = Agent.create(
    agent='ppo', environment=environment, batch_size=10, learning_rate=1e-3
)

代わりに、エージェントは config ファイルとして定義できます :

{
    "agent": "tensorforce",
    "update": 64,
    "objective": "policy_gradient",
    "reward_estimation": {
        "horizon": 20
    }
}

エージェント config ファイルはそれらのファイルパスを渡すことによりロードできます :

agent = Agent.create(agent='agent.json', environment=environment)

Agent.create(...) の environment 引数として Environment.create(...) により返される environment オブジェクトを渡すことが推奨されます、その結果 states, actions and max_episode_timesteps 引数はそれに従って自動的に指定されます。

 

訓練と評価

訓練と評価のためには Runner ユティリティのような実行ユティリティを利用することが推奨されます、これはある範囲の configuration オプションを供給します :

from tensorforce.execution import Runner

訓練と続く評価から成る基本的な実験は数行のコードで書かれます :

runner = Runner(
    agent='agent.json',
    environment=dict(environment='gym', level='CartPole'),
    max_episode_timesteps=500
)

runner.run(num_episodes=200)

runner.run(num_episodes=100, evaluation=True)

runner.close()

実行ユティリティはエージェント-環境の相互作用を正しく処理する面倒を見ます、そして可能なところではこのように使用されるべきです。代わりに、エージェント-環境相互作用に渡るより詳細な制御が必要である場合には、単純な訓練と評価ループが次のように書けます :

# Create agent and environment
environment = Environment.create(
    environment='environment.json', max_episode_timesteps=500
)
agent = Agent.create(agent='agent.json', environment=environment)

# Train for 200 episodes
for _ in range(200):
    states = environment.reset()
    terminal = False
    while not terminal:
        actions = agent.act(states=states)
        states, terminal, reward = environment.execute(actions=actions)
        agent.observe(terminal=terminal, reward=reward)

# Evaluate for 100 episodes
sum_rewards = 0.0
for _ in range(100):
    states = environment.reset()
    internals = agent.initial_internals()
    terminal = False
    while not terminal:
        actions, internals = agent.act(states=states, internals=internals, evaluation=True)
        states, terminal, reward = environment.execute(actions=actions)
        sum_rewards += reward

print('Mean episode reward:', sum_rewards / 100)

# Close agent and environment
agent.close()
environment.close()
 

以上






AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com