強化学習(reinforcement learning)はエージェント(行動する主体)が環境と相互作用し、報酬というフィードバックを受けて試行錯誤しながら学習していく学習方法。
バンディット問題¶
バンディット問題(bandit problem)は、複数のスロットマシン(bandit)が存在していてどのスロットマシンが最も多い平均的なリターンをもたらすのかがわからない中で、最適なスロットマシンを選んで合計のリターンを最大化する問題。
各スロットマシンのリターンを推測するためにレバーを引いていく「探索(exploration)」と、リターンが多いスロットマシンのレバーを引く「活用(exploitation)」の2つの行動をとることができるが、探索ばかりをしていてもリターンの最大化ができず、かといって活用ばかりをしていてもよりよいスロットマシンの存在を見逃すリスクがあるというトレードオフが存在する。
強化学習の枠組みでは、スロットマシンは環境(environment)、問題に取り組むプレイヤーはエージェント(agent)と呼ばれ、得られるリターンのことは報酬(reward)と呼ばれる。
例¶
報酬がの一様分布に従うスロットマシン(環境)と、報酬が平均0.7、分散0.1の正規分布に従うスロットマシンがあるとする。
Source
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import japanize_matplotlib
np.random.seed(0)
x = np.linspace(0, 1, 100)
a = stats.uniform.pdf(x, 0, 1)
b = stats.norm.pdf(x, loc=0.7, scale=0.1)
fig, ax = plt.subplots(ncols=2, figsize=[6, 2])
ax[0].plot(x, a)
ax[1].plot(x, b)
参考¶
60日かけて学ぶ教材
NeurIPS 2020 Tutorial Offline Reinforcement Learning: From Algorithms to Practical Challenges