Slide 1

Slide 1 text

Copyright © GREE, Inc. All Rights Reserved. OSS強化学習フレームワークの ⽐較 2019/01/16 グリー株式会社 開発本部 辻本 貴昭

Slide 2

Slide 2 text

Copyright © GREE, Inc. All Rights Reserved. • グリーでの利⽤例 • フレームワーク全体のざっくりとした⽐較 • 各フレームワークごとの紹介 • Coach • RLlib • ChainerRL • Keras-RL • StableBaseline • Dopamine • Horizon 概要

Slide 3

Slide 3 text

Copyright © GREE, Inc. All Rights Reserved. • 敵のパラメータを調整後、バトルを繰り返して確認 • 想定通りのダメージ量になっているか︖ • 乱数の影響は想定の範囲内に収まっているか︖ • 問題点 • キャラクターの性能を把握していないとできない • かなり時間がかかる • 解決案 • バトルプレイAIの導⼊ • ルールを記述したり、バトルの状態毎に教師データを⽤意するのはほぼ不可能 • 強化学習でなんとかならないか︖ 利⽤例 ターン制コマンドバトルRPGでのバランス確認

Slide 4

Slide 4 text

Copyright © GREE, Inc. All Rights Reserved. • DQN, A3Cはだいたいどのフレームワークでも実装されている • 実装済みアルゴリズムはCoachが多い(ChainerRL, RLlibもそれなり) • 分散アルゴリズムはRLlibが充実している(Ape-X, IMPALAなど) • Dopamine, Keras-RLは実装済みアルゴリズムが少ない フレームワーク全体の⽐較 実装されているアルゴリズム

Slide 5

Slide 5 text

Copyright © GREE, Inc. All Rights Reserved. • 統合フレームワーク型 • 広範囲に抽象化している • 階層型・マルチエージェント環境に対応している • Coach, RLlib • 参考実装型 • 各アルゴリズムを統⼀したインターフェースで学習・推論できるようにしている • ChainerRL, Keras-RL, Dopamine, StableBaseline • 番外編 • ゲームQA・バランス調整の観点でみると⽬的が違うもの • Horizon • シミュレータが⽤意できないオフライン学習が主な⽬的 • ストリーミング配信のビットレート最適化に使っているらしい フレームワーク全体の⽐較 フレームワークの思想の違い

Slide 6

Slide 6 text

Copyright © GREE, Inc. All Rights Reserved. • 実験設定(preset)を記述してツールから実⾏する • presetに書く内容 • 学習させるステップ数 • どの学習アルゴリズムを利⽤するか • アルゴリズムごとのハイパーパラメータ • 環境の設定 Coach 使い⽅ $ coach -p CartPole_DQN $ coach -p CartPole_DQN –crd checkpoint-dir --evaluate

Slide 7

Slide 7 text

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の書き⽅

Slide 8

Slide 8 text

Copyright © GREE, Inc. All Rights Reserved. • 独⾃ダッシュボード • lossやrewardの確認 • グラフのスケールが⾃動で変わらずに使いにくい • カスタムメトリックを追加可能 • TensorBoard • ネットワーク構造や重みの確認 Coach ダッシュボード

Slide 9

Slide 9 text

Copyright © GREE, Inc. All Rights Reserved. • 環境とAgentを管理し、学習・評価全般をコントロールする • 学習はheatup, train and act, evaluateの3フェーズに分けられる • heatup • replay bufferの初期値を集めるためにランダム⾏動 • train and act • 環境からデータを集めながら価値関数や⽅策を更新 • ⾏動の決定の際は探索ポリシーに基づいて探索する • evaluate • 今のAgentの性能を評価する • ⾏動の決定の際は最善⾏動を選択する Coach アーキテクチャ(Graph Manager)

Slide 10

Slide 10 text

Copyright © GREE, Inc. All Rights Reserved. • 環境とAgentの相互作⽤を仲介する • Coachでは環境とAgentは直接やり取りしない • Agentを複数持つことができる • 他のLevel Managerに対して環境として振る舞う • 階層型の環境を実現するため Coach アーキテクチャ(Level Manager) Level Manager Level Manager Agent Agent Agent Environment

Slide 11

Slide 11 text

Copyright © GREE, Inc. All Rights Reserved. • アルゴリズムを定義する • Observe • 環境の最新状態をLevel Managerから受け取る • Act • Observeで受けとった情報を元に、次の⾏動を決定する • Train • ネットワークを学習する • パラメータはパラメータ⽤のクラスで管理する • AgentParameter • NetworkParameter Coach アーキテクチャ(Agent)

Slide 12

Slide 12 text

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)

Slide 13

Slide 13 text

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 アーキテクチャ(その他)

Slide 14

Slide 14 text

Copyright © GREE, Inc. All Rights Reserved. • メリット • 開発が活発で実装されているアルゴリズムも多い • 階層型強化学習や模倣学習にも対応できる • 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単 • デメリット • 学習状況を把握するためのダッシュボードが使いにくい • ワーカを分散できるアルゴリズムの選択肢が少ない • 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい Coach メリット・デメリット

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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 実験設定の書き⽅

Slide 17

Slide 17 text

Copyright © GREE, Inc. All Rights Reserved. • TensorBoard • 標準ではRewardの遷移などが⾒られる。lossは無い • ネットワークの構造は⾒られない • callbackという仕組みを使ってカスタムメトリックを追加できる • episodeの開始・終了時 • step終了時 • trainの1イテレーション終了時 RLlib ダッシュボード

Slide 18

Slide 18 text

Copyright © GREE, Inc. All Rights Reserved. • Pythonの分散処理フレームワークRay上に実装されている • Rayのget(), put(), remote()などのメソッドがよく出てくる • Rayについて簡単に知っていないと読みにくい RLlib アーキテクチャ

Slide 19

Slide 19 text

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): # 重みの読込

Slide 20

Slide 20 text

Copyright © GREE, Inc. All Rights Reserved. • アルゴリズムを定義する • Policy Graph・Policy Evaluator・Policy Optimizerを組み合わせる RLlib アーキテクチャ(Agent)

Slide 21

Slide 21 text

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])

Slide 22

Slide 22 text

Copyright © GREE, Inc. All Rights Reserved. • Exploration Policies • 数ステップ毎に⼀定値減衰する • 初期値から最終値まで線形に減衰する • Preprocessor • Environmentの出⼒を前処理する • Open AI Gymのラッパーとして実装 • Atariのゲームで4フレームをまとめたり • rewardを[-1, 1]の範囲に変換したり RLlib アーキテクチャ(その他)

Slide 23

Slide 23 text

Copyright © GREE, Inc. All Rights Reserved. • メリット • 開発が活発で実装されているアルゴリズムも多い • 学習状況を把握するためのダッシュボードが⾒やすい • 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単 • Coachよりも簡単に書ける • デメリット • 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい • (⼿元の環境の問題だが)MacアプリにGym InterfaceをかぶせたEnvironmentだ とクラッシュして使えない RLlib メリット・デメリット

Slide 24

Slide 24 text

Copyright © GREE, Inc. All Rights Reserved. ChainerRL 使い⽅ • exampleのコードを実⾏ • コマンドライン引数 • 環境 • 学習させるstep数 • ハイパーパラメータ $ python example/train_dqn_gym.py --env CartPole-v0 --outdir /tmp/chainerrl

Slide 25

Slide 25 text

Copyright © GREE, Inc. All Rights Reserved. • 学習経過(LossやReward)のダッシュボードは⽤意されていない • ファイルには出⼒される • (試していないが)ステップ毎にアクションの確率などを可視化する ツールがある • ChainerRL Visualizer ChainerRL ダッシュボード

Slide 26

Slide 26 text

Copyright © GREE, Inc. All Rights Reserved. • experiments • Agentを学習・評価するループを回す仕組み • Evaluator • Agentを評価する • これまでの最⾼スコアなどを管理 • Agent • アルゴリズムを定義 • Model • ネットワークを定義 • Wrapper • Gymラッパー • Envの出⼒を前処理する ChainerRL アーキテクチャ experiments Agent Evaluator Environment Environment model

Slide 27

Slide 27 text

Copyright © GREE, Inc. All Rights Reserved. • メリット • 実装されているアルゴリズムが多い • 実装が読みやすい • ChainerRL Visualizerを使うと、バランス調整などに役⽴ちそう • デメリット • コマンドライン引数で実験設定を渡すので、別途設定を管理する必要がある • ChainerがTensorFlowほどメジャーではない ChainerRL メリット・デメリット

Slide 28

Slide 28 text

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)

Slide 29

Slide 29 text

Copyright © GREE, Inc. All Rights Reserved. • Matplotlib • jsonで出⼒されたログをプロットするためのサンプルスクリプトあり • ⾒にくい Keras-RL ダッシュボード

Slide 30

Slide 30 text

Copyright © GREE, Inc. All Rights Reserved. • Agent • 学習・評価のループを回す • アルゴリズムを定義 • Model • ネットワークを定義 • Processor • 環境からの出⼒を前処理する Keras-RL アーキテクチャ Agent Environment model processor

Slide 31

Slide 31 text

Copyright © GREE, Inc. All Rights Reserved. • メリット • ネットワークの変更が簡単 • 実装が読みやすい • デメリット • 実装されているアルゴリズムが少ない • 複数ワーカに分散させて学習ができない Keras-RL メリット・デメリット

Slide 32

Slide 32 text

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()

Slide 33

Slide 33 text

Copyright © GREE, Inc. All Rights Reserved. • TensorBoard • ネットワーク構造 • reward, loss • ⾃分でネットワークを定義すればtf.summaryで追加できる • その他 • step毎に呼び出されるcallbackを定義すれば、ファイルなどに値を出⼒可能 StableBaseline ダッシュボード

Slide 34

Slide 34 text

Copyright © GREE, Inc. All Rights Reserved. • Model • 学習のループを回す • アルゴリズムを定義する • Policy • ネットワークを定義する • 多層パーセプトロン、畳み込み、LSTM • EnvWrapper • 環境からの出⼒を前処理 • マルチワーカ対応 StableBaseline アーキテクチャ Model Policy EnvWrapper Environment Environment

Slide 35

Slide 35 text

Copyright © GREE, Inc. All Rights Reserved. • メリット • ネットワークの変更が簡単 • 実装が読みやすい • ダッシュボードが⾒やすい • デメリット • 実験のためにコードを書かないといけない StableBaseline メリット・デメリット

Slide 36

Slide 36 text

Copyright © GREE, Inc. All Rights Reserved. • 実験設定を記述してツールから実⾏する • 実験設定に書く内容 • 環境 • 学習させるstep数 • アルゴリズムのハイパーパラメータ Dopamine 使い⽅ $ python -um dopamine.atari.train --agent_name=dqn -- base_dir=/tmp/dopamine --gin_files=ʼdqn.ginʼ

Slide 37

Slide 37 text

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 実験設定の書き⽅

Slide 38

Slide 38 text

Copyright © GREE, Inc. All Rights Reserved. • TensorBoard • ネットワーク構造、報酬の平均、エピソード数のみ Dopamine ダッシュボード

Slide 39

Slide 39 text

Copyright © GREE, Inc. All Rights Reserved. • メリット • TensorFlowによる参考実装としては読みやすい • 実験設定の書き⽅は簡単 • デメリット • ドキュメントが全く⾜りていない • 実装されているアルゴリズムが少ない Dopamine メリット・デメリット

Slide 40

Slide 40 text

Copyright © GREE, Inc. All Rights Reserved. • ChainerRL、StableBaselineから使い始めると良さそう • アルゴリズムが揃っている • ダッシュボードが⾒やすい (ChainerRL Visualizerは試してみたい) • 実装が読みやすい • もっと複雑なことがしたくなったらCoach, RLlib • 階層型の環境やマルチエージェント環境が使いやすいようになっている • 複数ノードにワーカを分散する仕組みが⼊っている • 複雑なので、Agentにわたすパラメータの意味を実装から読み解くのがしんどい まとめ