大学生のときに書いたコードを整理して、セルフ解説して理解を深めようと思う。何かしてないと落ち着かないし。
卒論で機械学習について取り組んだ。「バンディット問題」というらしい。
むかしむかし、あるところに「バンディットマシン(以下、マシン)」と呼ばれるスロットマシンがあったとさ。
マシンを実行(以下、プレイ)するとパチンカス(以下、プレイヤー)は確率$p (0 \leq p < 1)$ でアタリを、確率$1-p$ でハズレの結果を返す。
乱数$x (0 \leq x < 1)$ の値を$p$ と比較する。
def bernoulli(self, x):
if p < x:
return 0
else:
return 1
アタリのときに報酬1 を、ハズレのときに報酬0 を与える関数である。
プレイが$n$ 回のときの総報酬を$reward_{(n)}$ として、
プレイを無限回続るときの様子を数式で表すと以下のような感じになる。しらんけど。
\lim_{n→\infty} \frac{reward_{(n)}}{n} = p
30% の確率で大吉が出るおみくじを、100 回引いたら30 回くらい大吉が出る。おみくじを1,000 回, 100000 回 , 100000000 回, ... と引いて、おみくじ回数を無限に近づけると大吉確率は30% ピタリになる。
ここに、上記と同じ設定のマシンが$N$ 台あったとする。限られた予算でより良いマシンを選択し、より多くの報酬を積み重ねたい。
各マシンを無限回プレイするわけにはいかないので、あまりアタリが出ないマシンに見切りをつけて、よりアタリが出やすいマシンに投資をしたい。
この、マシンの良し悪しの判断基準をプレイごとに数学で計算して、(得を増やす or 損を減らす) ことを目指すのが「バンディット問題」である。しらんけど。
「ーーーーーー破産してまうから、ハイエナ先を探すねん。
ーーーーーーー財布は無限とちゃいまんねん。ーーーーーーーー」
<----------------続く--------------------(飽きた)>