Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
強化学習 その2
2017-01-26 @ 機械学習勉強会
サイボウズ・ラボ 西尾泰和
関連スライド一覧 https://github.com/nishio/reinforcement_learning
2017-02-24 加筆
このスライドの目的
大規模なデータを占有してない企業にとって
強化学習の考え方が有用なので
基礎からきちんと理解したい。
そのために機械学習勉強会の何回かに分けて
強化学習の話を連載する。
2
参考文献
2016年10月に左の本が出た。
これを読んでいく。
右下の本が長らくバイブル
だったが2000年(原著1998年)
発行。
3
http://amzn.to/2josIJ1
http://amzn.to/2jCnYQg
Sutton & Barto の新作
draftが読める。目次を一部紹介:
第1部: Tabular Solution Methods
6 Temporal-Difference Learning
8 Planning and Learning...
今後の予定
第1回(前回):
序章
1章 強化学習の基礎的理論
1節 強化学習とは
第2回:
2節 強化学習の構成要素
3節 価値反復に基づくアルゴリズム
第3回: 4節 方策勾配に基づくアルゴリズム
第4回: 5節 部分観測マルコフ決定過程
5
今後の予定
第5回
2.1 統計学習の観点から見たTD学習
2.1.1 強化学習と教師付き学習の学習則
2.1.2~3 関数近似を(する/しない)価値関数推定
(ここまで28ページ)
第6回
2.1.4 セミパラメトリック統計学習に基づく定式
...
今後の予定
第7回 2.3 逆強化学習
第8回 2.4 経験強化型学習
2.5 群強化学習(飛ばします)
第9回 2.6 リスク考慮型強化学習
2.7 複利型強化学習(飛ばします)
第10回
3 強化学習の工学応用
3.3 対話処理における強化...
今後の予定
第11回 3.5 自然言語処理における逆強化学習と模
倣学習
第12回 3.7 深層学習を用いたQ関数の学習
(いわゆるDQN)
第13回 4 知能のモデルとしての強化学習
8
前回のおさらい
エージェント、環境、行動、報酬、方策、という
基本的な用語の定義について学んだ。
「多腕バンディット問題」を題材に
「利用と探索のトレードオフ」と、
それに対する「不確実なときには楽観的に」原理
について学んだ。
9
多腕バンディットは簡単
多腕バンディット問題は
• 環境は行動によって変化しない
• 遅延報酬はなく即時報酬だけ
という簡単な問題だった。
一般には環境は変化し、報酬は遅延する。
これをどうやって扱うか?
10
マルコフ決定過程
マルコフ決定過程(Markov Decision Process)
環境は状態を持っていて、その状態は
直前の状態とエージェントの行動によって
givenな確率で遷移する、とモデル化する。
状態は観測できる、とする。そうでない...
環境をMDPで記述する
状態空間 𝒮 = 𝑠1, 𝑠2, … , 𝑠 𝑁
行動空間 𝒜(𝑠) = {𝑎1, 𝑎2, … , 𝑎 𝑀}
初期状態分布 𝑃0
状態遷移確率 𝑃(𝑠′
|𝑠, 𝑎)
報酬関数 𝑟(𝑠, 𝑎, 𝑠′)
時刻tの値 𝑆𝑡,...
環境をMDPで記述する
初期状態 𝑆0~𝑃0
次の状態 𝑆𝑡+1~𝑃 𝑠′
𝑆𝑡, 𝐴 𝑡
報酬 𝑅𝑡+1 = 𝑟 𝑆𝑡, 𝐴 𝑡, 𝑆𝑡+1
13
𝑆𝑡+1がtより前の状態や行動に依存していない
=マルコフ性
行動は?
行動Aを決めるのは環境ではなくて
エージェントなので上記枠組みにない。
方策 𝜋 𝑎 𝑠
行動 𝐴 𝑡~𝜋 𝑎 𝑆𝑡
14
質疑Q: 𝐴 𝑡~𝜋 𝑎 𝑆𝑡, 𝑆𝑡−1, 𝑆𝑡−2, … と考えてはダメか?
現実的な実装は過去の全部の観...
遅延報酬の扱い
報酬が即時でないので、
時刻tの報酬を個別に扱うのではなく、
まとめて「収益(return, income)」にする。
色々な方法がある。その1つが割引報酬和:
𝐺𝑡 = ෍
𝜏=0
∞
𝛾 𝜏
𝑅𝑡+1+𝜏
15
𝛾は割引係数...
話のバックトラック
ここまでで
「環境は変化し、報酬は遅延する」
をどうやって扱うかを決めた。
で、何がしたかったんだっけ?
→ 最適な方策を見つけたい
16
最適な方策を見つけたい
方法1:方策反復法
方策をモデル化して直接最適化する。
AlphaGoのアプローチ
→1.4節 方策勾配法 を参照
方法2:価値反復法
方策を「状態の価値」から計算できるものに
限定して、価値の推定を頑張る。
DQNのア...
「状態の価値」とは?
特定の状態以降の収益の期待値を
「状態価値関数」と呼ぶ。
𝑉 𝑠 = 𝔼[𝐺𝑡|𝑆𝑡 = 𝑠]
特定の状態で特定の行動をした後の
収益の期待値を「行動価値関数」と呼ぶ。
𝑄 𝑠, 𝑎 = 𝔼[𝐺𝑡|𝑆𝑡 = 𝑠, 𝐴 𝑡 ...
モンテカルロで状態価値を求める
状態価値
𝑉 𝑠 = 𝔼[𝐺𝑡|𝑆𝑡 = 𝑠]
をどうすれば求められるか?
適当に試行錯誤して、得られた観測データの
平均値を取ればよい。*
…だけどこの方法は計算コストが大きい。
もっといい方法があるのでそれを...
Vを変形
𝑉 𝑠 = 𝔼 𝐺𝑡 𝑆𝑡 = 𝑠
= 𝔼[𝑅𝑡+1 + 𝛾𝑅𝑡+2 + 𝛾2
𝑅𝑡+3 + ⋯ |𝑆𝑡 = 𝑠]
= 𝔼 𝑅𝑡+1 𝑆𝑡 = 𝑠 + 𝛾𝔼[𝑅𝑡+2 + 𝛾𝑅𝑡+3 + ⋯ |𝑆𝑡 = 𝑠]
𝔼 𝑅𝑡+1 𝑆𝑡 = ...
ベルマン方程式
𝑉 𝑠 = ෍
𝑎
෍
𝑠′
𝜋 𝑎 𝑠 𝑃 𝑠′
𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′
+ 𝛾𝑉 𝑠′
同様に
𝑄 𝑠, 𝑎
= ෍
𝑠′
෍
𝑎′
𝑃 𝑠′
𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′
+ 𝛾𝜋 𝑎′
𝑠′
𝑄 𝑠′
, 𝑎′...
ベルマン方程式を解く
状態遷移確率が既知ならベルマン方程式を
解くことで状態や行動の価値がわかる。
しかし一般に状態遷移確率は不明。
試行錯誤で状態遷移確率を推測できないか?
22
Sarsa
SarsaはQを以下の式で更新する学習アルゴリズム:
𝑄 𝑆𝑡, 𝐴 𝑡 ← 𝑄 𝑆𝑡, 𝐴 𝑡 + 𝛼 𝑅𝑡+1 + 𝛾𝑄 𝑆𝑡+1, 𝐴 𝑡+1 − 𝑄 𝑆𝑡, 𝐴 𝑡
𝛼は学習率(0以上1以下の実数)
下記ベルマン方程式ではs...
On-policyとOff-policy
日本語だと「方策オン型/方策オフ型」と言う
Sarsaの元になったベルマン方程式はπを含んでい
る。つまり、方策πが変われば解も変わる。
(これを表現するために𝑄 𝜋
(𝑠, 𝑎) と書いたりする)
𝑄...
ベルマン最適方程式
価値Qがわかってるなら「価値が最大の行動をす
る」という方策(greedy方策)が最適。じゃあベル
マン方程式のπをその方策で置き換えたら?
𝑄∗
𝑠, 𝑎
= ෍
𝑠′
෍
𝑎′
𝑃 𝑠′
𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′
...
Q学習(Q-learning)
Q学習はQを以下の式で更新する学習アルゴ
リズム:
𝑄 𝑆𝑡, 𝐴 𝑡 ← 𝑄 𝑆𝑡, 𝐴 𝑡 + 𝛼 𝑅𝑡+1 + 𝛾max
𝑎′
𝑄 𝑆𝑡+1, 𝑎′ − 𝑄 𝑆𝑡, 𝐴 𝑡
要はSarsaのベルマン方程式を...
話のバックトラック
Q: 何がしたかったんだっけ?
A: 最適な方策を見つけたい。そのためには大き
く分けて2つ方法がある。
方法1:方策反復法
方策をモデル化して直接最適化する。
方法2:価値反復法
方策を「状態の価値」から計算できるものに
...
理解の検証
自分が正しく理解できているかどうか
実装してみて検証したい。
今回学んだ範囲だと価値反復法だけだけど、
将来的に方策反復法や関数で近似する方法も
同じ問題設定で試してみたい。
28
三目並べ
2人のプレイヤーが交互に○と×を書いて
先に3つ並んだ方が勝ちの有名なゲーム。
この片方のプレイヤーをエージェントとする。
環境:
行動:
報酬:
方策:
29
三目並べ
2人のプレイヤーが交互に○と×を書いて
先に3つ並んだ方が勝ちの有名なゲーム。
この片方のプレイヤーをエージェントとする。
環境: 盤面ともう片方のプレイヤー
行動: どこに書くか決めて、書く
報酬: 勝ったか負けたか
方策: 環境の...
状態と行動
状態は何か?
行動は何か?
Q関数の実装は?
31
Q関数の雑な実装
最初は素朴に実装する(後で改善して比較する)
状態は盤面の状況で、3 ** 9(=19683)以下。
行動は盤面のどこを選ぶかで、9通り。
Q関数は「状態×行動」の177147要素の配列。
32
Pythonのリストで作っても...
雑な見積もり
1試合すると9件のデータが得られる。
なので20万試合すればQの各s,a対に
平均10個のデータが得られる!
(すごく学習遅そう)
33
実験
ランダム同士の対戦は1万回中
先手勝ち: 5785, 後手勝ち: 2918, 引き分け: 1297
だったので、0.578をベースラインとする。
Sarsa(先手)とランダム(後手)で10000試合し、
100試合ごとの勝率をプロットした...
実験結果
意外と学習が早い……
35
予期せぬ成功
「20万試合ぐらいかな」の見積もりに反して
1000試合で学習しきっている。
Sarsaがもっと悪い性能になって
各種改良によって改善していくって
ストーリーにするつもりだったのだが……。
36
Qテーブルを観察
177147要素のQ巻数のテーブルのうち、
非ゼロの値が入っているのは450件だった。
17万要素は到達不能局面や非合法手を含む値
なので、実際の探索空間はもっと狭かった。
37
何が合法手か教えない実験
ランダムプレイヤーは
「合法手の中からランダムに選ぶ」
前回のSarsaは
「合法手の中からQの最も大きいのを選ぶ」
だった。何が合法手かを教えていることになる。
Sarsaに関してこれを教えず、
9通りすべての中から...
結果
最初はランダムより弱いが、すぐ強くなる。
39
学習率による違い
学習率を0.5にしたのは性能が悪い。
40
学習率による違いの考察
Sarsaの更新式は、Qを指数平滑平均している形
αが大きいと、より速く過去のことを忘れる。
41
「指数平滑平均じゃなくてちゃんと平均取ったらどうなる?」
「そしてUCB1とかで手を選んだら?」という疑問は後で実験する...
話の流れの整理
話すことのキューが長くなってきたので整理
• Sarsaを試したのでQ-learningを試して比較
• Greedy方策を試したのでε-Greedy方策を
試して比較
• その他
• 状態を圧縮したら?
• 指数平滑平均をやめ...
Q-LearningとSarsa+Greedy
よしQ-Learningをためそう!と考えて:
Sarsa:
𝑄 𝑆𝑡, 𝐴 𝑡 ← 𝑄 𝑆𝑡, 𝐴 𝑡 + 𝛼 𝑅𝑡+1 + 𝛾𝑄 𝑆𝑡+1, 𝐴 𝑡+1 − 𝑄 𝑆𝑡, 𝐴 𝑡
Q-Learn...
疑似コードを比較
Sarsa(上)では
行動する
次の行動を選ぶ
Qを更新する
Q-Learning(下)は
行動する
Qを更新する
次の行動を選ぶ
と順番が違う
44
https://webdocs.cs.ualberta.ca/~sutto...
実験結果
Sarsa同様α=0.5だけ悪い
45
Sarsaとの比較
各3回ずつやってみたけど大きな差は無い
46
ε-Greedy方策
次はε-Greedy方策を試そう!
ここまでの実験ではGreedy方策を使っていた。
これはつまり「利用と探索のトレードオフ」の
探索をほとんどやらないことに相当する。
探索をさせるための方策として有名なものに
確率εでラ...
実験結果
ε-Greedyはかなり悪い
48
10倍の試合数にした実験
試行を増やしても全然追い付かない
49
10万試合し、1000試合ごとの勝率をプロット
考察
今回の問題設定では
・1000試行で十分探索できる
・非合法手が打てて、打つと負け
が理由で探索のデメリットが大きい。
ε-Greedyは固定確率で探索のコストを払う。
これがGreedyに比べて勝率が悪い原因なので、
試行回数を増やして...
100倍の試合数にした実験
51
100万試合し、1000試合ごとの勝率をプロット
「SarsaがQ-Learnよりよい」という傾向がはっきりと出ている。
(前の実験でも少し出ていた)
SarsaとQ-learningの違い
例えば「スタートからゴールまで1歩ごとに-1
崖から落ちると-100」という問題設定の時、
Q-learningでは「最適方策=崖から落ちない」
を前提しているので崖ギリギリを歩く。
ε-Greedyは確...
質疑
Q: なぜSarsaは崖から離れたのか?
A: 崖のそばが「確率εで-100食らう」低価値なマ
ス目なので、価値の高い方に進んだ
Q: 失敗時のダメージが大きい問題設定だとSarsa
の方が常に良い?
A: とも言えない。問題設定次第。こ...
話のバックトラック
最適な方策を見つけたい
その方法に方策反復法と価値反復法がある
価値反復法は方策を価値から計算できるものに
限定して、価値の推定を頑張る方法
価値の最大な手を取るGreedy方策と、
一定確率で探索するε-Greedy方策を...
付録
ここまでで教科書的にはストーリーが一段落で
残りは全部付録。
・状態とは何か?→状態を圧縮する
・「関数」について
・minimaxについて
・モンテカルロ木探索について
・Quartoの実験(Sarsaまで)
55
付録: 状態とは何か?
今までの実験では
「状態=盤面」
としてきたがこれは正しいか?
環境から観測できるすべての情報を元に
「情報が異なるなら、異なる状態である」
と考えるのは正しいか?
56
状態は圧縮できる
例えば3目並べの場合、
盤面の回転・鏡映で互いに移りあう
8通りの盤面は同一視できる。
いくつかの状態を同一視することによって
探索空間が狭まり、より少ない試行で
よい方策を発見できるはず。
57
実験
今までの実験で1000試合程度で学習しきること
がわかっているのでそこをクローズアップしたい
しかしグラフの1点当たりの試合数を減らすと
乱数の影響が大きくなってグラフが見づらい
そこで10試合学習するごとに、別途学習しない
試合を100...
実験
状態を圧縮する方法は3通り用意した
回転・鏡映の8通りを全部3**9の整数にして
一番小さいものを取る(Sym)
3**9の盤面をまず各ラインに分解し((3**3) ** 8)
ライン内をソート(3**3→10)、
各ラインもソートし、1...
実験結果
一件良さそうに見えるが…
60
乱数の罠
繰り返し実験すると、割と順序が入れ替わる
運よく重要な局面に出会ったことで
素早く学習するケースがあるので
1回の実験では何も判断できない。
→100回「300試合後の勝率」を出して
平均と標準偏差を見る
61
(状態, 行動)対
当初「状態の圧縮」と呼んでいたが
Qへの値の出し入れは(状態, 行動)対がキーなので
行動とセットで圧縮しないといけない。
これに気付いていなかったのでSymがRawより
悪くなるという結果が出た。
62
実験
(状態, 行動)対を圧縮する方法は3通り用意した。
まず行動で選ばれている場所を+3する。
回転・鏡映の8通りを全部6**9の整数にして
一番小さいものを取る(Sym)
3**9の盤面をまず各ラインに分解し((6**3) ** 8)
ライ...
結果
Raw: 0.45+-0.16
Sym: 0.80+-0.19
Line1: 0.74+-0.14
Line2: 0.72+-0.12
どの圧縮手法も生の方法に比べて
2SD以上改善する
Line*はもっと良くなると期待したのだが
意外と...
実装上の学び
Sarsaの学習過程で時刻tの状態と時刻t+1の状態
の両方にアクセスする。
当初、環境を行動で更新した時には、整数にエン
コードした状態が返るようにしていたが、今回の
実験の際に整数にエンコードされた状態では対称
性を考えにくい...
実装上の学び
Qテーブルは(状態, 行動)対での読み書きだけを
サポートするので、そのインターフェイスを実装
した複数のクラスを作る形にした。
中で情報がどう持たれているか(listかdictか)や
キーの形がどうであるか(longかtuple...
付録: 「関数」という言葉
「関数」と呼んできたけども、
方策や環境は内部状態を持つので
数学的な意味での関数ではない。
プログラミング的に言っても
関数よりクラスで実装した方が素直かも。
Sarsa実装の過程で環境と方策はクラスにした。
環境...
付録: minimaxとの比較
コンピュータ将棋などでよく使われる
minimaxは「相手は『自分に一番不都合な手=
遷移可能な局面のうち最も評価値の低いものへの
遷移』を選ぶ」という想定で先読みをする。
この「局面の評価値」が強化学習で言うと...
付録: モンテカルロ木探索とは
原始的モンテカルロ(すべての手を同じ回数試行)
は効率が悪い。
前回Multi-Armed Bandit問題で見たUCB1アルゴ
リズムを用いて、有望そうな手を重点的に探索。
探索回数の多い手を1手先まで展開し
...
付録: Quarto
基本は四目並べ。駒が16種類あって4bit。
一つ以上のbitで4つ並べば勝ち。
どの駒を選ぶかは対戦相手が指定する。
3目並べよりも難しい問題設定として
Quartoを試してみた。
(Sarsaまでしかやってない)
70
状態数の雑な見積もり
「16種類の駒+空欄」が16か所あるので
17^16 だから 4.6e+19。46エクサ個。
……これはさすがにPythonのリストでは無理だ。
71
なおオセロが1e+28, チェスが1e+50, 将棋が1e+71, 囲...
少しマジメに見積もる
マジメに考えるとn種類の識別される駒をmマス
に置く、すべて置かなくてもよい置き方は
𝑓 𝑛, 𝑚 = ቊ
𝑛 + 1 … 𝑚 = 1
𝑛𝑓 𝑛 − 1, 𝑚 − 1 + 𝑓 𝑛, 𝑚 − 1 … else
なので、
f(...
scipy.sparse.dok_matrix
たぶん到達不能局面が結構あると思うので
雑にdok_matrixにつっこむことにする。
dok_matrixはDictionary of Keys型スパース行列で
ランダムアクセス性能がO(1)な...
実験条件
Sarsa(後手)とランダムで100,000試合し、
Sarsaの1000試合ごとの勝率をプロットした。
ランダム同士の対戦は1万回中
先手勝ち: 5063, 後手勝ち: 4757, 引き分け: 180
だったので、0.475をベース...
結果
徐々に良くなって0.5は超えてそう
75
10万試合で探索した範囲
10万試合終了後のQtableの
stored elementsは97956個。
予想通り実際に必要な状態数は少ない。
なおこの時のメモリ消費は535MB程度なので
まだまだいけそう。
→100万試合に増やしてみる。
...
結果
77
100万試合で探索した範囲
10万試合終了後のQtableの
stored elementsは89万個。
メモリ消費は1GB程度だった。
78
1分あたりの試行数
79
序盤は速度にバラツキがある(最高82804回/分)が最終的に14000回/分に落ち着いた。
これが辞書の設計によるものかSarsaの学習が伸び止まったことによるかは
別途実験しないとわからなさそう。
学習率0.05の場合(右)
ここでもやはり学習率0.5は悪い
80
実装上の学び
dok_matrixの添え字がオーバーフローしないか
心配になってソースを読んでみたが、意外と
Python実装で、タプルがキーの辞書だった。
なのでnp.arrayとの互換性が要らない今回のよう
なケースでは生で辞書を使った方が...
参考文献
「コンピュータ囲碁における モンテカルロ法 ~
理論編~」(2008年)
http://minerva.cs.uec.ac.jp/~ito/entcog/contents/l
ecture/date/20080614.html
これか...
Prochain SlideShare
Chargement dans…5
×

強化学習その2

14 647 vues

Publié le

社内勉強会での講演資料

Publié dans : Formation
  • Visit this site: tinyurl.com/sexinarea and find sex in your area for one night)) You can find me on this site too)
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Sex in your area for one night is there tinyurl.com/hotsexinarea Copy and paste link in your browser to visit a site)
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Girls for sex are waiting for you https://bit.ly/2TQ8UAY
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Meetings for sex in your area are there: https://bit.ly/2TQ8UAY
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • ε-Greedy法のスライド(48P)にて学習結果が頭打ちになっておりますが、εの値を試行ごと(ないしはステップごと、ここは学習手法により異なりますが)減らしてゆくと良い結果が得られると思います。
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici

強化学習その2

  1. 1. 強化学習 その2 2017-01-26 @ 機械学習勉強会 サイボウズ・ラボ 西尾泰和 関連スライド一覧 https://github.com/nishio/reinforcement_learning 2017-02-24 加筆
  2. 2. このスライドの目的 大規模なデータを占有してない企業にとって 強化学習の考え方が有用なので 基礎からきちんと理解したい。 そのために機械学習勉強会の何回かに分けて 強化学習の話を連載する。 2
  3. 3. 参考文献 2016年10月に左の本が出た。 これを読んでいく。 右下の本が長らくバイブル だったが2000年(原著1998年) 発行。 3 http://amzn.to/2josIJ1 http://amzn.to/2jCnYQg
  4. 4. Sutton & Barto の新作 draftが読める。目次を一部紹介: 第1部: Tabular Solution Methods 6 Temporal-Difference Learning 8 Planning and Learning with Tabular Methods 第2部: Approximate Solution Methods 12 Eligibility Traces 13 Policy Gradient Methods 第3部: Looking Deeper 16 Applications and Case Studies 16.6 Human-Level Video Game Play 16.7 Mastering the Game of Go 16.8 Personalized Web Services 4 https://webdocs.cs.ualberta.ca/~sutton/book/the-book-2nd.html
  5. 5. 今後の予定 第1回(前回): 序章 1章 強化学習の基礎的理論 1節 強化学習とは 第2回: 2節 強化学習の構成要素 3節 価値反復に基づくアルゴリズム 第3回: 4節 方策勾配に基づくアルゴリズム 第4回: 5節 部分観測マルコフ決定過程 5
  6. 6. 今後の予定 第5回 2.1 統計学習の観点から見たTD学習 2.1.1 強化学習と教師付き学習の学習則 2.1.2~3 関数近似を(する/しない)価値関数推定 (ここまで28ページ) 第6回 2.1.4 セミパラメトリック統計学習に基づく定式 化(10ページ) 2.2 理論性能解析とベイズ (理論薄めでやる。13ページ) 6
  7. 7. 今後の予定 第7回 2.3 逆強化学習 第8回 2.4 経験強化型学習 2.5 群強化学習(飛ばします) 第9回 2.6 リスク考慮型強化学習 2.7 複利型強化学習(飛ばします) 第10回 3 強化学習の工学応用 3.3 対話処理における強化学習 7
  8. 8. 今後の予定 第11回 3.5 自然言語処理における逆強化学習と模 倣学習 第12回 3.7 深層学習を用いたQ関数の学習 (いわゆるDQN) 第13回 4 知能のモデルとしての強化学習 8
  9. 9. 前回のおさらい エージェント、環境、行動、報酬、方策、という 基本的な用語の定義について学んだ。 「多腕バンディット問題」を題材に 「利用と探索のトレードオフ」と、 それに対する「不確実なときには楽観的に」原理 について学んだ。 9
  10. 10. 多腕バンディットは簡単 多腕バンディット問題は • 環境は行動によって変化しない • 遅延報酬はなく即時報酬だけ という簡単な問題だった。 一般には環境は変化し、報酬は遅延する。 これをどうやって扱うか? 10
  11. 11. マルコフ決定過程 マルコフ決定過程(Markov Decision Process) 環境は状態を持っていて、その状態は 直前の状態とエージェントの行動によって givenな確率で遷移する、とモデル化する。 状態は観測できる、とする。そうでないケースは 1.5節「部分観測マルコフ決定過程」で扱う。 11
  12. 12. 環境をMDPで記述する 状態空間 𝒮 = 𝑠1, 𝑠2, … , 𝑠 𝑁 行動空間 𝒜(𝑠) = {𝑎1, 𝑎2, … , 𝑎 𝑀} 初期状態分布 𝑃0 状態遷移確率 𝑃(𝑠′ |𝑠, 𝑎) 報酬関数 𝑟(𝑠, 𝑎, 𝑠′) 時刻tの値 𝑆𝑡, 𝐴 𝑡, 𝑅𝑡 12
  13. 13. 環境をMDPで記述する 初期状態 𝑆0~𝑃0 次の状態 𝑆𝑡+1~𝑃 𝑠′ 𝑆𝑡, 𝐴 𝑡 報酬 𝑅𝑡+1 = 𝑟 𝑆𝑡, 𝐴 𝑡, 𝑆𝑡+1 13 𝑆𝑡+1がtより前の状態や行動に依存していない =マルコフ性
  14. 14. 行動は? 行動Aを決めるのは環境ではなくて エージェントなので上記枠組みにない。 方策 𝜋 𝑎 𝑠 行動 𝐴 𝑡~𝜋 𝑎 𝑆𝑡 14 質疑Q: 𝐴 𝑡~𝜋 𝑎 𝑆𝑡, 𝑆𝑡−1, 𝑆𝑡−2, … と考えてはダメか? 現実的な実装は過去の全部の観測に依存するのでは? A: 強化学習は学習によって𝜋を更新していくので、 時刻tとt-1とで𝜋が異なると考えればこの定式化でもその実装に矛盾しない。
  15. 15. 遅延報酬の扱い 報酬が即時でないので、 時刻tの報酬を個別に扱うのではなく、 まとめて「収益(return, income)」にする。 色々な方法がある。その1つが割引報酬和: 𝐺𝑡 = ෍ 𝜏=0 ∞ 𝛾 𝜏 𝑅𝑡+1+𝜏 15 𝛾は割引係数、0以上1未満の実数。ようは指数平滑平均。
  16. 16. 話のバックトラック ここまでで 「環境は変化し、報酬は遅延する」 をどうやって扱うかを決めた。 で、何がしたかったんだっけ? → 最適な方策を見つけたい 16
  17. 17. 最適な方策を見つけたい 方法1:方策反復法 方策をモデル化して直接最適化する。 AlphaGoのアプローチ →1.4節 方策勾配法 を参照 方法2:価値反復法 方策を「状態の価値」から計算できるものに 限定して、価値の推定を頑張る。 DQNのアプローチ →こちらの方が歴史が長い。今回話す。 17
  18. 18. 「状態の価値」とは? 特定の状態以降の収益の期待値を 「状態価値関数」と呼ぶ。 𝑉 𝑠 = 𝔼[𝐺𝑡|𝑆𝑡 = 𝑠] 特定の状態で特定の行動をした後の 収益の期待値を「行動価値関数」と呼ぶ。 𝑄 𝑠, 𝑎 = 𝔼[𝐺𝑡|𝑆𝑡 = 𝑠, 𝐴 𝑡 = 𝑎] 18 このQがDQNのQ
  19. 19. モンテカルロで状態価値を求める 状態価値 𝑉 𝑠 = 𝔼[𝐺𝑡|𝑆𝑡 = 𝑠] をどうすれば求められるか? 適当に試行錯誤して、得られた観測データの 平均値を取ればよい。* …だけどこの方法は計算コストが大きい。 もっといい方法があるのでそれを見よう。 19 * ゲームの思考エンジンで「各局面からランダムにプレイして各手の勝率を求める」時 これは行動価値関数をこの方法で求めることに相当する。
  20. 20. Vを変形 𝑉 𝑠 = 𝔼 𝐺𝑡 𝑆𝑡 = 𝑠 = 𝔼[𝑅𝑡+1 + 𝛾𝑅𝑡+2 + 𝛾2 𝑅𝑡+3 + ⋯ |𝑆𝑡 = 𝑠] = 𝔼 𝑅𝑡+1 𝑆𝑡 = 𝑠 + 𝛾𝔼[𝑅𝑡+2 + 𝛾𝑅𝑡+3 + ⋯ |𝑆𝑡 = 𝑠] 𝔼 𝑅𝑡+1 𝑆𝑡 = 𝑠 = ෍ 𝑎 ෍ 𝑠′ 𝜋 𝑎 𝑠 𝑃 𝑠′ 𝑠, 𝑎 𝑟(𝑠, 𝑎, 𝑠′ ) 𝔼 𝑅𝑡+2 + 𝛾𝑅𝑡+3 + ⋯ 𝑆𝑡 = 𝑠 = ෍ 𝑎 ෍ 𝑠′ 𝜋 𝑎 𝑠 𝑃 𝑠′ 𝑠, 𝑎 𝑉(𝑠′ ) 20
  21. 21. ベルマン方程式 𝑉 𝑠 = ෍ 𝑎 ෍ 𝑠′ 𝜋 𝑎 𝑠 𝑃 𝑠′ 𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′ + 𝛾𝑉 𝑠′ 同様に 𝑄 𝑠, 𝑎 = ෍ 𝑠′ ෍ 𝑎′ 𝑃 𝑠′ 𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′ + 𝛾𝜋 𝑎′ 𝑠′ 𝑄 𝑠′ , 𝑎′ これをベルマン方程式と呼ぶ。 21
  22. 22. ベルマン方程式を解く 状態遷移確率が既知ならベルマン方程式を 解くことで状態や行動の価値がわかる。 しかし一般に状態遷移確率は不明。 試行錯誤で状態遷移確率を推測できないか? 22
  23. 23. Sarsa SarsaはQを以下の式で更新する学習アルゴリズム: 𝑄 𝑆𝑡, 𝐴 𝑡 ← 𝑄 𝑆𝑡, 𝐴 𝑡 + 𝛼 𝑅𝑡+1 + 𝛾𝑄 𝑆𝑡+1, 𝐴 𝑡+1 − 𝑄 𝑆𝑡, 𝐴 𝑡 𝛼は学習率(0以上1以下の実数) 下記ベルマン方程式ではs’やa’についてsumを取っているが、 それを「実際に出てきたもの」で置き換えて、 「Pやπは未知だけど、実際の観測をたくさん集めれば Pやπを掛けてsumしたのと同じところに収束するよね」 という発想。 𝑄 𝑠, 𝑎 = ෍ 𝑠′ ෍ 𝑎′ 𝑃 𝑠′ 𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′ + 𝛾𝜋 𝑎′ 𝑠′ 𝑄 𝑠′, 𝑎′ 23
  24. 24. On-policyとOff-policy 日本語だと「方策オン型/方策オフ型」と言う Sarsaの元になったベルマン方程式はπを含んでい る。つまり、方策πが変われば解も変わる。 (これを表現するために𝑄 𝜋 (𝑠, 𝑎) と書いたりする) 𝑄 𝑠, 𝑎 = ෍ 𝑠′ ෍ 𝑎′ 𝑃 𝑠′ 𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′ + 𝛾𝜋 𝑎′ 𝑠′ 𝑄 𝑠′ , 𝑎′ SarsaはOn-policy。 24
  25. 25. ベルマン最適方程式 価値Qがわかってるなら「価値が最大の行動をす る」という方策(greedy方策)が最適。じゃあベル マン方程式のπをその方策で置き換えたら? 𝑄∗ 𝑠, 𝑎 = ෍ 𝑠′ ෍ 𝑎′ 𝑃 𝑠′ 𝑠, 𝑎 𝑟 𝑠, 𝑎, 𝑠′ + 𝛾max 𝑎′ 𝑄∗ 𝑠′ , 𝑎′ これをベルマン最適方程式という。 25
  26. 26. Q学習(Q-learning) Q学習はQを以下の式で更新する学習アルゴ リズム: 𝑄 𝑆𝑡, 𝐴 𝑡 ← 𝑄 𝑆𝑡, 𝐴 𝑡 + 𝛼 𝑅𝑡+1 + 𝛾max 𝑎′ 𝑄 𝑆𝑡+1, 𝑎′ − 𝑄 𝑆𝑡, 𝐴 𝑡 要はSarsaのベルマン方程式をベルマン最適方程 式に変えたもの。Q学習は式に方策が入っていな いのでOff-policy。 26 解は方策の影響を受けないけど、探索範囲やどこを重点的に探索するかが 方策によって影響を受けるので、収束速度には影響があるよ。
  27. 27. 話のバックトラック Q: 何がしたかったんだっけ? A: 最適な方策を見つけたい。そのためには大き く分けて2つ方法がある。 方法1:方策反復法 方策をモデル化して直接最適化する。 方法2:価値反復法 方策を「状態の価値」から計算できるものに 限定して、価値の推定を頑張る。 価値の推定方法(Sarsa, Q-learning)を2つ学んだ。 27
  28. 28. 理解の検証 自分が正しく理解できているかどうか 実装してみて検証したい。 今回学んだ範囲だと価値反復法だけだけど、 将来的に方策反復法や関数で近似する方法も 同じ問題設定で試してみたい。 28
  29. 29. 三目並べ 2人のプレイヤーが交互に○と×を書いて 先に3つ並んだ方が勝ちの有名なゲーム。 この片方のプレイヤーをエージェントとする。 環境: 行動: 報酬: 方策: 29
  30. 30. 三目並べ 2人のプレイヤーが交互に○と×を書いて 先に3つ並んだ方が勝ちの有名なゲーム。 この片方のプレイヤーをエージェントとする。 環境: 盤面ともう片方のプレイヤー 行動: どこに書くか決めて、書く 報酬: 勝ったか負けたか 方策: 環境の状態と報酬を受け取って、行動を 決める関数 30
  31. 31. 状態と行動 状態は何か? 行動は何か? Q関数の実装は? 31
  32. 32. Q関数の雑な実装 最初は素朴に実装する(後で改善して比較する) 状態は盤面の状況で、3 ** 9(=19683)以下。 行動は盤面のどこを選ぶかで、9通り。 Q関数は「状態×行動」の177147要素の配列。 32 Pythonのリストで作っても1~2msで作れる。 もちろん到達不能局面や非合法手も含んでいるので 改善の余地があるがそれはあとでやって比較する予定。
  33. 33. 雑な見積もり 1試合すると9件のデータが得られる。 なので20万試合すればQの各s,a対に 平均10個のデータが得られる! (すごく学習遅そう) 33
  34. 34. 実験 ランダム同士の対戦は1万回中 先手勝ち: 5785, 後手勝ち: 2918, 引き分け: 1297 だったので、0.578をベースラインとする。 Sarsa(先手)とランダム(後手)で10000試合し、 100試合ごとの勝率をプロットした。 Sarsaのパラメータ: π=greedy方策, α=0.5, γ=0.9 34
  35. 35. 実験結果 意外と学習が早い…… 35
  36. 36. 予期せぬ成功 「20万試合ぐらいかな」の見積もりに反して 1000試合で学習しきっている。 Sarsaがもっと悪い性能になって 各種改良によって改善していくって ストーリーにするつもりだったのだが……。 36
  37. 37. Qテーブルを観察 177147要素のQ巻数のテーブルのうち、 非ゼロの値が入っているのは450件だった。 17万要素は到達不能局面や非合法手を含む値 なので、実際の探索空間はもっと狭かった。 37
  38. 38. 何が合法手か教えない実験 ランダムプレイヤーは 「合法手の中からランダムに選ぶ」 前回のSarsaは 「合法手の中からQの最も大きいのを選ぶ」 だった。何が合法手かを教えていることになる。 Sarsaに関してこれを教えず、 9通りすべての中から選ばせる。 もちろん非合法手を打つ可能性が出るが、 その場合、即座に負けとする。 38
  39. 39. 結果 最初はランダムより弱いが、すぐ強くなる。 39
  40. 40. 学習率による違い 学習率を0.5にしたのは性能が悪い。 40
  41. 41. 学習率による違いの考察 Sarsaの更新式は、Qを指数平滑平均している形 αが大きいと、より速く過去のことを忘れる。 41 「指数平滑平均じゃなくてちゃんと平均取ったらどうなる?」 「そしてUCB1とかで手を選んだら?」という疑問は後で実験する予定。 会場コメント: 非合法手が打たれた確率を 見ると面白そう。
  42. 42. 話の流れの整理 話すことのキューが長くなってきたので整理 • Sarsaを試したのでQ-learningを試して比較 • Greedy方策を試したのでε-Greedy方策を 試して比較 • その他 • 状態を圧縮したら? • 指数平滑平均をやめたら? 42
  43. 43. Q-LearningとSarsa+Greedy よしQ-Learningをためそう!と考えて: Sarsa: 𝑄 𝑆𝑡, 𝐴 𝑡 ← 𝑄 𝑆𝑡, 𝐴 𝑡 + 𝛼 𝑅𝑡+1 + 𝛾𝑄 𝑆𝑡+1, 𝐴 𝑡+1 − 𝑄 𝑆𝑡, 𝐴 𝑡 Q-Learning: 𝑄 𝑆𝑡, 𝐴 𝑡 ← 𝑄 𝑆𝑡, 𝐴 𝑡 + 𝛼 𝑅𝑡+1 + 𝛾max 𝑎′ 𝑄 𝑆𝑡+1, 𝑎′ − 𝑄 𝑆𝑡, 𝐴 𝑡 Sarsaにgreedy方策を組み合わせた場合、 同じ更新式になりそうに思うが、正しいか? 43
  44. 44. 疑似コードを比較 Sarsa(上)では 行動する 次の行動を選ぶ Qを更新する Q-Learning(下)は 行動する Qを更新する 次の行動を選ぶ と順番が違う 44 https://webdocs.cs.ualberta.ca/~sutton/book/ebook/node64.html https://webdocs.cs.ualberta.ca/~sutton/book/ebook/node65.html
  45. 45. 実験結果 Sarsa同様α=0.5だけ悪い 45
  46. 46. Sarsaとの比較 各3回ずつやってみたけど大きな差は無い 46
  47. 47. ε-Greedy方策 次はε-Greedy方策を試そう! ここまでの実験ではGreedy方策を使っていた。 これはつまり「利用と探索のトレードオフ」の 探索をほとんどやらないことに相当する。 探索をさせるための方策として有名なものに 確率εでランダムな手を選ぶε-Greedyがある。 これを試してみよう。 47
  48. 48. 実験結果 ε-Greedyはかなり悪い 48
  49. 49. 10倍の試合数にした実験 試行を増やしても全然追い付かない 49 10万試合し、1000試合ごとの勝率をプロット
  50. 50. 考察 今回の問題設定では ・1000試行で十分探索できる ・非合法手が打てて、打つと負け が理由で探索のデメリットが大きい。 ε-Greedyは固定確率で探索のコストを払う。 これがGreedyに比べて勝率が悪い原因なので、 試行回数を増やしてもGreedyに追いつかない。 50
  51. 51. 100倍の試合数にした実験 51 100万試合し、1000試合ごとの勝率をプロット 「SarsaがQ-Learnよりよい」という傾向がはっきりと出ている。 (前の実験でも少し出ていた)
  52. 52. SarsaとQ-learningの違い 例えば「スタートからゴールまで1歩ごとに-1 崖から落ちると-100」という問題設定の時、 Q-learningでは「最適方策=崖から落ちない」 を前提しているので崖ギリギリを歩く。 ε-Greedyは確率で探索するので時々崖から落ちる Sarsaはon-policyだから崖から離れた道を通る。 52 https://webdocs.cs.ualberta.ca/~sutton/book/ebook/node65.html
  53. 53. 質疑 Q: なぜSarsaは崖から離れたのか? A: 崖のそばが「確率εで-100食らう」低価値なマ ス目なので、価値の高い方に進んだ Q: 失敗時のダメージが大きい問題設定だとSarsa の方が常に良い? A: とも言えない。問題設定次第。このSlideの趣 旨は「Q学習が常に良いわけではない」 53
  54. 54. 話のバックトラック 最適な方策を見つけたい その方法に方策反復法と価値反復法がある 価値反復法は方策を価値から計算できるものに 限定して、価値の推定を頑張る方法 価値の最大な手を取るGreedy方策と、 一定確率で探索するε-Greedy方策を用い、 価値の推定手法としてSarsaとQ-learningを用い て実験をした。 54
  55. 55. 付録 ここまでで教科書的にはストーリーが一段落で 残りは全部付録。 ・状態とは何か?→状態を圧縮する ・「関数」について ・minimaxについて ・モンテカルロ木探索について ・Quartoの実験(Sarsaまで) 55
  56. 56. 付録: 状態とは何か? 今までの実験では 「状態=盤面」 としてきたがこれは正しいか? 環境から観測できるすべての情報を元に 「情報が異なるなら、異なる状態である」 と考えるのは正しいか? 56
  57. 57. 状態は圧縮できる 例えば3目並べの場合、 盤面の回転・鏡映で互いに移りあう 8通りの盤面は同一視できる。 いくつかの状態を同一視することによって 探索空間が狭まり、より少ない試行で よい方策を発見できるはず。 57
  58. 58. 実験 今までの実験で1000試合程度で学習しきること がわかっているのでそこをクローズアップしたい しかしグラフの1点当たりの試合数を減らすと 乱数の影響が大きくなってグラフが見づらい そこで10試合学習するごとに、別途学習しない 試合を1000回行い、その勝率をプロットする 58
  59. 59. 実験 状態を圧縮する方法は3通り用意した 回転・鏡映の8通りを全部3**9の整数にして 一番小さいものを取る(Sym) 3**9の盤面をまず各ラインに分解し((3**3) ** 8) ライン内をソート(3**3→10)、 各ラインもソートし、10**8の整数にする(Line1) Line1の(3**3→10)の所で2色の駒が存在するもの を同一視(10→6)して6**8の整数にする(Line2) 59
  60. 60. 実験結果 一件良さそうに見えるが… 60
  61. 61. 乱数の罠 繰り返し実験すると、割と順序が入れ替わる 運よく重要な局面に出会ったことで 素早く学習するケースがあるので 1回の実験では何も判断できない。 →100回「300試合後の勝率」を出して 平均と標準偏差を見る 61
  62. 62. (状態, 行動)対 当初「状態の圧縮」と呼んでいたが Qへの値の出し入れは(状態, 行動)対がキーなので 行動とセットで圧縮しないといけない。 これに気付いていなかったのでSymがRawより 悪くなるという結果が出た。 62
  63. 63. 実験 (状態, 行動)対を圧縮する方法は3通り用意した。 まず行動で選ばれている場所を+3する。 回転・鏡映の8通りを全部6**9の整数にして 一番小さいものを取る(Sym) 3**9の盤面をまず各ラインに分解し((6**3) ** 8) ライン内をソート(6**3→18)、 各ラインもソートし、18**8のtupleにする(Line1) Line1の(6**3→18)の所で2色の駒が存在するor3を 含まないもの同一視(18→6)して6**8のtupleにす る(Line2) 63
  64. 64. 結果 Raw: 0.45+-0.16 Sym: 0.80+-0.19 Line1: 0.74+-0.14 Line2: 0.72+-0.12 どの圧縮手法も生の方法に比べて 2SD以上改善する Line*はもっと良くなると期待したのだが 意外とそうでもなかった。 64 (表記は「平均+-標準偏差*2」)
  65. 65. 実装上の学び Sarsaの学習過程で時刻tの状態と時刻t+1の状態 の両方にアクセスする。 当初、環境を行動で更新した時には、整数にエン コードした状態が返るようにしていたが、今回の 実験の際に整数にエンコードされた状態では対称 性を考えにくいので環境(とその属性である盤面) を使ってエンバグした 環境が破壊的に更新される設計になっていたため 65 いまは破壊されると困る情報をcopyしてるけど、 C++で実装する場合には環境が自分の1つ前の状態を保持するようにして 記憶領域をswapで使いまわした方が、mallocしまくるよりよいのかも。
  66. 66. 実装上の学び Qテーブルは(状態, 行動)対での読み書きだけを サポートするので、そのインターフェイスを実装 した複数のクラスを作る形にした。 中で情報がどう持たれているか(listかdictか)や キーの形がどうであるか(longかtupleか)は Sarsa側は知る必要がない。 このQテーブルクラスを方策のコンストラクタに 渡すようにした。 66
  67. 67. 付録: 「関数」という言葉 「関数」と呼んできたけども、 方策や環境は内部状態を持つので 数学的な意味での関数ではない。 プログラミング的に言っても 関数よりクラスで実装した方が素直かも。 Sarsa実装の過程で環境と方策はクラスにした。 環境は盤面と対戦相手を持っていて、 Greedy方策はQテーブルを持っている実装。 67
  68. 68. 付録: minimaxとの比較 コンピュータ将棋などでよく使われる minimaxは「相手は『自分に一番不都合な手= 遷移可能な局面のうち最も評価値の低いものへの 遷移』を選ぶ」という想定で先読みをする。 この「局面の評価値」が強化学習で言うところの 状態価値関数Vに相当する。 将棋では評価値を「人間が工夫して実装した評価 関数」で表現するアプローチが早期に成功したが 囲碁ではうまくいかなかった。 →2006年にモンテカルロ木探索が登場する。 68
  69. 69. 付録: モンテカルロ木探索とは 原始的モンテカルロ(すべての手を同じ回数試行) は効率が悪い。 前回Multi-Armed Bandit問題で見たUCB1アルゴ リズムを用いて、有望そうな手を重点的に探索。 探索回数の多い手を1手先まで展開し minimaxな木探索と合体する →これがUCT(UCB applied to Trees) 69
  70. 70. 付録: Quarto 基本は四目並べ。駒が16種類あって4bit。 一つ以上のbitで4つ並べば勝ち。 どの駒を選ぶかは対戦相手が指定する。 3目並べよりも難しい問題設定として Quartoを試してみた。 (Sarsaまでしかやってない) 70
  71. 71. 状態数の雑な見積もり 「16種類の駒+空欄」が16か所あるので 17^16 だから 4.6e+19。46エクサ個。 ……これはさすがにPythonのリストでは無理だ。 71 なおオセロが1e+28, チェスが1e+50, 将棋が1e+71, 囲碁が1e+160, という見積もりがあるので相対的にはかなりやさしい問題である
  72. 72. 少しマジメに見積もる マジメに考えるとn種類の識別される駒をmマス に置く、すべて置かなくてもよい置き方は 𝑓 𝑛, 𝑚 = ቊ 𝑛 + 1 … 𝑚 = 1 𝑛𝑓 𝑛 − 1, 𝑚 − 1 + 𝑓 𝑛, 𝑚 − 1 … else なので、 f(16, 16)=6199668952527617 f(15, 16)=1290434218669921 6e+13。4ケタ減ったけどまだペタ個オーダー。 72
  73. 73. scipy.sparse.dok_matrix たぶん到達不能局面が結構あると思うので 雑にdok_matrixにつっこむことにする。 dok_matrixはDictionary of Keys型スパース行列で ランダムアクセス性能がO(1)なので今回の目的に 適している。 <48661191875666868481x256 sparse matrix of type ‘<type ’numpy.float64‘>‘ with 0 stored elements in Dictionary Of Keys format> 無茶なサイズだが、問題なく動く。(see: 付録1) 73
  74. 74. 実験条件 Sarsa(後手)とランダムで100,000試合し、 Sarsaの1000試合ごとの勝率をプロットした。 ランダム同士の対戦は1万回中 先手勝ち: 5063, 後手勝ち: 4757, 引き分け: 180 だったので、0.475をベースラインとする。 Sarsaのパラメータ: π=greedy方策, α=0.5, γ=0.9 74
  75. 75. 結果 徐々に良くなって0.5は超えてそう 75
  76. 76. 10万試合で探索した範囲 10万試合終了後のQtableの stored elementsは97956個。 予想通り実際に必要な状態数は少ない。 なおこの時のメモリ消費は535MB程度なので まだまだいけそう。 →100万試合に増やしてみる。 76
  77. 77. 結果 77
  78. 78. 100万試合で探索した範囲 10万試合終了後のQtableの stored elementsは89万個。 メモリ消費は1GB程度だった。 78
  79. 79. 1分あたりの試行数 79 序盤は速度にバラツキがある(最高82804回/分)が最終的に14000回/分に落ち着いた。 これが辞書の設計によるものかSarsaの学習が伸び止まったことによるかは 別途実験しないとわからなさそう。
  80. 80. 学習率0.05の場合(右) ここでもやはり学習率0.5は悪い 80
  81. 81. 実装上の学び dok_matrixの添え字がオーバーフローしないか 心配になってソースを読んでみたが、意外と Python実装で、タプルがキーの辞書だった。 なのでnp.arrayとの互換性が要らない今回のよう なケースでは生で辞書を使った方が速いかも。 特にdok_matrixが2次元限定なせいで添え字が長 整数の領域に入ってしまっているが、その長整数 を作るための計算は、どうせすぐhashするので 無駄なオーバーヘッドなのではないか……。 81
  82. 82. 参考文献 「コンピュータ囲碁における モンテカルロ法 ~ 理論編~」(2008年) http://minerva.cs.uec.ac.jp/~ito/entcog/contents/l ecture/date/20080614.html これからの強化学習 http://amzn.to/2josIJ1 Reinforcement Learning: An Introduction https://webdocs.cs.ualberta.ca/~sutton/book/ebo ok/the-book.html 82

×