Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

gree_tech

January 23, 2019
Tweet

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. Copyright © GREE, Inc. All Rights Reserved. • グリーでの利⽤例 •

    フレームワーク全体のざっくりとした⽐較 • 各フレームワークごとの紹介 • Coach • RLlib • ChainerRL • Keras-RL • StableBaseline • Dopamine • Horizon 概要
  2. Copyright © GREE, Inc. All Rights Reserved. • 敵のパラメータを調整後、バトルを繰り返して確認 •

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

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

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

    presetに書く内容 • 学習させるステップ数 • どの学習アルゴリズムを利⽤するか • アルゴリズムごとのハイパーパラメータ • 環境の設定 Coach 使い⽅ $ coach -p CartPole_DQN $ coach -p CartPole_DQN –crd checkpoint-dir --evaluate
  6. 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の書き⽅
  7. Copyright © GREE, Inc. All Rights Reserved. • 独⾃ダッシュボード •

    lossやrewardの確認 • グラフのスケールが⾃動で変わらずに使いにくい • カスタムメトリックを追加可能 • TensorBoard • ネットワーク構造や重みの確認 Coach ダッシュボード
  8. Copyright © GREE, Inc. All Rights Reserved. • 環境とAgentを管理し、学習・評価全般をコントロールする •

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

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

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

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

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

    Rayのget(), put(), remote()などのメソッドがよく出てくる • Rayについて簡単に知っていないと読みにくい RLlib アーキテクチャ
  18. 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): # 重みの読込
  19. Copyright © GREE, Inc. All Rights Reserved. • アルゴリズムを定義する •

    Policy Graph・Policy Evaluator・Policy Optimizerを組み合わせる RLlib アーキテクチャ(Agent)
  20. 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])
  21. Copyright © GREE, Inc. All Rights Reserved. • Exploration Policies

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

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

    exampleのコードを実⾏ • コマンドライン引数 • 環境 • 学習させるstep数 • ハイパーパラメータ $ python example/train_dqn_gym.py --env CartPole-v0 --outdir /tmp/chainerrl
  24. Copyright © GREE, Inc. All Rights Reserved. • 学習経過(LossやReward)のダッシュボードは⽤意されていない •

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

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

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

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

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

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

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

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

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

    実験設定に書く内容 • 環境 • 学習させるstep数 • アルゴリズムのハイパーパラメータ Dopamine 使い⽅ $ python -um dopamine.atari.train --agent_name=dqn -- base_dir=/tmp/dopamine --gin_files=ʼdqn.ginʼ
  36. 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 実験設定の書き⽅
  37. Copyright © GREE, Inc. All Rights Reserved. • TensorBoard •

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

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

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