Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSS強化学習フレームワークの比較
Search
gree_tech
PRO
January 23, 2019
Technology
0
64
OSS強化学習フレームワークの比較
グリー開発本部 Meetup #2 ゲーム x 強化学習エンジニアリングで発表された資料です。
https://gree.connpass.com/event/112599/
#GDMeetup
gree_tech
PRO
January 23, 2019
Tweet
Share
More Decks by gree_tech
See All by gree_tech
kustomizeをいい感じに使う方法
gree_tech
PRO
3
950
スケーラビリティとコスト管理 Google Cloud Spanner 費用最適化の取り組み
gree_tech
PRO
0
520
「アナザーエデン 時空を超える猫」の5年前のログを引っ越してデータドリブンで事業運用プロセスを改善した話
gree_tech
PRO
0
360
Unity,PHP+Jenkins+GAS 多言語対応を意識させない開発を目指したシステム構築
gree_tech
PRO
0
810
全社総会における「REALITY Spaces」の活用と、Addressableを用いたコンテンツ配信技術について
gree_tech
PRO
0
470
AWSのEKS環境でログ機能を構築/リリースしたお話
gree_tech
PRO
0
360
「ヘブンバーンズレッド」の大規模アップデートにおける国内及び翻訳QAの取り組み
gree_tech
PRO
0
440
アプリ「REALITY」の12言語対応プロセスの仕組みと品質向上の取り組み
gree_tech
PRO
0
680
REALITYアプリのメンテナンスなしでの機能リリースを実現する、Istio導入とB/Gデプロイ実現の取り組み
gree_tech
PRO
0
550
Other Decks in Technology
See All in Technology
社内アプリで Cloudflare D1を プロダクト運用してみた体験談(Tokyo)
haochenx
0
130
MixIT 2024 - Pulumi : Gérer son infra avec son langage de programmation préféré
ju_hnny5
1
120
Cypress or Playwright?
rainerhahnekamp
0
180
エンジニア候補者向け資料2024.04.24.pdf
macloud
0
3.4k
One engineer company with Ruby on Rails
rstankov
2
450
今年のRubyKaigiはProfiler Year🤘
osyoyu
0
490
ルーターでプレゼンする
puhitaku
1
3.4k
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
340
Gradle Build Scanを使ってビルドのことを知ろう potatotips #87
tomorrowkey
2
160
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
280
AWS学習者向けにAzureの解説スライドを作成した話
handy
3
210
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
1.1k
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
56
9.3k
Six Lessons from altMBA
skipperchong
22
3k
Building an army of robots
kneath
300
41k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
41
4.4k
Stop Working from a Prison Cell
hatefulcrawdad
267
19k
What's in a price? How to price your products and services
michaelherold
238
11k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
The Language of Interfaces
destraynor
151
23k
10 Git Anti Patterns You Should be Aware of
lemiorhan
649
58k
Visualization
eitanlees
137
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
Transcript
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 Environment model 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にわたすパラメータの意味を実装から読み解くのがしんどい まとめ