ε-グリーディー法とは
ε-グリーディー法(Epsilon-Greedy Method)は、強化学習の代表的な探索アルゴリズムの一つで、探索(exploration)と活用(exploitation)のバランスを取るためのシンプルな手法です。
このアルゴリズムの目的は、学習を進めながら、できるだけ高い報酬を得られる行動(アクション)を選び続けることです。
アルゴリズムの概要
- 活用(exploitation):これまでの経験で最も良い結果を出した行動を選ぶ。
- 探索(exploration):あえてランダムに新しい行動を試してみる。
ε-グリーディー法では、行動を選ぶ際に以下のような戦略を取ります。
- 確率 (1 − ε) で、これまでの試行で最も報酬の高かった行動を選ぶ(活用)。
- 確率 ε で、ランダムな行動を選ぶ(探索)。
ε-グリーディー法の具体例
スロットマシンの例
カジノで3台のスロットマシン(バンディット)があるとします。
- マシンA:20%の確率で100円
- マシンB:50%の確率で50円
- マシンC:80%の確率で10円
最初はどのマシンが良いか分からないため、探索して確率を推測しなければなりません。しかし、ある程度試した後で、最も期待値の高いマシンに活用を集中する必要があります。
例えば、ε = 0.1(10%の確率で探索する場合):
– 90%の確率で、これまでの試行で最も良かったマシンを選ぶ(例:マシンB)。
– 10%の確率で、ランダムにA・B・Cのどれかを試す。
探索と活用のトレードオフ
- 探索不足の場合:序盤に有望な行動に偏ってしまい、他にもっと良い選択肢を見逃す可能性がある。
- 探索過多の場合:何度もランダムに試してしまい、得られるべき報酬が減ってしまう。
εの値は探索と活用のバランスに大きく影響します。
– εが大きい(例:0.3):多くの探索を行うが、効率が下がる。
– εが小さい(例:0.01):ほとんど活用するため、未発見の選択肢を試す機会が減る。
εの調整
学習が進むにつれて、徐々にεの値を小さくすることが効果的です。
– 序盤は探索を多めにして、新しい選択肢を発見する。
– 後半は活用を増やして、得られる報酬を最大化する。
実装例(Pythonコード)
以下は、3つのスロットマシンに対してε-グリーディー法を適用するシンプルなコードです。
import numpy as np
# スロットマシンの報酬確率
rewards = [0.2, 0.5, 0.8] # A, B, Cの各マシンの成功確率
n_actions = len(rewards) # マシンの数
n_trials = 1000 # 試行回数
epsilon = 0.1 # 探索の確率
# 各マシンの報酬総額と試行回数を記録
total_rewards = np.zeros(n_actions)
action_counts = np.zeros(n_actions)
# ε-グリーディー法のシミュレーション
for _ in range(n_trials):
if np.random.rand() < epsilon:
# 探索:ランダムなマシンを選ぶ
action = np.random.choice(n_actions)
else:
# 活用:これまでで最も報酬の高いマシンを選ぶ
action = np.argmax(total_rewards / (action_counts + 1e-5)) # 試行回数が0の場合の対応
# 選んだマシンの報酬を取得
reward = np.random.rand() < rewards[action]
total_rewards[action] += reward
action_counts[action] += 1
print(f"各マシンの選択回数:{action_counts}")
print(f"累積報酬:{total_rewards.sum()}")
まとめ
ε-グリーディー法は、探索と活用のバランスを取るための基本的なアルゴリズムで、強化学習の入門に適しています。シンプルなアルゴリズムながら、実世界の問題にも応用されており、A/Bテストやウェブ広告の最適化、推薦システムなどで広く利用されています。