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
150
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
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
190
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
150
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
140
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
120
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
150
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
240
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
180
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
230
Jamstack でリニューアルするグリーグループのメディア
gree_tech
PRO
2
390
Other Decks in Technology
See All in Technology
フロントエンド設計にモブ設計を導入してみた / 20241212_cloudsign_TechFrontMeetup
bengo4com
0
1.9k
C++26 エラー性動作
faithandbrave
2
710
KubeCon NA 2024 Recap: How to Move from Ingress to Gateway API with Minimal Hassle
ysakotch
0
200
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.8k
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
100
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
390
Wvlet: A New Flow-Style Query Language For Functional Data Modeling and Interactive Data Analysis - Trino Summit 2024
xerial
1
110
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
220
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
170
開発生産性向上! 育成を「改善」と捉えるエンジニア育成戦略
shoota
1
290
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
100
AWS re:Invent 2024 ふりかえり
kongmingstrap
0
130
Featured
See All Featured
Docker and Python
trallard
42
3.1k
Into the Great Unknown - MozCon
thekraken
33
1.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Visualization
eitanlees
146
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
The World Runs on Bad Software
bkeepers
PRO
65
11k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
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にわたすパラメータの意味を実装から読み解くのがしんどい まとめ