Стратегия epsilon-greedy
Урок разбирает epsilon-greedy — самый простой и популярный способ балансировать исследование и использование.
epsilon-greedy — стратегия выбора действия: с вероятностью epsilon агент берёт случайное действие (исследует), а с вероятностью 1 минус epsilon — действие с максимальной оценкой (использует).
Как это устроено
Идея предельно проста. Берём число epsilon, например 0.1. Перед каждым действием бросаем «монетку»: с вероятностью 10% выбираем случайное действие, в остальных 90% — лучшее по текущей Q-оценке. Так агент почти всегда поступает разумно, но иногда пробует что-то новое, чтобы не упустить лучший вариант.
import random
random.seed(7)
Q = [1.5, 3.0, 0.5] # оценки трёх действий, лучшее — индекс 1
def epsilon_greedy(Q, eps):
if random.random() < eps:
return random.randint(0, len(Q) - 1) # исследование
return max(range(len(Q)), key=lambda i: Q[i]) # использование
counts = [0, 0, 0]
for _ in range(1000):
counts[epsilon_greedy(Q, 0.3)] += 1
print("Выборы действий за 1000 шагов:", counts)
print("Лучшее действие (индекс 1) выбрано чаще всего:", counts[1] == max(counts))Вывод:
Выборы действий за 1000 шагов: [124, 767, 109] Лучшее действие (индекс 1) выбрано чаще всего: True
При epsilon=0.3 действие 1 выбирается примерно в 70% + доля случайных попаданий, а оставшиеся попытки уходят на исследование других действий. Так агент и эксплуатирует лучшее, и продолжает проверять остальные.
Затухание epsilon
На практике epsilon обычно делают убывающим: начинают с большого (например, 1.0 — чистое исследование) и постепенно снижают до маленького (0.01). Логика та же, что в прошлом уроке: исследуй активно, пока знаешь мало, и переходи к использованию, когда оценки стали надёжными.
epsilon по эпизодам (линейное затухание 1.0 -> 0.05): эпизод 0: 1.00 (всё случайно) эпизод 250: 0.52 эпизод 500: 0.05 (почти только лучшее действие)
Как работает под капотом
epsilon-greedy гарантирует, что каждое действие в каждом состоянии будет испробовано бесконечно много раз (если epsilon>0). Это важное теоретическое условие сходимости Q-learning: чтобы оценить ценность действия, его нужно периодически пробовать. Слабость метода — исследование «вслепую»: случайное действие выбирается равновероятно, без учёта того, какие действия перспективнее. Более умные стратегии (UCB, softmax) исправляют это.
Частые ошибки
- Слишком большой постоянный epsilon. Агент будет много шуметь и наберёт мало награды даже после обучения.
- epsilon = 0 с самого начала. Это чистая жадность — агент не исследует и легко застревает.
- Снижать epsilon слишком быстро. Агент не успеет собрать достаточно опыта и зафиксирует неоптимальную политику.
Итоги
- epsilon-greedy: с вероятностью epsilon — случайное действие, иначе — лучшее по оценке.
- epsilon обычно делают затухающим: много исследования в начале, мало в конце.
- Это простой способ обеспечить достаточное исследование, но он исследует «вслепую».