Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

999 views

Published on

グリー開発本部 Meetup #2 ゲーム x 強化学習エンジニアリングで発表された資料です。
https://gree.connpass.com/event/112599/
#GDMeetup

Published in: Engineering
  • Be the first to comment

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

  1. 1. Copyright © GREE, Inc. All Rights Reserved. OSS強化学習フレームワークの 比較 2019/01/16 グリー株式会社 開発本部 辻本 貴昭
  2. 2. Copyright © GREE, Inc. All Rights Reserved. • グリーでの利用例 • フレームワーク全体のざっくりとした比較 • 各フレームワークごとの紹介 • Coach • RLlib • ChainerRL • Keras-RL • StableBaseline • Dopamine • Horizon 概要
  3. 3. Copyright © GREE, Inc. All Rights Reserved. • 敵のパラメータを調整後、バトルを繰り返して確認 • 想定通りのダメージ量になっているか? • 乱数の影響は想定の範囲内に収まっているか? • 問題点 • キャラクターの性能を把握していないとできない • かなり時間がかかる • 解決案 • バトルプレイAIの導入 • ルールを記述したり、バトルの状態毎に教師データを用意するのはほぼ不可能 • 強化学習でなんとかならないか? 利用例 ターン制コマンドバトルRPGでのバランス確認
  4. 4. Copyright © GREE, Inc. All Rights Reserved. • DQN, A3Cはだいたいどのフレームワークでも実装されている • 実装済みアルゴリズムはCoachが多い(ChainerRL, RLlibもそれなり) • 分散アルゴリズムはRLlibが充実している(Ape-X, IMPALAなど) • Dopamine, Keras-RLは実装済みアルゴリズムが少ない フレームワーク全体の比較 実装されているアルゴリズム
  5. 5. Copyright © GREE, Inc. All Rights Reserved. • 統合フレームワーク型 • 広範囲に抽象化している • 階層型・マルチエージェント環境に対応している • Coach, RLlib • 参考実装型 • 各アルゴリズムを統一したインターフェースで学習・推論できるようにしている • ChainerRL, Keras-RL, Dopamine, StableBaseline • 番外編 • ゲームQA・バランス調整の観点でみると目的が違うもの • Horizon • シミュレータが用意できないオフライン学習が主な目的 • ストリーミング配信のビットレート最適化に使っているらしい フレームワーク全体の比較 フレームワークの思想の違い
  6. 6. Copyright © GREE, Inc. All Rights Reserved. • 実験設定(preset)を記述してツールから実行する • presetに書く内容 • 学習させるステップ数 • どの学習アルゴリズムを利用するか • アルゴリズムごとのハイパーパラメータ • 環境の設定 Coach 使い方 $ coach -p CartPole_DQN $ coach -p CartPole_DQN –crd checkpoint-dir --evaluate
  7. 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. 8. Copyright © GREE, Inc. All Rights Reserved. • 独自ダッシュボード • lossやrewardの確認 • グラフのスケールが自動で変わらずに使いにくい • カスタムメトリックを追加可能 • TensorBoard • ネットワーク構造や重みの確認 Coach ダッシュボード
  9. 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. 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. 11. Copyright © GREE, Inc. All Rights Reserved. • アルゴリズムを定義する • Observe • 環境の最新状態をLevel Managerから受け取る • Act • Observeで受けとった情報を元に、次の行動を決定する • Train • ネットワークを学習する • パラメータはパラメータ用のクラスで管理する • AgentParameter • NetworkParameter Coach アーキテクチャ(Agent)
  12. 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. 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. 14. Copyright © GREE, Inc. All Rights Reserved. • メリット • 開発が活発で実装されているアルゴリズムも多い • 階層型強化学習や模倣学習にも対応できる • 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単 • デメリット • 学習状況を把握するためのダッシュボードが使いにくい • ワーカを分散できるアルゴリズムの選択肢が少ない • 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい Coach メリット・デメリット
  15. 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. 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. 17. Copyright © GREE, Inc. All Rights Reserved. • TensorBoard • 標準ではRewardの遷移などが見られる。lossは無い • ネットワークの構造は見られない • callbackという仕組みを使ってカスタムメトリックを追加できる • episodeの開始・終了時 • step終了時 • trainの1イテレーション終了時 RLlib ダッシュボード
  18. 18. Copyright © GREE, Inc. All Rights Reserved. • Pythonの分散処理フレームワークRay上に実装されている • Rayのget(), put(), remote()などのメソッドがよく出てくる • Rayについて簡単に知っていないと読みにくい RLlib アーキテクチャ
  19. 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. 20. Copyright © GREE, Inc. All Rights Reserved. • アルゴリズムを定義する • Policy Graph・Policy Evaluator・Policy Optimizerを組み合わせる RLlib アーキテクチャ(Agent)
  21. 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. 22. Copyright © GREE, Inc. All Rights Reserved. • Exploration Policies • 数ステップ毎に一定値減衰する • 初期値から最終値まで線形に減衰する • Preprocessor • Environmentの出力を前処理する • Open AI Gymのラッパーとして実装 • Atariのゲームで4フレームをまとめたり • rewardを[-1, 1]の範囲に変換したり RLlib アーキテクチャ(その他)
  23. 23. Copyright © GREE, Inc. All Rights Reserved. • メリット • 開発が活発で実装されているアルゴリズムも多い • 学習状況を把握するためのダッシュボードが見やすい • 設定ファイルを書くだけで学習・評価ができるので共有・再現が簡単 • Coachよりも簡単に書ける • デメリット • 実装が複雑で、新しいアルゴリズムを追加したり実装を読んだりするのが難しい • (手元の環境の問題だが)MacアプリにGym InterfaceをかぶせたEnvironmentだ とクラッシュして使えない RLlib メリット・デメリット
  24. 24. Copyright © GREE, Inc. All Rights Reserved. ChainerRL 使い方 • exampleのコードを実行 • コマンドライン引数 • 環境 • 学習させるstep数 • ハイパーパラメータ $ python example/train_dqn_gym.py --env CartPole-v0 --outdir /tmp/chainerrl
  25. 25. Copyright © GREE, Inc. All Rights Reserved. • 学習経過(LossやReward)のダッシュボードは用意されていない • ファイルには出力される • (試していないが)ステップ毎にアクションの確率などを可視化する ツールがある • ChainerRL Visualizer ChainerRL ダッシュボード
  26. 26. Copyright © GREE, Inc. All Rights Reserved. • experiments • Agentを学習・評価するループを回す仕組み • Evaluator • Agentを評価する • これまでの最高スコアなどを管理 • Agent • アルゴリズムを定義 • Model • ネットワークを定義 • Wrapper • Gymラッパー • Envの出力を前処理する ChainerRL アーキテクチャ experiments Agent Evaluator Environment Environment model
  27. 27. Copyright © GREE, Inc. All Rights Reserved. • メリット • 実装されているアルゴリズムが多い • 実装が読みやすい • ChainerRL Visualizerを使うと、バランス調整などに役立ちそう • デメリット • コマンドライン引数で実験設定を渡すので、別途設定を管理する必要がある • ChainerがTensorFlowほどメジャーではない ChainerRL メリット・デメリット
  28. 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. 29. Copyright © GREE, Inc. All Rights Reserved. • Matplotlib • jsonで出力されたログをプロットするためのサンプルスクリプトあり • 見にくい Keras-RL ダッシュボード
  30. 30. Copyright © GREE, Inc. All Rights Reserved. • Agent • 学習・評価のループを回す • アルゴリズムを定義 • Model • ネットワークを定義 • Processor • 環境からの出力を前処理する Keras-RL アーキテクチャ Agent Environmentmodel processor
  31. 31. Copyright © GREE, Inc. All Rights Reserved. • メリット • ネットワークの変更が簡単 • 実装が読みやすい • デメリット • 実装されているアルゴリズムが少ない • 複数ワーカに分散させて学習ができない Keras-RL メリット・デメリット
  32. 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. 33. Copyright © GREE, Inc. All Rights Reserved. • TensorBoard • ネットワーク構造 • reward, loss • 自分でネットワークを定義すればtf.summaryで追加できる • その他 • step毎に呼び出されるcallbackを定義すれば、ファイルなどに値を出力可能 StableBaseline ダッシュボード
  34. 34. Copyright © GREE, Inc. All Rights Reserved. • Model • 学習のループを回す • アルゴリズムを定義する • Policy • ネットワークを定義する • 多層パーセプトロン、畳み込み、LSTM • EnvWrapper • 環境からの出力を前処理 • マルチワーカ対応 StableBaseline アーキテクチャ Model Policy EnvWrapper Environment Environment
  35. 35. Copyright © GREE, Inc. All Rights Reserved. • メリット • ネットワークの変更が簡単 • 実装が読みやすい • ダッシュボードが見やすい • デメリット • 実験のためにコードを書かないといけない StableBaseline メリット・デメリット
  36. 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. 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. 38. Copyright © GREE, Inc. All Rights Reserved. • TensorBoard • ネットワーク構造、報酬の平均、エピソード数のみ Dopamine ダッシュボード
  39. 39. Copyright © GREE, Inc. All Rights Reserved. • メリット • TensorFlowによる参考実装としては読みやすい • 実験設定の書き方は簡単 • デメリット • ドキュメントが全く足りていない • 実装されているアルゴリズムが少ない Dopamine メリット・デメリット
  40. 40. Copyright © GREE, Inc. All Rights Reserved. • ChainerRL、StableBaselineから使い始めると良さそう • アルゴリズムが揃っている • ダッシュボードが見やすい (ChainerRL Visualizerは試してみたい) • 実装が読みやすい • もっと複雑なことがしたくなったらCoach, RLlib • 階層型の環境やマルチエージェント環境が使いやすいようになっている • 複数ノードにワーカを分散する仕組みが入っている • 複雑なので、Agentにわたすパラメータの意味を実装から読み解くのがしんどい まとめ

×