強化学習入門
TRANSCRIPT
強化学習入門理工学研究科 D2 齋藤 俊太
13年5月3日金曜日
学習?
動物心理学
観察
行動主義学習によって行動が変化→ 行動を見れば学習し たかどうか分かる
認知主義学習によって内面的な認知が変化→ 行動に出る前に内的表象が変化 している=これも学習
13年5月3日金曜日
行動主義心理学的な実験
13年5月3日金曜日
パブロフの犬(古典的条件付け)
犬に餌を与える前に「ベルを鳴らす」
何度か繰り返す
「ベルが鳴る」という刺激に対して唾液を分泌するようになる
「刺激」と「反応」の連合を強める=連合学習
食べる時に「唾液を分泌する」という犬が生まれつき持つ無条件反応が,学習の過程を経て「ベルが鳴る」という刺激に対して反応するように変化したことを意味する
13年5月3日金曜日
猫の問題箱(試行錯誤学習)
何度か繰り返すと,やがて同じ行動が出現する頻度が高くなる
外に出ようとして猫がいろいろな行動をとる
偶然に外に出られた
また箱にいれる
パブロフの犬の場合と違い刺激は存在しないが,行動後の「満足」または「不快」の度合いに応じて,行動の出現頻度が学習の過程を経て変化する →効果の法則
13年5月3日金曜日
スキナーの箱(報酬学習)
餌が出る
たまたまラットがレバーを押す
ラットはレバー付近にいることが多くなる
レバーを押す頻度が高くなる
状況と行動の結合を強めるような報酬を「正の強化子」,弱めるような報酬を「負の強化子」という.
満足/不快を「餌」=「報酬」という形で明確に与えた「試行錯誤学習」.報酬に応じて行動の自発頻度が変化していく.このような学習をオペランド条件付け(or 報酬学習)という.
13年5月3日金曜日
認知心理学的な実験
13年5月3日金曜日
認知心理学的な実験内的な変化は行動だけからは観察が難しい
脳科学
脳におけるシナプスの可塑性 → シナプス同士は結合を生成/消滅/増強/抑制する
学習の動機付けはドーパミンにより行われる
ドーパミンの分泌量や電気生理学的な脳に対する観察から学習の過程を理解しようとする
13年5月3日金曜日
で、どうやってコンピュータは学習を行えばいいのか?
13年5月3日金曜日
教師あり学習
「答え」「問題」
この矢印が欲しい
「問題」と「答え」を事前にたくさん用意しておいて,間をつなぐ「写像」を近似する
できるだけ未知の「問題」に対しても正しい「答え」が予測できるようにしたい
→ どうやって汎化能力を獲得するかが重要
13年5月3日金曜日
教師なし学習
観察者「問題」
この矢印が欲しいこういう問題だな
観察
・特性を理解する・要約する(次元削減)・グループ化する(クラスタリング)
13年5月3日金曜日
学習?
動物心理学
観察
行動主義学習によって行動が変化→ 行動を見れば学習し たかどうか分かる
認知主義学習によって内面的な認知が変化→ 行動に出る前に内的表象が変化 している=これも学習
13年5月3日金曜日
強化学習問題
「問題」
13年5月3日金曜日
強化学習問題
「問題」
チャレンジする
行動
13年5月3日金曜日
強化学習問題
「問題」
チャレンジする
行動
よい行動
よくない行動
「評価」報酬が与えられる(罰則)
13年5月3日金曜日
強化学習問題
「問題」
チャレンジする
行動どう行動すべきか
よい行動
よくない行動
「評価」報酬が与えられる(罰則)
13年5月3日金曜日
強化学習問題
「問題」
チャレンジする
行動どう行動すべきか
この矢印が欲しいよい行動
よくない行動
「評価」報酬が与えられる(罰則)
13年5月3日金曜日
強化学習問題
「問題」
チャレンジする
行動どう行動すべきか
この矢印が欲しいよい行動
よくない行動
「評価」報酬が与えられる(罰則)
答えではなく評価
13年5月3日金曜日
手法の選び方例:アンケートの回答を分析する
「年齢」と「収入」の関係を知りたい年齢を入力,収入を出力とする教師あり学習
「年齢と収入」から似ている回答者をグループ化したい年齢,収入を入力とする教師なし学習
「年齢と収入」に基づき回答者に広告を送りたい
年齢,収入を入力とし,売上を報酬とした強化学習
13年5月3日金曜日
強化学習の背景
心理学「試行錯誤学習」「報酬学習」
最適制御理論
制御対象の挙動の良し悪しを表す目的関数を最大化または最小化するように制御則を求める設計手法
→ e.g. 電気代を抑えて目的を達成するには…
13年5月3日金曜日
強化学習の構成<人の場合>
13年5月3日金曜日
強化学習の構成<コンピュータの場合>
即時報酬を最大にする行動ではなく,報酬の積み重ねとして将来にわたって得られる合計報酬=収益を最大にするように行動を最適化していく
13年5月3日金曜日
問題設定
エージェント
状態
→ MDP
13年5月3日金曜日
問題設定
エージェント
状態
行動右に行く左に行く
→ MDP
13年5月3日金曜日
問題設定
エージェント
状態
行動右に行く左に行く
政策
状態 で行動 をとる確率
→ MDP
13年5月3日金曜日
問題設定
エージェント
状態
行動右に行く左に行く 環境
政策
状態 で行動 をとる確率
→ MDP
13年5月3日金曜日
問題設定
エージェント
状態
行動右に行く左に行く 環境
遷移確率状態 で行動 をとったとき状態が になる確率
政策
状態 で行動 をとる確率
→ MDP
13年5月3日金曜日
問題設定
エージェント
状態
行動右に行く左に行く 環境 次の状態
遷移確率状態 で行動 をとったとき状態が になる確率
政策
状態 で行動 をとる確率
→ MDP
13年5月3日金曜日
問題設定
エージェント
状態
行動右に行く左に行く 環境 次の状態
遷移確率状態 で行動 をとったとき状態が になる確率
報酬
政策
状態 で行動 をとる確率
→ MDP
13年5月3日金曜日
強化学習の目的将来得られる報酬の総和が最大になるように政策を学習する
(発散しないように)割引率 を定義し,これを乗じた報酬を将来に渡り加えた総和を収益とし,この期待値を最大化する!
�
E" 1X
t=0
�tR(st, at, st+1)
#, 8s0 2 S, 8a0 2 A目的関数
下記の目的関数を最大にする政策関数 を求める⇡
at ⇠ ⇡(at|st)st+1 ⇠ PT (st+1|st, at)st 2 S, at 2 A� 2 (0, 1]
制約条件 A : ありうるすべての行動集合S : ありうるすべての状態集合
13年5月3日金曜日
強化学習の目的
E" 1X
t=0
�tR(st, at, st+1)
#, 8s0 2 S, 8a0 2 A目的関数
⇡⇤(a|s) ⌘ arg max
⇡E" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
を最大にする政策関数が最適政策関数つまり…
どうやって求めるか?
13年5月3日金曜日
強化学習の目的
E" 1X
t=0
�tR(st, at, st+1)
#, 8s0 2 S, 8a0 2 A目的関数
⇡⇤(a|s) ⌘ arg max
⇡E" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
を最大にする政策関数が最適政策関数つまり…
どうやって求めるか?Q(s, a) とおく
13年5月3日金曜日
強化学習の目的
E" 1X
t=0
�tR(st, at, st+1)
#, 8s0 2 S, 8a0 2 A目的関数
⇡⇤(a|s) ⌘ arg max
⇡E" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
を最大にする政策関数が最適政策関数つまり…
どうやって求めるか?Q(s, a) とおく
Q(s, a) = E" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
行動価値関数
13年5月3日金曜日
行動価値関数
⇡(a0|s0)PT (s0, a0, s1)s0 s1
状態 で行動 をとる確率s0 a0
状態 で行動 をとったとき状態 に遷移する確率
s0 a0
s1
R(s0, a0, s1)
報酬発生
この連鎖で得られる報酬の合計値=収益収益の期待値が行動価値
13年5月3日金曜日
行動価値関数
Q(s, a) = E" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
行動価値関数
⇡(a0|s0)PT (s0, a0, s1)s0 s1
状態 で行動 をとる確率s0 a0
状態 で行動 をとったとき状態 に遷移する確率
s0 a0
s1
R(s0, a0, s1)
報酬発生
この連鎖で得られる報酬の合計値=収益収益の期待値が行動価値
13年5月3日金曜日
行動価値関数と政策関数
⇡⇤(a|s) ⌘ arg max
⇡Q⇤
(s, a)
行動価値関数を最大にするような政策を知りたい強化学習の目的
1. 政策関数を適当に初期化(一様分布など)2. 現在の政策に従って行動を起こし,報酬を観察3. 現れた状態行動対 の価値を推定4. 推定した を使って政策を改善5. 1.に戻る
(s, a)
Q(s, a)
これを繰り返すことにより最適政策を近似する
13年5月3日金曜日
行動価値関数と政策関数
⇡⇤(a|s) ⌘ arg max
⇡Q⇤
(s, a)
行動価値関数を最大にするような政策を知りたい強化学習の目的
1. 政策関数を適当に初期化(一様分布など)2. 現在の政策に従って行動を起こし,報酬を観察3. 現れた状態行動対 の価値を推定4. 推定した を使って政策を改善5. 1.に戻る
(s, a)
Q(s, a)
これを繰り返すことにより最適政策を近似する
疑問 3.の「状態行動対 の価値を推定」ってどうやる?(s, a)
4.の「推定した を使って政策を改善」ってどうやる?Q(s, a)
13年5月3日金曜日
状態行動対の価値Q(s, a) = E
" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
例えば,状態 (s0, a0)
の価値が知りたい
13年5月3日金曜日
状態行動対の価値Q(s, a) = E
" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
例えば,状態 (s0, a0)
の価値が知りたい
13年5月3日金曜日
状態行動対の価値Q(s, a) = E
" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
例えば,状態 (s0, a0)
の価値が知りたい
13年5月3日金曜日
状態行動対の価値Q(s, a) = E
" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
例えば,状態 (s0, a0)
の価値が知りたい 色々なパスがあるが,それらを全て考慮して得られる報酬の期待値を計算する必要がある
13年5月3日金曜日
状態行動対の価値
a1
s3
a4
s5
報酬の期待値(収益)は左のようなパスを通った場合,
⇡(a0|s0)P (s0, a0, s1)R(s0, a0, s1)
+�⇡(a1|s1)P (s1, a1, s3)R(s1, a1, s3)
+�2⇡(a4|s3)P (s3, a4, s5)R(s3, a4, s5)
Q⇡(s, a) = E" 1X
t=0
�tR(st, at, st+1)|s0 = s, a0 = a
#
これを 以降の全ての場合における状態→行動選択確率(政策)と状態行動対→次状態への遷移確率についての期待値を計算すると がわかる
s0 ! a0
Q⇡(s0, a0)
さらにそれを全ての について計算する必要がある
(s, a)
13年5月3日金曜日
大変すぎる
13年5月3日金曜日
大変すぎる動的計画法などで実際に計算することも可能だが,状態数が増えたりするとほぼ計算不可能になる
13年5月3日金曜日
行動価値関数の近似計算
モンテカルロ法有限な時間ステップTで終了する状態行動対の遷移データ(エピソードデータ)を使って,行動価値関数を近似する
他にも,TD法(Temporal Difference Method),SARSA法,TD(λ)法,Q学習など様々な方法が存在する
→ 今回は実装が容易そうなモンテカルロ法について説明します
13年5月3日金曜日
モンテカルロ法
こういうパスを辿ることも こういうパスを辿ることも
いろいろな場合がある
13年5月3日金曜日
モンテカルロ法では,とある状態行動対 の真価はどうやって知るか?
Q⇡(s2, a2)例えば, が知りたい
まず,最大ステップ数Tを決める
(s2, a2) が現れた時点から,Tまでに観測された報酬から収益を計算する
色々なパスについてこれをやる
観測された収益の平均値を の価値とする
(s2, a2)
1.
2.
3.
4.
13年5月3日金曜日
モンテカルロ法では,とある状態行動対 の真価はどうやって知るか?
Q⇡(s2, a2)例えば, が知りたい
まず,最大ステップ数Tを決める
(s2, a2) が現れた時点から,Tまでに観測された報酬から収益を計算する
色々なパスについてこれをやる
観測された収益の平均値を の価値とする
(s2, a2)
1.
2.
3.
4.
あらかじめ決めた数のパスを生成しておき,上記の手順を踏めば,それらのパス中に現れた状態行動対については,行動価値が推定できる
13年5月3日金曜日
政策改善行動価値関数が推定できたら,それをもとに政策(どういった状態のときにどの行動を選ぶ確率が高いか,という値)を改善する
ε-greedy法
a⇤ = arg max
aQ⇡
(s, a)
⇡0(a|s) =
(1� ✏+ ✏
|A| ifa = a⇤
✏|A| otherwise
行動価値が最も高い行動を選ぶ確率を1-εにしたあと,全ての選択肢にεを行動数で割った値を割り振る
13年5月3日金曜日
学習の流れ
⇡⇤(a|s) ⌘ arg max
⇡Q⇤
(s, a)
行動価値関数を最大にするような政策を知りたい強化学習の目的
1. 政策関数を適当に初期化(一様分布など)2. 現在の政策に従って行動を起こし,報酬を観察3. 現れた状態行動対 の価値を推定4. 推定した を使って政策を改善5. 1.に戻る
(s, a)
Q(s, a)
これを繰り返すことにより最適政策を近似する
疑問 3.の「状態行動対 の価値を推定」ってどうやる?(s, a)
4.の「推定した を使って政策を改善」ってどうやる?Q(s, a)
13年5月3日金曜日
三目並べのコンピュータプレーヤを作ってみた
13年5月3日金曜日
準備
0 1 2
3 4 5
6 7 8
• 9マスある• それぞれに”○”,”×”,”空”の3状態• 盤面ごとに状態番号をふると,3^9状態
13年5月3日金曜日
準備
0 1 2
3 4 5
6 7 8
• 9マスある• それぞれに”○”,”×”,”空”の3状態• 盤面ごとに状態番号をふると,3^9状態
_人人人人_> 多い <‾Y^Y^Y‾
13年5月3日金曜日
準備
0 1 2
3 4 5
6 7 8
• 9マスある• それぞれに”○”,”×”,”空”の3状態• 盤面ごとに状態番号をふると,3^9状態
_人人人人_> 多い <‾Y^Y^Y‾
0 1 2
3 4 5
6 7 8
左のように,45度回転の組み合わせで同じ状態に持っていけるものはひとつの状態として扱う
13年5月3日金曜日
状態の圧縮
o x
x o
o
一つの状態を9ケタの3進数で表現する
0 ... 空1 ... o2 ... x
左の盤面は 120021100
ある状態が入力されてきたら,回転変換を施したものも含めた8状態の3進数表現を計算する
8種類の3進数を10進数に変換する
8種類の10進数の値のうち一番小さいものを状態番号とする
1.
2.
3.
13年5月3日金曜日
状態の圧縮
13年5月3日金曜日
事前に仮想試合をして行動価値を学習する
仮想プレイヤー
・基本的にランダムに手を打つ・ただし,自分がリーチのときは勝つ手を選ぶ
• 仮想プレイヤーとたくさん戦って価値関数を事前に計算する• 最大5手で終わる(最大ステップ数T=5の)ゲームを1000回x30セットやる• 勝ったら報酬+10,負けたら報酬-10,引き分けなら報酬0
学習
13年5月3日金曜日
勝率の変化勝率
セット
13年5月3日金曜日
実装で使ったもの
• Ruby 1.9.3-p392• Ruby/SDL(可視化)• NArray(行列の扱い)
*Githubにソースコードをアップ しましたhttps://github.com/mitmul/TicTacToe
13年5月3日金曜日
勝負を挑む
13年5月3日金曜日
強くなりすぎた
13年5月3日金曜日
おしまい
13年5月3日金曜日