トップページ -> バンディットタスク -> バンディットタスクと色々な戦略

バンディットタスクと色々な戦略

バンディットタスクについてです. バンディットタスクとは何かについて説明した後に問題を解くいくつかの戦略とその特徴について簡単に解説します. ページの最後に今回使ったコードを載せておきます. このページは『これからの強化学習』の多腕バンディット問題の節(6Pから13P)を参考にしています.

多腕バンディットタスクについて

何個かのスロットマシーンがあるとします. それぞれにスロットを回すと確率に応じて報酬1を得ることができますが,それぞれのスロットの当たり確率は分かりません. このような状況で得られる報酬を最大化する戦略を考えます. 以下ではスロットマシーンが4つで引ける回数が10000回の場合で考えます. それぞれのスロットマシーンの当たり確率は0.2,0.3,0.4,0.5とします. 戦略の性能評価は10000回を1セットとして1000セットをプレイさせ,最適なスロットを選んだ回数と得られた報酬の平均で行います.

簡単な実験

人間であればそれぞれのスロットマシーンを何回かずつ試してみて得られる報酬の期待値が大きそうなものを選ぶと思います. 例えば最初に100回ずつ試し打ちしてみて得られた報酬が一番大きかったスロットマシーンを回すような戦略です. このような戦略で何回か試してみると4000から5000程度の報酬が得られました. また,1000回試すと平均して4840程度の報酬が得られました.最適なスロットを選んだ割合は88%程度でした. 以下は各スロットを選択した確率のグラフです.

緑:払い戻し率0.5 青:払い戻し率0.4 赤:払い戻し率0.3 黒:払い戻し率0.2

適当な戦略
もちろん乱数性によってある程度の振れ幅はあるのですが,最初の100回で実際の価値が低いスロットマシーンがたまたまいい報酬を返してきたり, 実際の価値が高いスロットマシーンがたまたま悪い報酬を返していた場合に的外れな予想をして報酬が低くなっていることが分かります. 2番目に当たる確率の高いスロットが最適であると誤認してしまうようです. そこで最初に試す回数を300回に増やしてみます.
適当な戦略2
1000回の報酬の平均は4810程度でした.最適なスロットを選んだ割合は90%程度でした. 試し打ち以降に2番目のスロットを最適と誤認する確率は大幅に減ったものの得られる報酬が減ってしまいました.

考え方

得られる報酬をなるべく大きくするにはどうすればいいでしょうか? それは「探索」と「活用」のバランスを上手くとることです. 「探索」は上の実験で言えば「最初に100回引いてみる」の部分です. スロットマシーンの実際の価値を試してみて評価するような動きです. 「活用」は上の実験で言うところの試し終わった後にそのスロットマシーンを引き続ける部分です. 探索で得られた予測価値を活用して得られる報酬を最大化しようとしています. 探索の回数が少なすぎれば,実際の価値とはかけ離れた見積もりをしてしまい得られる報酬が少なくなってしまいます. 逆に探索の回数が多すぎても,実際には価値の低いスロットマシーンを何度も試すことになるので得られる報酬は少なくなります. また上の実験では簡単のため「探索」と「活用」を明確に分ける戦略を用いましたが,通常は「活用」で得られたデータによっても予測価値を更新します. 以下では,「探索」と「活用」のバランスを取るいくつかの戦略とその特徴をまとめます.

グリーディ戦略

予想価値をこれまでに得た報酬の平均 つまり 標本平均とし,予想価値が最大になるものを選ぶ戦略を考えます. ただし,一度も引いていないものがある場合はそのスロットを試します. 価値が最大になるものを選ぶ戦略を貪欲法やグリーディ戦略と呼びます. 予想価値の初期値は0とします. 1000回プレイしたときの平均報酬は4260程度です.最適なスロットを選んだ割合は53%程度でした. 以下は各スロットを選択した確率のグラフです.

緑:払い戻し率0.5 青:払い戻し率0.4 赤:払い戻し率0.3 黒:払い戻し率0.2

グリーディ戦略
予想価値の初期値を0としているため,最初にハズレてしまうとそれ以降試されることが無くなってしまいます. 予想価値の初期値を0に限らず低すぎる値に設定してしまうとこのようなことが起こってしまいます.

楽観的初期値を用いたグリーディ戦略

低すぎる初期値を用いた場合に問題が起きてしまうことが分かったので今回は初期値を「高め」に設定してみます. 今回は1回スロットを回して得られる報酬の最大値が1であることが分かっているため,予想価値の初期値を1とします. このような高い初期値を「楽観的初期値」と言います. また,予想価値valueの更新をvalue += alpha×(reward-value) (alpha:定数)で行います. これは,予想と実際の報酬の誤差に学習率alphaをかけたものを足しています. 誤差が大きいほど大きく更新され,予想と実際の報酬が一致していれば更新は行われません. 1000回プレイしたときの平均報酬は4850程度です.最適なスロットを選んだ割合は87%程度でした. 以下は各スロットを選択した確率のグラフです.

緑:払い戻し率0.5 青:払い戻し率0.4 赤:払い戻し率0.3 黒:払い戻し率0.2

楽観的初期値のグリーディ戦略
工夫をしていないグリーディ戦略と比べるとだいぶ改善されました. 学習率alphaを変えることで予想価値の更新の幅を変更することができます.

ε-グリーディ戦略 その1

「高め」の初期値を採用したところ上手く探索を行うようになりましたが,そもそも「高め」が分からない問題を解きたい場合もあります. 例えば,スロットマシーンの報酬が期待値が未知の正規分布に従う場合などは「高め」が分かりません. そこで初期値はテキトーに決め,ある一定の割合εで探索を行うようにすることを考えます. ε=0.1として実験してみます.予想報酬の初期値はテキトーに0にしておきます. 1000回プレイしたときの平均報酬は4810程度です.最適なスロットを選んだ割合は89%程度でした. 以下は各スロットを選択した確率のグラフです.

緑:払い戻し率0.5 青:払い戻し率0.4 赤:払い戻し率0.3 黒:払い戻し率0.2

ε-グリーディ戦略 その1
εを変えることで探索の頻度を変えることができます. 「高め」が実は高くなかったみたいなことは起きないので安定はしますが,一定の割合で探索を続けるためスロットを回せる回数が増えると効率が悪いです.

ε-グリーディ戦略 その2

ε-グリーディ戦略をもう少し改良します. ε=0.1と固定の数値を使っていましたが,最初の方はそれぞれの予想価値が正確でない可能性が高いのでより積極的に探索を行いたいです. 逆に回数を重ねてくるとある程度正確な予想価値が求まっているため探索をすると無駄が発生するので探索の頻度を減らしたいです. そこで引いた回数が増えるにつれてεを減衰させていくことを考えます. 最初の3000回でε=1からε=0.1まで減衰させます. 1000回プレイしたときの平均報酬は4650程度です.最適なスロットを選んだ割合は82%程度でした. 以下は各スロットを選択した確率のグラフです.

緑:払い戻し率0.5 青:払い戻し率0.4 赤:払い戻し率0.3 黒:払い戻し率0.2.

ε-グリーディ戦略 その2
εの幅や減衰のスピードを変えることで探索の頻度を変えることができます. 今回は その1 よりも探索の頻度が高くなるように設定されているため性能が落ちています. 上手く設定することで その1 よりも性能が上がります. 今回の設定であれば,ε=0.5からε=0.05まで1000回で減衰させることで性能が上がりました.

ソフトマックス戦略

ソフトマックス関数という関数を用いて予想価値にもとづいて行動を選択します. ソフトマックス関数はそれぞれの行動を選ぶ確率を返します.

ソフトマックス関数の定義
かみ砕いた詳しい説明はこちら(外部サイト)が分かりやすいかもしれません. また,上で定義したソフトマックス関数に温度Tを導入することで,探索の頻度を調整することができます. Tが大きいときは予想価値が低いものも重要視するようになり,Tが小さいときは予想価値が低いものも軽視するようになります.

温度付きソフトマックス関数の定義
T→∞でランダム戦略 T→0でグリーディ戦略になります. εを減衰させたようにT=1からT=0.01まで1000回で減衰させます. 1000回プレイしたときの平均報酬は4880程度です.最適なスロットを選んだ割合は93%程度でした. 以下は各スロットを選択した確率のグラフです.

緑:払い戻し率0.5 青:払い戻し率0.4 赤:払い戻し率0.3 黒:払い戻し率0.2.
温度付きソフトマックス関数の定義
温度を低くしすぎたためか,1000回以降に探索が行われていません.問題とたまたま相性のいいパラメータ設定であったためいい結果が出ているかもしれません.
ソフトマックス関数は予想価値のスケールに大きな影響を受けます. 例えばsoftmax(1,2,3)とsoftmax(10,20,30)では大きく異なります. 温度の影響力も予想価値のスケールにより変わってしまうので,得られる期待報酬の大きさのスケールが分かっていない場合にはあまり向いていないように考えられます(?)

UCB1アルゴリズム

これまでの標本平均に基づく予想価値ではなく以下の式で期待報酬の予想を行います.

UCB1値の定義
UCB1アルゴリズムではV_iが最大のスロットを回します. V_iの第2項はi番目のスロットマシーンを引いている回数が少ないときに大きくなるボーナス項です. n_i=0のとき,V_i=∞なため必ず1回は試すことになります. 1000回プレイしたときの平均報酬は4800程度です.最適なスロットを選んだ割合は87%程度でした. 以下は各スロットを選択した確率のグラフです.

緑:払い戻し率0.5 青:払い戻し率0.4 赤:払い戻し率0.3 黒:払い戻し率0.2.
UCB1アルゴリズム

平均報酬の推移

全ての戦略の報酬の推移のグラフです. 序盤に特に差が見られます.

平均報酬の推移のグラフ
εを減衰させるものとソフトマックス戦略は特殊な推移をしているため取り除きました. 終盤の精度の良さはUCB1アルゴリズムが高くスロットを回せる回数が多い場合は良い結果を出しそうです.
平均報酬の推移のグラフ2

終わりに

バンディットタスクに関していくつかの戦略を試してみました. 性能評価に関してはあくまで10000回 0.2,0.3,0.4,0.5の確率という設定の下の評価であるため,問題設定が変われば性能評価も変わってきます. それぞれ特徴があるため,問題の設定に合わせてどの戦略を用いるべきなのかを考えることが重要です.

【目次に戻る】