強化学習の基本アルゴリズム ε-greedy法

AI・機械学習

ε-グリーディー法とは

ε-グリーディー法(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テストやウェブ広告の最適化、推薦システムなどで広く利用されています。

タイトルとURLをコピーしました