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
230
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
コミュニケーションに鍵を見いだす、エンジニア1年目の経験談
gree_tech
PRO
0
120
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
1.7k
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
560
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
560
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
530
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
610
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
970
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
630
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
750
Other Decks in Technology
See All in Technology
250627 関西Ruby会議08 前夜祭 RejectKaigi「DJ on Ruby Ver.0.1」
msykd
PRO
2
340
本が全く読めなかった過去の自分へ
genshun9
0
630
GeminiとNotebookLMによる金融実務の業務革新
abenben
0
240
あなたの声を届けよう! 女性エンジニア登壇の意義とアウトプット実践ガイド #wttjp / Call for Your Voice
kondoyuko
4
480
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
970
WordPressから ヘッドレスCMSへ! Storyblokへの移行プロセス
nyata
0
170
~宇宙最速~2025年AWS Summit レポート
satodesu
1
1.9k
CI/CD/IaC 久々に0から環境を作ったらこうなりました
kaz29
1
190
KubeCon + CloudNativeCon Japan 2025 Recap by CA
ponkio_o
PRO
0
160
解析の定理証明実践@Lean 4
dec9ue
0
180
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
17
5.8k
MapStore at geOcom 2025: A Year in Review
simboss
PRO
0
100
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
430
65k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
GraphQLとの向き合い方2022年版
quramy
49
14k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
A designer walks into a library…
pauljervisheath
207
24k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
4 Signs Your Business is Dying
shpigford
184
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
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にわたすパラメータの意味を実装から読み解くのがしんどい まとめ