ここでは強化学習の一例としてコイントスの結果を予測するプログラムを作成します。
【強化学習とは】
そもそも強化学習とは機械学習手法の一つで、プログラム自体が試行錯誤しながら最適な制御を実現してくれます。学習してもらうデータに正解、不正解はありませんが、目的として設定する「報酬」を最大化するための行動を学習するものです。
今回は80%の確率で表、20%の確率で裏、となる特殊なコインがあったとします。表裏を予想して最大の報酬を得れるように、賭け予想してもらうプログラムを作りたいです。そのためにはどのようにプログラムに学習させれば良いでしょうか。
(もちろんこの特殊なコインのことはプログラムは知らせずに・・・)
【使用するメソッド】
numpy.random
choice
与えられた選択肢の中からランダムで1つの選択を返してくれます。
【コード】
1行目でnumpyをインポートしました。2行目は「80%の確率で表、20%の確率で裏」という設定を書いています。4~13行目が今回の肝となる関数部分です。こちらも詳しくは【解説版】で見ていきますが、大きな流れとしては以下のことをやっています。
- コインを投げてあたりはずれを判定する
- あたりなら「報酬」を与え、外れなら何も与えない
- 1~2を100回繰り返し獲得した報酬をアウトプットする
15~17行目では上の1~3の作業を15回行い、平均の獲得報酬を見ています。
皆さんも実行してみてください!
だいたい60~75くらいの値になったのではないでしょうか?もしこのプログラムがランダムに表裏に毎回賭けていたら獲得報酬はおよそ50くらいになるはずです。
(⇑コインが特殊でもランダムに1/2で賭けていたら期待値も0.5になります!)
ところがそれ以上の報酬を獲得できているということは「プログラムがこの特殊なコインの傾向を見抜いて賭けていた」ということになりますよね!
このコードの細かい説明や期待値の話は【PythonでAI】強化学習【解説版】でお届けします。
コードは下からコピペして使ってくださいね!