Copyright © GREE, Inc. All Rights Reserved.
OSS強化学習フレームワークの
比較
2019/01/16
グリー株式会社 開発本部
辻本 貴昭
Copyright © GREE, Inc. All Rights Reserved.
• グリーでの利用例
• フレームワーク全体のざっくりとした比較
• 各フレームワークごとの紹介
• Coach
• RLlib
• ChainerRL
• Keras-RL
• StableBaseline
• Dopamine
• Horizon
概要
Copyright © GREE, Inc. All Rights Reserved.
• 敵のパラメータを調整後、バトルを繰り返して確認
• 想定通りのダメージ量になっているか?
• 乱数の影響は想定の範囲内に収まっているか?
• 問題点
• キャラクターの性能を把握していないとできない
• かなり時間がかかる
• 解決案
• バトルプレイAIの導入
• ルールを記述したり、バトルの状態毎に教師データを用意するのはほぼ不可能
• 強化学習でなんとかならないか?
利用例
ターン制コマンドバトルRPGでのバランス確認
Copyright © GREE, Inc. All Rights Reserved.
• DQN, A3Cはだいたいどのフレームワークでも実装されている
• 実装済みアルゴリズムはCoachが多い(ChainerRL, RLlibもそれなり)
• 分散アルゴリズムはRLlibが充実している(Ape-X, IMPALAなど)
• Dopamine, Keras-RLは実装済みアルゴリズムが少ない
フレームワーク全体の比較
実装されているアルゴリズム
Copyright © GREE, Inc. All Rights Reserved.
• 統合フレームワーク型
• 広範囲に抽象化している
• 階層型・マルチエージェント環境に対応している
• Coach, RLlib
• 参考実装型
• 各アルゴリズムを統一したインターフェースで学習・推論できるようにしている
• ChainerRL, Keras-RL, Dopamine, StableBaseline
• 番外編
• ゲームQA・バランス調整の観点でみると目的が違うもの
• Horizon
• シミュレータが用意できないオフライン学習が主な目的
• ストリーミング配信のビットレート最適化に使っているらしい
フレームワーク全体の比較
フレームワークの思想の違い
Copyright © GREE, Inc. All Rights Reserved.
• 実験設定(preset)を記述してツールから実行する
• presetに書く内容
• 学習させるステップ数
• どの学習アルゴリズムを利用するか
• アルゴリズムごとのハイパーパラメータ
• 環境の設定
Coach
使い方
$ coach -p CartPole_DQN
$ coach -p CartPole_DQN –crd checkpoint-dir --evaluate
Copyright © GREE, Inc. All Rights Reserved.
schedule_params = ScheduleParameters()
schedule_params.improve_steps = TrainingSteps(10000)
schedule_params.steps_between_evaluation_periods = EnvironmentEpisodes(10)
schedule_params.evaluation_steps = EnvironmentEpisodes(1)
schedule_params.heatup_steps = EnvironmentSteps(1000)
agent_params = DQNAgentParameters()
agent_params.algorithm.discount = 0.99
agent_params.memory.max_size = (MemoryGranularity.Transitions, 40000)
agent_params.exploration.epsilon_schedule = LinearSchedule(1.0, 0.01, 10000)
agent_params.network_wrappers['main'].learning_rate = 0.00025
env_params = GymVectorEnvironment(level='CartPole-v0')
graph_manager = BasicRLGraphManager(agent_params=agent_params, env_params=env_params,
schedule_params=schedule_params, vis_params=VisualizationParameters())
Coach
presetの書き方
Copyright © GREE, Inc. All Rights Reserved.
• 独自ダッシュボード
• lossやrewardの確認
• グラフのスケールが自動で変わらずに使いにくい
• カスタムメトリックを追加可能
• TensorBoard
• ネットワーク構造や重みの確認
Coach
ダッシュボード
Copyright © GREE, Inc. All Rights Reserved.
• 環境とAgentを管理し、学習・評価全般をコントロールする
• 学習はheatup, train and act, evaluateの3フェーズに分けられる
• heatup
• replay bufferの初期値を集めるためにランダム行動
• train and act
• 環境からデータを集めながら価値関数や方策を更新
• 行動の決定の際は探索ポリシーに基づいて探索する
• evaluate
• 今のAgentの性能を評価する
• 行動の決定の際は最善行動を選択する
Coach
アーキテクチャ(Graph Manager)
Copyright © GREE, Inc. All Rights Reserved.
• 環境とAgentの相互作用を仲介する
• Coachでは環境とAgentは直接やり取りしない
• Agentを複数持つことができる
• 他のLevel Managerに対して環境として振る舞う
• 階層型の環境を実現するため
Coach
アーキテクチャ(Level Manager)
Level Manager
Level Manager
Agent
Agent
Agent
Environment
Copyright © GREE, Inc. All Rights Reserved.
• アルゴリズムを定義する
• Observe
• 環境の最新状態をLevel Managerから受け取る
• Act
• Observeで受けとった情報を元に、次の行動を決定する
• Train
• ネットワークを学習する
• パラメータはパラメータ用のクラスで管理する
• AgentParameter
• NetworkParameter
Coach
アーキテクチャ(Agent)
Copyright © GREE, Inc. All Rights Reserved.
• Input Embedders
• 入力を特徴ベクトルに変換する
• 畳み込みネットワークのImage embedder
• 多層パーセプトロンのVector embedder
• Output Heads
• アクション・状態価値などのネットワークの出力
• 複数のHeadsを持つことができる
• Actor-Criticの場合はpolicy headとstate-value headがある
• Middlewares
• Input EmbeddersとOutput Headsを繋ぐネットワーク
• 全結合ネットワークやLSTMなど
Coach
アーキテクチャ(Network)
Copyright © GREE, Inc. All Rights Reserved.
• Exploration Policies
• ε-greedy
• UCB
• etc
• Filters
• Atariのゲームで4フレームをまとめたり
• rewardを[-1, 1]の範囲に変換したり
• Memories
• experience replay
• prioritized experience replay
• etc
Coach
アーキテクチャ(その他)
Copyright © GREE, Inc. All Rights Reserved.
• メリット
• 開発が活発で実装されているアルゴリズムも多い
• 階層型強化学習や模倣学習にも対応できる
• 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単
• デメリット
• 学習状況を把握するためのダッシュボードが使いにくい
• ワーカを分散できるアルゴリズムの選択肢が少ない
• 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい
Coach
メリット・デメリット
Copyright © GREE, Inc. All Rights Reserved.
• 実験設定を記述してツールから実行する
• 実験設定に書く内容
• 環境
• 実行するアルゴリズム
• 学習終了条件
• アルゴリズムのハイパーパラメータ
RLlib
使い方
$ rllib train -f CartPole_DQN.yaml --checkpoint-freq 10
$ rllib rollout checkpoint-path --run DQN --env CartPole-v0
Copyright © GREE, Inc. All Rights Reserved.
cartpole-dqn:
env: CartPole-v0
run: DQN
stop:
time_total_s: 120
config:
gamma: 0.99
lr: .000025
adam_epsilon: 1.0
exploration_final_eps: .01
schedule_max_timesteps: 100
exploration_fraction: 0.09
buffer_size: 40000
checkpoint-freq: 100
RLlib
実験設定の書き方
Copyright © GREE, Inc. All Rights Reserved.
• TensorBoard
• 標準ではRewardの遷移などが見られる。lossは無い
• ネットワークの構造は見られない
• callbackという仕組みを使ってカスタムメトリックを追加できる
• episodeの開始・終了時
• step終了時
• trainの1イテレーション終了時
RLlib
ダッシュボード
Copyright © GREE, Inc. All Rights Reserved.
• Pythonの分散処理フレームワークRay上に実装されている
• Rayのget(), put(), remote()などのメソッドがよく出てくる
• Rayについて簡単に知っていないと読みにくい
RLlib
アーキテクチャ
Copyright © GREE, Inc. All Rights Reserved.
• 学習全体を制御する
• Rayのハイパーパラメータサーチ用ツール
• _train()の出力が終了条件を満たすまで、_train()を繰り返す
RLlib
アーキテクチャ(tune)
class Agent(Trainable):
def _setup(self, config):
# モデル構築
def _train(self):
# 学習
def _save(self);
# 重みの保存
def _restore(self):
# 重みの読込
Copyright © GREE, Inc. All Rights Reserved.
• アルゴリズムを定義する
• Policy Graph・Policy Evaluator・Policy Optimizerを組み合わせる
RLlib
アーキテクチャ(Agent)
Copyright © GREE, Inc. All Rights Reserved.
• Policy Graph
• ネットワークや損失関数などを定義する
• 標準ネットワークは畳み込みネットワークと多層パーセプトロン、LSTM
• Custom Modelで変更可能
• Policy Evaluator
• 環境から得たデータを前処理してPolicy Graphに入力
• Policy Graphが決定したactionを環境に作用させる
• Policy Optimizer
• どのように学習するか制御する
• replay bufferを使うか・都度Evaluatorから取得するか、同期・非同期
RLlib
アーキテクチャ (Policy [Graph|Evaluator|Optimizer])
Copyright © GREE, Inc. All Rights Reserved.
• Exploration Policies
• 数ステップ毎に一定値減衰する
• 初期値から最終値まで線形に減衰する
• Preprocessor
• Environmentの出力を前処理する
• Open AI Gymのラッパーとして実装
• Atariのゲームで4フレームをまとめたり
• rewardを[-1, 1]の範囲に変換したり
RLlib
アーキテクチャ(その他)
Copyright © GREE, Inc. All Rights Reserved.
• メリット
• 開発が活発で実装されているアルゴリズムも多い
• 学習状況を把握するためのダッシュボードが見やすい
• 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単
• Coachよりも簡単に書ける
• デメリット
• 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい
• (手元の環境の問題だが)MacアプリにGym InterfaceをかぶせたEnvironmentだ
とクラッシュして使えない
RLlib
メリット・デメリット
Copyright © GREE, Inc. All Rights Reserved.
ChainerRL
使い方
• exampleのコードを実行
• コマンドライン引数
• 環境
• 学習させるstep数
• ハイパーパラメータ
$ python example/train_dqn_gym.py --env CartPole-v0 --outdir
/tmp/chainerrl
Copyright © GREE, Inc. All Rights Reserved.
• 学習経過(LossやReward)のダッシュボードは用意されていない
• ファイルには出力される
• (試していないが)ステップ毎にアクションの確率などを可視化する
ツールがある
• ChainerRL Visualizer
ChainerRL
ダッシュボード
Copyright © GREE, Inc. All Rights Reserved.
• experiments
• Agentを学習・評価するループを回す仕組み
• Evaluator
• Agentを評価する
• これまでの最高スコアなどを管理
• Agent
• アルゴリズムを定義
• Model
• ネットワークを定義
• Wrapper
• Gymラッパー
• Envの出力を前処理する
ChainerRL
アーキテクチャ
experiments
Agent
Evaluator
Environment Environment
model
Copyright © GREE, Inc. All Rights Reserved.
• メリット
• 実装されているアルゴリズムが多い
• 実装が読みやすい
• ChainerRL Visualizerを使うと、バランス調整などに役立ちそう
• デメリット
• コマンドライン引数で実験設定を渡すので、別途設定を管理する必要がある
• ChainerがTensorFlowほどメジャーではない
ChainerRL
メリット・デメリット
Copyright © GREE, Inc. All Rights Reserved.
• 普通のKerasと同じような書き方
• modelのcompile
• fit
Keras-RL
使い方
env = gym.make(‘CartPole-v0’)
model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(env.action_space.n))
model.add(Activation('linear'))
memory = SequentialMemory(limit=40000, window_length=1)
policy = EpsGreedyQPolicy()
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10,
policy=policy)
dqn.compile(Adam(lr=1e-3), metrics=['mae'])
dqn.fit(env, nb_steps=50000)
dqn.test(env, nb_episodes=5)
Copyright © GREE, Inc. All Rights Reserved.
• Matplotlib
• jsonで出力されたログをプロットするためのサンプルスクリプトあり
• 見にくい
Keras-RL
ダッシュボード
Copyright © GREE, Inc. All Rights Reserved.
• Agent
• 学習・評価のループを回す
• アルゴリズムを定義
• Model
• ネットワークを定義
• Processor
• 環境からの出力を前処理する
Keras-RL
アーキテクチャ
Agent
Environmentmodel processor
Copyright © GREE, Inc. All Rights Reserved.
• メリット
• ネットワークの変更が簡単
• 実装が読みやすい
• デメリット
• 実装されているアルゴリズムが少ない
• 複数ワーカに分散させて学習ができない
Keras-RL
メリット・デメリット
Copyright © GREE, Inc. All Rights Reserved.
StableBaseline
使い方
• 簡単なコードを書く
env = gym.make('CartPole-v0')
env = DummyVecEnv([lambda: env])
model = DQN(MlpPolicy, env, verbose=1)
model.learn(total_timesteps=5000)
model.save("deepq_cartpole")
del model # remove to demonstrate saving and loading
model = DQN.load("deepq_cartpole")
obs = env.reset()
while True:
action, _states = model.predict(obs)
obs, rewards, dones, info = env.step(action)
env.render()
Copyright © GREE, Inc. All Rights Reserved.
• TensorBoard
• ネットワーク構造
• reward, loss
• 自分でネットワークを定義すればtf.summaryで追加できる
• その他
• step毎に呼び出されるcallbackを定義すれば、ファイルなどに値を出力可能
StableBaseline
ダッシュボード
Copyright © GREE, Inc. All Rights Reserved.
• Model
• 学習のループを回す
• アルゴリズムを定義する
• Policy
• ネットワークを定義する
• 多層パーセプトロン、畳み込み、LSTM
• EnvWrapper
• 環境からの出力を前処理
• マルチワーカ対応
StableBaseline
アーキテクチャ
Model
Policy
EnvWrapper
Environment
Environment
Copyright © GREE, Inc. All Rights Reserved.
• メリット
• ネットワークの変更が簡単
• 実装が読みやすい
• ダッシュボードが見やすい
• デメリット
• 実験のためにコードを書かないといけない
StableBaseline
メリット・デメリット
Copyright © GREE, Inc. All Rights Reserved.
• 実験設定を記述してツールから実行する
• 実験設定に書く内容
• 環境
• 学習させるstep数
• アルゴリズムのハイパーパラメータ
Dopamine
使い方
$ python -um dopamine.atari.train --agent_name=dqn --
base_dir=/tmp/dopamine --gin_files=’dqn.gin’
Copyright © GREE, Inc. All Rights Reserved.
DQNAgent.gamma = 0.99
DQNAgent.epsilon_train = 0.01
DQNAgent.epsilon_eval = 0.001
DQNAgent.epsilon_decay_period = 250000 # agent steps
DQNAgent.optimizer = @tf.train.RMSPropOptimizer()
tf.train.RMSPropOptimizer.learning_rate = 0.00025
tf.train.RMSPropOptimizer.decay = 0.95
tf.train.RMSPropOptimizer.momentum = 0.0
tf.train.RMSPropOptimizer.epsilon = 0.00001
Runner.game_name = 'Pong’
Runner.sticky_actions = True
Runner.num_iterations = 200
Runner.training_steps = 250000 # agent steps
Runner.evaluation_steps = 125000 # agent steps
Runner.max_steps_per_episode = 27000 # agent steps
WrappedReplayBuffer.replay_capacity = 1000000
WrappedReplayBuffer.batch_size = 32
Dopamine
実験設定の書き方
Copyright © GREE, Inc. All Rights Reserved.
• TensorBoard
• ネットワーク構造、報酬の平均、エピソード数のみ
Dopamine
ダッシュボード
Copyright © GREE, Inc. All Rights Reserved.
• メリット
• TensorFlowによる参考実装としては読みやすい
• 実験設定の書き方は簡単
• デメリット
• ドキュメントが全く足りていない
• 実装されているアルゴリズムが少ない
Dopamine
メリット・デメリット
Copyright © GREE, Inc. All Rights Reserved.
• ChainerRL、StableBaselineから使い始めると良さそう
• アルゴリズムが揃っている
• ダッシュボードが見やすい (ChainerRL Visualizerは試してみたい)
• 実装が読みやすい
• もっと複雑なことがしたくなったらCoach, RLlib
• 階層型の環境やマルチエージェント環境が使いやすいようになっている
• 複数ノードにワーカを分散する仕組みが入っている
• 複雑なので、Agentにわたすパラメータの意味を実装から読み解くのがしんどい
まとめ

OSS強化学習フレームワークの比較

  • 1.
    Copyright © GREE,Inc. All Rights Reserved. OSS強化学習フレームワークの 比較 2019/01/16 グリー株式会社 開発本部 辻本 貴昭
  • 2.
    Copyright © GREE,Inc. All Rights Reserved. • グリーでの利用例 • フレームワーク全体のざっくりとした比較 • 各フレームワークごとの紹介 • Coach • RLlib • ChainerRL • Keras-RL • StableBaseline • Dopamine • Horizon 概要
  • 3.
    Copyright © GREE,Inc. All Rights Reserved. • 敵のパラメータを調整後、バトルを繰り返して確認 • 想定通りのダメージ量になっているか? • 乱数の影響は想定の範囲内に収まっているか? • 問題点 • キャラクターの性能を把握していないとできない • かなり時間がかかる • 解決案 • バトルプレイAIの導入 • ルールを記述したり、バトルの状態毎に教師データを用意するのはほぼ不可能 • 強化学習でなんとかならないか? 利用例 ターン制コマンドバトルRPGでのバランス確認
  • 4.
    Copyright © GREE,Inc. All Rights Reserved. • DQN, A3Cはだいたいどのフレームワークでも実装されている • 実装済みアルゴリズムはCoachが多い(ChainerRL, RLlibもそれなり) • 分散アルゴリズムはRLlibが充実している(Ape-X, IMPALAなど) • Dopamine, Keras-RLは実装済みアルゴリズムが少ない フレームワーク全体の比較 実装されているアルゴリズム
  • 5.
    Copyright © GREE,Inc. All Rights Reserved. • 統合フレームワーク型 • 広範囲に抽象化している • 階層型・マルチエージェント環境に対応している • Coach, RLlib • 参考実装型 • 各アルゴリズムを統一したインターフェースで学習・推論できるようにしている • ChainerRL, Keras-RL, Dopamine, StableBaseline • 番外編 • ゲームQA・バランス調整の観点でみると目的が違うもの • Horizon • シミュレータが用意できないオフライン学習が主な目的 • ストリーミング配信のビットレート最適化に使っているらしい フレームワーク全体の比較 フレームワークの思想の違い
  • 6.
    Copyright © GREE,Inc. All Rights Reserved. • 実験設定(preset)を記述してツールから実行する • presetに書く内容 • 学習させるステップ数 • どの学習アルゴリズムを利用するか • アルゴリズムごとのハイパーパラメータ • 環境の設定 Coach 使い方 $ coach -p CartPole_DQN $ coach -p CartPole_DQN –crd checkpoint-dir --evaluate
  • 7.
    Copyright © GREE,Inc. All Rights Reserved. schedule_params = ScheduleParameters() schedule_params.improve_steps = TrainingSteps(10000) schedule_params.steps_between_evaluation_periods = EnvironmentEpisodes(10) schedule_params.evaluation_steps = EnvironmentEpisodes(1) schedule_params.heatup_steps = EnvironmentSteps(1000) agent_params = DQNAgentParameters() agent_params.algorithm.discount = 0.99 agent_params.memory.max_size = (MemoryGranularity.Transitions, 40000) agent_params.exploration.epsilon_schedule = LinearSchedule(1.0, 0.01, 10000) agent_params.network_wrappers['main'].learning_rate = 0.00025 env_params = GymVectorEnvironment(level='CartPole-v0') graph_manager = BasicRLGraphManager(agent_params=agent_params, env_params=env_params, schedule_params=schedule_params, vis_params=VisualizationParameters()) Coach presetの書き方
  • 8.
    Copyright © GREE,Inc. All Rights Reserved. • 独自ダッシュボード • lossやrewardの確認 • グラフのスケールが自動で変わらずに使いにくい • カスタムメトリックを追加可能 • TensorBoard • ネットワーク構造や重みの確認 Coach ダッシュボード
  • 9.
    Copyright © GREE,Inc. All Rights Reserved. • 環境とAgentを管理し、学習・評価全般をコントロールする • 学習はheatup, train and act, evaluateの3フェーズに分けられる • heatup • replay bufferの初期値を集めるためにランダム行動 • train and act • 環境からデータを集めながら価値関数や方策を更新 • 行動の決定の際は探索ポリシーに基づいて探索する • evaluate • 今のAgentの性能を評価する • 行動の決定の際は最善行動を選択する Coach アーキテクチャ(Graph Manager)
  • 10.
    Copyright © GREE,Inc. All Rights Reserved. • 環境とAgentの相互作用を仲介する • Coachでは環境とAgentは直接やり取りしない • Agentを複数持つことができる • 他のLevel Managerに対して環境として振る舞う • 階層型の環境を実現するため Coach アーキテクチャ(Level Manager) Level Manager Level Manager Agent Agent Agent Environment
  • 11.
    Copyright © GREE,Inc. All Rights Reserved. • アルゴリズムを定義する • Observe • 環境の最新状態をLevel Managerから受け取る • Act • Observeで受けとった情報を元に、次の行動を決定する • Train • ネットワークを学習する • パラメータはパラメータ用のクラスで管理する • AgentParameter • NetworkParameter Coach アーキテクチャ(Agent)
  • 12.
    Copyright © GREE,Inc. All Rights Reserved. • Input Embedders • 入力を特徴ベクトルに変換する • 畳み込みネットワークのImage embedder • 多層パーセプトロンのVector embedder • Output Heads • アクション・状態価値などのネットワークの出力 • 複数のHeadsを持つことができる • Actor-Criticの場合はpolicy headとstate-value headがある • Middlewares • Input EmbeddersとOutput Headsを繋ぐネットワーク • 全結合ネットワークやLSTMなど Coach アーキテクチャ(Network)
  • 13.
    Copyright © GREE,Inc. All Rights Reserved. • Exploration Policies • ε-greedy • UCB • etc • Filters • Atariのゲームで4フレームをまとめたり • rewardを[-1, 1]の範囲に変換したり • Memories • experience replay • prioritized experience replay • etc Coach アーキテクチャ(その他)
  • 14.
    Copyright © GREE,Inc. All Rights Reserved. • メリット • 開発が活発で実装されているアルゴリズムも多い • 階層型強化学習や模倣学習にも対応できる • 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単 • デメリット • 学習状況を把握するためのダッシュボードが使いにくい • ワーカを分散できるアルゴリズムの選択肢が少ない • 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい Coach メリット・デメリット
  • 15.
    Copyright © GREE,Inc. All Rights Reserved. • 実験設定を記述してツールから実行する • 実験設定に書く内容 • 環境 • 実行するアルゴリズム • 学習終了条件 • アルゴリズムのハイパーパラメータ RLlib 使い方 $ rllib train -f CartPole_DQN.yaml --checkpoint-freq 10 $ rllib rollout checkpoint-path --run DQN --env CartPole-v0
  • 16.
    Copyright © GREE,Inc. All Rights Reserved. cartpole-dqn: env: CartPole-v0 run: DQN stop: time_total_s: 120 config: gamma: 0.99 lr: .000025 adam_epsilon: 1.0 exploration_final_eps: .01 schedule_max_timesteps: 100 exploration_fraction: 0.09 buffer_size: 40000 checkpoint-freq: 100 RLlib 実験設定の書き方
  • 17.
    Copyright © GREE,Inc. All Rights Reserved. • TensorBoard • 標準ではRewardの遷移などが見られる。lossは無い • ネットワークの構造は見られない • callbackという仕組みを使ってカスタムメトリックを追加できる • episodeの開始・終了時 • step終了時 • trainの1イテレーション終了時 RLlib ダッシュボード
  • 18.
    Copyright © GREE,Inc. All Rights Reserved. • Pythonの分散処理フレームワークRay上に実装されている • Rayのget(), put(), remote()などのメソッドがよく出てくる • Rayについて簡単に知っていないと読みにくい RLlib アーキテクチャ
  • 19.
    Copyright © GREE,Inc. All Rights Reserved. • 学習全体を制御する • Rayのハイパーパラメータサーチ用ツール • _train()の出力が終了条件を満たすまで、_train()を繰り返す RLlib アーキテクチャ(tune) class Agent(Trainable): def _setup(self, config): # モデル構築 def _train(self): # 学習 def _save(self); # 重みの保存 def _restore(self): # 重みの読込
  • 20.
    Copyright © GREE,Inc. All Rights Reserved. • アルゴリズムを定義する • Policy Graph・Policy Evaluator・Policy Optimizerを組み合わせる RLlib アーキテクチャ(Agent)
  • 21.
    Copyright © GREE,Inc. All Rights Reserved. • Policy Graph • ネットワークや損失関数などを定義する • 標準ネットワークは畳み込みネットワークと多層パーセプトロン、LSTM • Custom Modelで変更可能 • Policy Evaluator • 環境から得たデータを前処理してPolicy Graphに入力 • Policy Graphが決定したactionを環境に作用させる • Policy Optimizer • どのように学習するか制御する • replay bufferを使うか・都度Evaluatorから取得するか、同期・非同期 RLlib アーキテクチャ (Policy [Graph|Evaluator|Optimizer])
  • 22.
    Copyright © GREE,Inc. All Rights Reserved. • Exploration Policies • 数ステップ毎に一定値減衰する • 初期値から最終値まで線形に減衰する • Preprocessor • Environmentの出力を前処理する • Open AI Gymのラッパーとして実装 • Atariのゲームで4フレームをまとめたり • rewardを[-1, 1]の範囲に変換したり RLlib アーキテクチャ(その他)
  • 23.
    Copyright © GREE,Inc. All Rights Reserved. • メリット • 開発が活発で実装されているアルゴリズムも多い • 学習状況を把握するためのダッシュボードが見やすい • 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単 • Coachよりも簡単に書ける • デメリット • 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい • (手元の環境の問題だが)MacアプリにGym InterfaceをかぶせたEnvironmentだ とクラッシュして使えない RLlib メリット・デメリット
  • 24.
    Copyright © GREE,Inc. All Rights Reserved. ChainerRL 使い方 • exampleのコードを実行 • コマンドライン引数 • 環境 • 学習させるstep数 • ハイパーパラメータ $ python example/train_dqn_gym.py --env CartPole-v0 --outdir /tmp/chainerrl
  • 25.
    Copyright © GREE,Inc. All Rights Reserved. • 学習経過(LossやReward)のダッシュボードは用意されていない • ファイルには出力される • (試していないが)ステップ毎にアクションの確率などを可視化する ツールがある • ChainerRL Visualizer ChainerRL ダッシュボード
  • 26.
    Copyright © GREE,Inc. All Rights Reserved. • experiments • Agentを学習・評価するループを回す仕組み • Evaluator • Agentを評価する • これまでの最高スコアなどを管理 • Agent • アルゴリズムを定義 • Model • ネットワークを定義 • Wrapper • Gymラッパー • Envの出力を前処理する ChainerRL アーキテクチャ experiments Agent Evaluator Environment Environment model
  • 27.
    Copyright © GREE,Inc. All Rights Reserved. • メリット • 実装されているアルゴリズムが多い • 実装が読みやすい • ChainerRL Visualizerを使うと、バランス調整などに役立ちそう • デメリット • コマンドライン引数で実験設定を渡すので、別途設定を管理する必要がある • ChainerがTensorFlowほどメジャーではない ChainerRL メリット・デメリット
  • 28.
    Copyright © GREE,Inc. All Rights Reserved. • 普通のKerasと同じような書き方 • modelのcompile • fit Keras-RL 使い方 env = gym.make(‘CartPole-v0’) model = Sequential() model.add(Flatten(input_shape=(1,) + env.observation_space.shape)) model.add(Dense(16)) model.add(Activation('relu')) model.add(Dense(16)) model.add(Activation('relu')) model.add(Dense(env.action_space.n)) model.add(Activation('linear')) memory = SequentialMemory(limit=40000, window_length=1) policy = EpsGreedyQPolicy() dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, policy=policy) dqn.compile(Adam(lr=1e-3), metrics=['mae']) dqn.fit(env, nb_steps=50000) dqn.test(env, nb_episodes=5)
  • 29.
    Copyright © GREE,Inc. All Rights Reserved. • Matplotlib • jsonで出力されたログをプロットするためのサンプルスクリプトあり • 見にくい Keras-RL ダッシュボード
  • 30.
    Copyright © GREE,Inc. All Rights Reserved. • Agent • 学習・評価のループを回す • アルゴリズムを定義 • Model • ネットワークを定義 • Processor • 環境からの出力を前処理する Keras-RL アーキテクチャ Agent Environmentmodel processor
  • 31.
    Copyright © GREE,Inc. All Rights Reserved. • メリット • ネットワークの変更が簡単 • 実装が読みやすい • デメリット • 実装されているアルゴリズムが少ない • 複数ワーカに分散させて学習ができない Keras-RL メリット・デメリット
  • 32.
    Copyright © GREE,Inc. All Rights Reserved. StableBaseline 使い方 • 簡単なコードを書く env = gym.make('CartPole-v0') env = DummyVecEnv([lambda: env]) model = DQN(MlpPolicy, env, verbose=1) model.learn(total_timesteps=5000) model.save("deepq_cartpole") del model # remove to demonstrate saving and loading model = DQN.load("deepq_cartpole") obs = env.reset() while True: action, _states = model.predict(obs) obs, rewards, dones, info = env.step(action) env.render()
  • 33.
    Copyright © GREE,Inc. All Rights Reserved. • TensorBoard • ネットワーク構造 • reward, loss • 自分でネットワークを定義すればtf.summaryで追加できる • その他 • step毎に呼び出されるcallbackを定義すれば、ファイルなどに値を出力可能 StableBaseline ダッシュボード
  • 34.
    Copyright © GREE,Inc. All Rights Reserved. • Model • 学習のループを回す • アルゴリズムを定義する • Policy • ネットワークを定義する • 多層パーセプトロン、畳み込み、LSTM • EnvWrapper • 環境からの出力を前処理 • マルチワーカ対応 StableBaseline アーキテクチャ Model Policy EnvWrapper Environment Environment
  • 35.
    Copyright © GREE,Inc. All Rights Reserved. • メリット • ネットワークの変更が簡単 • 実装が読みやすい • ダッシュボードが見やすい • デメリット • 実験のためにコードを書かないといけない StableBaseline メリット・デメリット
  • 36.
    Copyright © GREE,Inc. All Rights Reserved. • 実験設定を記述してツールから実行する • 実験設定に書く内容 • 環境 • 学習させるstep数 • アルゴリズムのハイパーパラメータ Dopamine 使い方 $ python -um dopamine.atari.train --agent_name=dqn -- base_dir=/tmp/dopamine --gin_files=’dqn.gin’
  • 37.
    Copyright © GREE,Inc. All Rights Reserved. DQNAgent.gamma = 0.99 DQNAgent.epsilon_train = 0.01 DQNAgent.epsilon_eval = 0.001 DQNAgent.epsilon_decay_period = 250000 # agent steps DQNAgent.optimizer = @tf.train.RMSPropOptimizer() tf.train.RMSPropOptimizer.learning_rate = 0.00025 tf.train.RMSPropOptimizer.decay = 0.95 tf.train.RMSPropOptimizer.momentum = 0.0 tf.train.RMSPropOptimizer.epsilon = 0.00001 Runner.game_name = 'Pong’ Runner.sticky_actions = True Runner.num_iterations = 200 Runner.training_steps = 250000 # agent steps Runner.evaluation_steps = 125000 # agent steps Runner.max_steps_per_episode = 27000 # agent steps WrappedReplayBuffer.replay_capacity = 1000000 WrappedReplayBuffer.batch_size = 32 Dopamine 実験設定の書き方
  • 38.
    Copyright © GREE,Inc. All Rights Reserved. • TensorBoard • ネットワーク構造、報酬の平均、エピソード数のみ Dopamine ダッシュボード
  • 39.
    Copyright © GREE,Inc. All Rights Reserved. • メリット • TensorFlowによる参考実装としては読みやすい • 実験設定の書き方は簡単 • デメリット • ドキュメントが全く足りていない • 実装されているアルゴリズムが少ない Dopamine メリット・デメリット
  • 40.
    Copyright © GREE,Inc. All Rights Reserved. • ChainerRL、StableBaselineから使い始めると良さそう • アルゴリズムが揃っている • ダッシュボードが見やすい (ChainerRL Visualizerは試してみたい) • 実装が読みやすい • もっと複雑なことがしたくなったらCoach, RLlib • 階層型の環境やマルチエージェント環境が使いやすいようになっている • 複数ノードにワーカを分散する仕組みが入っている • 複雑なので、Agentにわたすパラメータの意味を実装から読み解くのがしんどい まとめ