深層強化学習の self-playで、複雑な行動を機械に学習させたい!
-
Upload
junichiro-katsuta -
Category
Data & Analytics
-
view
53 -
download
0
Transcript of 深層強化学習の self-playで、複雑な行動を機械に学習させたい!
GMOインターネット 次世代システム研究室
勝田 隼一郎 2017/12/27 次世代システム研究室-研究発表 (GMO Yours)
深層強化学習の self-playで、複雑な行動を機械に学習させたい!
�2
スライド長いよ!という人のために、ハイライトをまとめたブログが以下にあります。 「深層強化学習のself-playで遊んでみた!」 https://recruit.gmo.jp/engineer/jisedai/blog/self-play/
実験結果のアニメーションが以下にあります。 https://github.com/jkatsuta/17_4q_supplement
はじめに
�3
自己紹介勝田 隼一郎 • 大学時代: ボートに熱中しすぎ留年 • 東京大学大学院理学系 研究科物理学 修了(博士) • Stanford大学と広島大学で ポスドク(日本学術振興会; 高エネルギー宇宙物理学) 2016.4: GMOインターネット 次世代システム研究室 データサイエンティスト兼アーキテクト
�4
本研究の背景AlphaGoなどで有名になった深層強化学習。
近”self-play”による研究もさかん。
正解のない世界で、より正しい方法を模索する強化学習。その中でも、機械同士を争わせてよりよい手法を学習するself-playは、有望な手法の一つ!
�5
本研究の背景ちょうどこんな記事も。 「日立製作所、ビジネス適用可能な自己競争型AI技術を開発」 https://japan.zdnet.com/article/35112453/
(ZDNet Japan 2017/12/25)
�6
本研究の目的
「Self-playによる深層強化学習について、近発表された論文をベースに学び、その知見を習得しグループに共有する。」
目的 「Self-playで遊んでみたい!」
大人の言葉に翻訳すると、、、
7
Outline
1. イントロ • 深層強化学習とは • Self-playとは(Alpha Goを例に)
2. 実験 • 背景、セットアップ • 実験結果、デモ • 考察
�8
イントロ
9
深層強化学習とは?深層学習の技術を 強化学習という学習フレームワークに応用
ここでは強化学習について説明する。 深層学習については、強化学習のフレームワークを実現するのに便利な道具、と思ってもらえば良い。
参考:「Deep Q-LearningでFXしてみた @ slideshare」 https://www.slideshare.net/JunichiroKatsuta/deep-qlearningfx
10
強化学習は、機械学習の一種
教師あり学習
教師なし学習
強化学習
�11
機械は何を学習してる?(教師あり学習)
input data
output data
与えられたデータyに合うように パラメータを学習(人のアナロジー)
モデル
x f(x) = ax + b f(x) vs y
f(x) = 1*x + 7 f(x) = 2.1x + 1.6
�12
機械学習とは
数式(モデル)= “機械”のパラメータを、データに合うように、 適化 = “学習”すること
深層学習も原理は全く同じ。 何か神秘的なことが起きているのではない。
�13
教師あり学習 vs 強化学習例:無人島サバイバル
教師あり学習 “ツアー:無人島サバイバルを体験しよう! # 経験豊富ガイドがいるので安全です!”
• ガイド(教師)がいる。 • 参加者(学習者)は、ガイドの言うとおりにすれば(正解データを真似すれば)、魚を釣り、火を起こせる。サバイバルには困らない。
�14
教師あり学習 vs 強化学習
強化学習 = “リアルガチな無人島”
• 教師がいない。 • 一人で行動し、その行動の結果から学習する。 • 正解がわからない中で、”正しそう”な「方針」を学ぶ。効率的な学習をしないと死んでしまう。。
�15
強化学習の概念図Agent (学習者)が 環境からの 情報(状態、報酬)をもとに、 適( 終的な報酬が も高くなる)な行動をとるように学習する技術
�16
囲碁の場合
• 状態: 盤上の碁の位置 • 行動: 自分の石を一つ置く • 報酬: 勝つか負けるか
�17
AlphaGo• Google DeepMind社が開発した囲碁をプレイするプログラム。
• 2016, 2017年に世界トップ棋士(人間)をなぎ倒し、史上 強に。
• 2017/10には後継のAlphaGo Zeroが発表。 • 人に圧勝したAlphaGoを、さらにフルボッコにしてドラゴンボールの世界を現実世界に展開。。← ナメック星で、フリーザの戦闘力を聞いた時の絶望感くらい。
�18
AlphaGo1. 教師あり学習(人間の棋譜が教師) 2. 機械同士の対戦(self-play)で、さらに性能を高める
3. モンテカルロ木探索
AlphaGo Zero• Self-play x モンテカルロ木探索
• 人間の棋譜は全く使用せず • 純粋に機械だけで学習
�19
強化学習
�20
Self-play
�21
注:• 前頁ではわかりやすさのため、2 agentsで分けたが、囲碁のように完全に対照的なゲームの場合、agentは2体でもモデルは1 agent分あれば十分。
• ただし非対称な場合は、agentごとにモデルが必要なので、前頁の方がより一般的な場合に当てはまる。
• もちろん、より一般的にはN agentsに拡張できる。
�22
Self-play• 人の知識が要らず、機械だけで学習
• 人が楽 • 人が考えないような行動を学習する可能性
• 膨大な回数のゲームを(疲れずに)行える • 対戦相手が徐々に強くなることで、単純な環境/ルールから複雑な行動の学習が可能
→ 囲碁以外にも応用できそう!
�23
実験
�24
実験の背景下記論文(2017/10発表)を参考にする
�25
run-to-goal-ants-v0
�26
実験の内容
自陣からスタートして、相手陣地の ゴールに先についたAgentの勝利
Agent0 Agent1
下記ゲームを、敵対するAgent同士で争わせる。勝利 = 報酬。 相手に勝つ様に互いが学習することで、どちらも強いAgent
run-to-goal-ants-v0:
に成長していく、、 はず。
�27
実験の目的1.上述の論文の再現実験を行う。論文にはほ
ぼ学習結果しか書かれていない。自前で実験することで、途中経過も観測可能となり、結果と合わせて考察する。
2.再現するだけでは面白くないので、論文から設定を少し変更して実験する。変更により結果がどう変化するか観察し考察。
�28
Self-play
�29
行動:足のjoint部分の動かし幅。 4足 x 2箇所 = 8箇所をどのように 動かすかを学習する。
状態:Agentが知覚できると仮定できる情報 (自分の位置 + 相手の位置 + 自分の足を どのように動かしたか + 外力)
目は描いてないけど、あるってことにして学習するよ
�30
• 上の報酬だけだと、歩くことすら困難。 • 赤ちゃんが歩くことから学習するように、学習初期は歩けたら、すぐに(dense)報酬。
• 学習回数が増えるごとに、ゴール報酬(sparse)に切り替えていく。
報酬: • 勝ち → プラスの報酬 • 負け → マイナスの報酬
Advanced!: dense → sparse rewards
�31
強化学習アルゴリズムの概念図
データ収集
方針の改善
(改善した 方針で)
(状態→行動の ”方針”を改善)
データ加工
(Q, V, A, etc)1周 = 1 iteration iterごとにモデルが学習
本実験では、 何度もゲームをすること (5万steps/iter; ボトルネック)
�32
学習曲線
学習回数
報酬
正しく強化学習していれば、Agentは学習を重ねるごとに強くなり(=報酬が大きくなり)、いずれかの時点で収束する。
�33
使用マシンGMOアプリクラウド type XL
•12 vCPU •120-GB mem •2.66 GHz
学習のボトルネックは、学習データの収集時間 → 複数のプロセスを並列に走らせることで、同時にデータ収集し時間を節約。
�34
本実験の準備で、自分のやったこと
• 1 agentで学習するアルゴリズム (PPO) • https://github.com/openai/baselines
• ゲーム環境(run-to-goal-ants-v0) • https://github.com/openai/multiagent-competition
1. このゲームを学習するには、2 agentsでPPOを用いて相互に学習する必要がある。 → 上記コードを用いて作成 (TensorFlow)2. ゲーム環境を論文に合わせるよう修正
既存のものを使用
やったこと
�35
3. 論文通りのパラメータで学習すると、全然終わらないので、学習パラメータを変更。
論文 本実験model MLP MLPn_hidden_layer 2 2n_hidden_unit 128 64learning rate 1E-03 1E-03ε_PPO 0.2 0.2γ 0.995 0.995λ_GAE 0.95 0.95n_batch 409600 (~4e+5) 49152 (~5e+4)n_mini_batch 5120 1024n_epoch / iter 6 10α_annealing 0 @ 500 iters 0 @ 300 iters
論文: 1 iter (改善) ~ 9分 → 1000 itersで~6日 → 1 iterで収集するデータ量を~1/8に変更 → 1000 iters ~ 1日弱
�36
前置きが長くなりましたが 実験開始!
実施した実験1. 実験1(テスト)
• 複雑な実験をする前のテスト 2. 実験2(本番)
• 本番。論文の再現実験 3. 実験3(応用)
• 実験2から、若干セットアップを変更 • どのように結果が変化するかチェック
4. 実験5(おまけ; 実験4は割愛)
�38
実験1
�39
実験1: テストルール Agent0のみ学習。もう一方 (Agent1)は学習しない。 # self-playでなく普通の1-agent強化学習。
期待 Agent0がまっすぐ進む ように学習 # Agent1はランダムに行動
Agent0: learning
Agent1: no-learning
???
�40
実験1: 学習曲線
940500150500
1000が 報酬のMAX
iter=500でほぼ収束 よく見ると、報酬が微増
�41
注:これから紹介していく、実験1–5の結果のアニメーションは https://github.com/jkatsuta/17_4q_supplement にあります。
�42
iter = 0 Agent0 Agent1
�43
実験1: 結果(iter=0)
• 何も学んでないので、適当に動いている。 • 学習しないと高く跳ねて、自滅する。
�44
iter = 50
�45
• この時点で学んでいるのは、ゴールすることよりちゃんと歩くこと。
• Agent0(赤)はそれを学習しつつあるのがわかる(跳ねにくい傾向)。
• Agent1(青)は何も学習していない。当たり前だが。。
実験1: 結果 (iter=50)
�46
iter = 150
�47
iter = 150
• ゴールに行く学習をしている。 • ただしまだ不安定。
実験1: 結果(iter=150)
�48
iter = 500
�49
• 確実にゴールする学習をしている。 • まっすぐ進むように学習するのかと予想したが、相手Agentを避けるよう、右に進むように学習している。
• 賢いなぁ。。
実験1: 結果(iter=500)
�50
iter = 940 (final model)
�51
iter = 940
• Final model • 確実にゴールする学習をしている。 • iter=500との差は殆ど見えない(iter=500で、ほぼ学習が収束しているようだ)。
実験1: 結果 (iter=940)
�52
実験2
�53
実験2: 本番
ルール 論文の通り。2体のAgentが、 相手より早くゴールに到達す るように学習する。
Agent0: learning
�53
Agent1: learning
�54
実験2: 学習曲線
• 全体的な学習曲線の形は、実験1のときに似ている。 • 収束している値は300程度(実験1はMAXの~1000) • これは相手に勝ったり負けたりしているから。
970
�55
Agent0 (iter = 970) vs
Agent1 (iter = 970)
�56
実験2:結果(iter = 970)• 学習した戦略は、基本的には
• 相手に体当たりをする。 • 相手が怯んだら、そのすきにゴールに走る
• しかし明らかに相手を倒す事に”固執”したような行動も見られる。
• これは、ただ単に自分がゴールに向かうより、相手を倒した方が勝てる事を学んだ、とも考えられる。
�57
実験2: 複雑な行動の創発• 単純な環境:ゴールと相手Agentのみ • 単純なルール:相手陣地のゴールを先に走り抜ければ良い。
• しかし 終的に学んだ戦略(の方向性)は、「ただ単に早くゴールする」ではなく、「相手の息の根を止めてから、確実に自分がゴールする」というもの。
�58
実験2: 複雑な行動の創発
• 環境もルールも倒すことに報酬は与えていない。Agent同士が勝負をする中で、相手を倒す行動を学習。
• 実験1では、相手Agentが弱すぎて、倒す行動は学習していない。
• 実験2でも、学習初期は相手を倒すことより、ゴールを目指す事(報酬そのもの)に重きを置いているように見える(次頁)。
単純な環境 x self-play → 複雑な行動
�59
Agent0 (iter = 300) vs
Agent1 (iter = 300)
�60
実験2: 新モデルは本当に 強?
50% =互角
勝率
Agent1の過去モデル新しいモデル(iter>~800)では、ほぼ互角だが、 新モデルは 強と言って問題ない。
Agent0の 新モデル(970) vs 色々なAgent1の過去モデル
�61
Agent0 (iter = 970) vs
Agent1 (iter = 300)
�62
実験3
�63
実験3: 応用
�63
期待 Agent0が勝つには、ただゴールに向かうのではダメ。Agent1を倒す必要がある。その学習をできるか?
Agent0を 斜め後ろに移動
ルール 実験2と同じ。ただし、Agent0の初期位置を、実験2の位置から斜め後ろにずらす。 明らかにAgent0が不利
�64
圧倒的絶望。。。
1920800
「Agent0が~100%負け」に収束している。期待通りには学習できなかったようだ。。
�65
Agent0 (iter = 800) vs
Agent1 (iter = 800)
�66
Agent0 (iter = 1920) vs
Agent1 (iter = 1920)
�67
実験3: 考察• 学習曲線で覚悟した行動よりは、悪くなかった。iter=800→1920でも学習をしている。
• Agent0:Agent1側に動く(Agent1をinterruptしようとする)行動は学習している。
• Agent1:初動でAgent0のいない方向に思いっきり飛んで、Agent0に邪魔されないように学習している。
�68
実験3: 考察• 実験2から初期値を変更すると、それに応じた異なる行動を学習
• 両Agentとも学習するが、現状のゲーム設定では、学習が収束するとAgent1がほぼ勝ってしまう。
• Self-playとはいえ、期待する行動の学習させるには、ちゃんと設定をしないといけないことがわかる。
�69
実験5
�70
実験5: 追加実験 (実験4は割愛)
�70
期待 実験3の設定では、Agent0が不利すぎたので、制約を緩和する。Agent0の勝率が上がる事を期待。
Agent0を 後ろに移動
ルール 実験2と同じ。ただし、Agent0の初期位置を、実験2の位置から後ろにずらす。 Agent0が不利
�71
実験5: 学習曲線学習曲線の取得に失敗。。→ Agent0の 新モデル vs Agent1の過去モデルの勝率の図を作成
勝率
Agent1の過去モデル
Agent0の 新モデル(2035) vs 色々なAgent1の過去モデル
�72
実験5: 新モデル vs 過去モデル前頁の図より、 実験3と同様、Agent0はほぼ勝てない。 < 500 itersまでは、勝率~15%を保っているが、それ以降、下がり、 終的には3%程度に収束。 → 実験5の条件でも、Agent0が勝つのは難しいようだ。
�73
Agent0 (iter = 2035) vs
Agent1 (iter = 2035)
�74
Agent0 (iter = 2035) vs
Agent1 (iter = 1000)
�75
Agent0 (iter = 2035) vs
Agent1 (iter = 200)
�76
実験5: 考察• Agent0:Agent1側に動く(Agent1を邪魔する)行動は学習している。実際、勝利した場合は、相手を倒した後にゴールしている。
• Agent1:iterが進むにつれ、横に動く幅が大きくなっており、Agent0に邪魔されないように学習している。横幅が大きくなるとAgent1が追いつけなくなり、Agent1がほぼ勝利。
• 全体として実験3に似ているが、各Agentの学習した行動が、よりクリアになっている。
�77
おまけ• 実験5のAgent0 新モデル(2035) vs 実験2のAgent1 新モデル(970)を、実験2のセットアップで行った。
• → Agent0の勝率 ~ 15% • → 実験5のセットアップよりは、勝率は高くなっているが、実験2の 新モデルの場合(勝率~50%)と比べると低い。
�78
Agent0 (exp5; iter = 2035) vs
Agent1 (exp2; iter = 970)
�79
• Agent1を邪魔するためトリッキーな動きを学習した分、安定性が小さくAgent1に負ける。
• →Agentの学習内容は、環境に強く依存することを確認。
• → 報酬設計なしに(環境だけで)、“相手Agentを倒す”といった特定の行動を、意図的に創発させるのは難しい気がする。
• → 論文では、異なる環境でも強いAgentが作れると書いていたが、難しいのでは?
考察
�80
まとめ
�81
まとめ• Bansal+17の実験(run-to-goal-ants)の再現を試み、ほぼ成功した。
• 相手より早くゴールする単純なゲームにも関わらず「相手を先に倒してからゴールする」という行動を学習したように見える。
• これはSelf-playにより、単純な環境から、複雑な行動を学習したと解釈できる。
• Agentの初期位置を変更することで、学習する行動に変化が出ることも確認した。
�82
今後やってみたいこと
• 他のゲームも試す(論文の4種類のゲーム)。 • 新しいゲームを作る。
• 敵対するだけでなく、協力するAgentは作れないのか?
• 効率的な学習方法の模索
たとえば、、
�83
ご清聴ありがとうございました!
�84
Backup
�85
Advanced! 敵は過去の相手全員!
各Agentは 新の行動方針で、”学習した相手”と戦い、そのデータを収集し、 新の行動方針をさらに改善。 ただし”学習した相手”は、必ずしも 新の学習をした方針を使うとは限らない。 新のモデル同士だけで戦うと、学習が不安定になるからだ(左図)。そこで過去の相手のモデルを全て記憶しておき、iterごとにそれらとランダムに戦うことで、この不安定性を回避する(右図)。 = 過去の相手全てに勝てるように学習することで安定化
Bansal+17