使用方法について

はじめに

強化学習においてニューラルネットワーク を用いる場合, 入力関数を多変数とし, 出力を行動とするエージェントして学習させます. しかし, 問題によって, 何を環境変数として捉えるか, 出力のタイプはどのようなものを求めるかが異なるため, エージェントの構造のみならず, エージェントに入る情報, 報酬, リセットの条件等の環境情報を設定する必要があります.

ReNom RLの特徴として, DQN, A3C等の複雑なアルゴリズムが既に実装されているところにあります. 強化学習を実装する上において, 主にユーザーに実施していただく操作として以下の3つがあります.

  1. 環境の準備

  2. モデルの準備

  3. 強化学習の実装

1-環境の準備

簡易的に学習するために, 環境モデルをBaseEnvに合わせた構造にしなければなりません. ここでは既存のモデルを使った方法と, 0から実装する方法を紹介します.

既存のモデルを使った方法

Open AIを使った環境モデルを一つの関数として用意しております. 例えばBreakoutのモデルを利用する場合は, 以下のように呼び出すこともできます.

from renom_rl.environ.openai import Breakout
env = Breakout()

0から実装する方法

オリジナルの環境を作成する場合は, オブジェクトを継承し, 以下の変数および関数を書き換える必要があります.

  • action_shape: actionの形状

  • state_shape: stateの形状

  • reset(): リセット時の初期stateを指定

  • sample(): action のサンプル手段を指定

  • step(): action 取った時のstate, reward, terminal を指定

例えば CustomEnv() というオブジェクトを新たに作るとしたら, CustomEnv の概略は以下のようになります.

class CustomEnv(BaseEnv):

    def __init__(self, env):
        self.action_shape = (2,)
        self.state_shape = (4,)

        self.env=env
        self.step_continue=0
        self.reward=0



    def reset(self):
        return self.env.reset()


    def sample(self):
        rand=env.action_space.sample()
        return rand

    def step(self, action):
        state,_,terminal,_=env.step(int(action))

        self.step_continue+=1
        reward=0

        if terminal:
            if self.step_continue >= 200:
                reward=1
            else:
                reward=-1

        self.reward=reward

        return state, reward, terminal

  new_env=CustomEnv()

2-モデルの準備

ここでは, ReNomDL のモデルを作成します. 通常のモデルを定義する場合は, 以下のように定義してください.

import renom as rm
q_network = rm.Sequential([rm.Dense(30, ignore_bias=True),
                           rm.Relu(),
                           rm.Dense(30, ignore_bias=True),
                           rm.Relu(),
                           rm.Dense(2, ignore_bias=True)])

3-強化学習の実装

以上の2つを用意した上で, 次に強化学習を用いた学習方法を紹介します. 今回は, DQN のモデルを例として使用します.

from renom_rl.discrete.dqn import DQN

model = DQN(custom_env, q_network)

最後にDQNのmodelを実行します. 実行する際には以下のように記述してください.

result = model.fit(render=False, greedy_step=1000000, random_step=5000, update_period=10000)

このように実装することで, DQNを実行することが可能です. 環境, その他の強化学習アルゴリズムについてはAPIページを参照いただけると幸いです.