使用方法について

はじめに

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

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

  1. 環境の準備

  2. モデルの準備

  3. 強化学習の実装

1-環境の準備

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

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

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

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

0から実装する方法

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

  • action_shape: actionの形状

  • state_shape: stateの形状

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

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

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

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

import gym
from renom_rl.environ.env import BaseEnv

class CustomEnv(BaseEnv):

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

        self.env = gym.make("CartPole-v0")
        self.step_continue = 0
        self.reward = 0



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


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

    def step(self, action):
        state,_,terminal,_ = self.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

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(env, q_network)

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

result = model.fit()

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