Дилемма исследования и использования

Урок объясняет главный компромисс RL: исследовать новое или использовать уже найденное.

Дилемма исследования и использования (exploration vs exploitation) — это выбор между тем, чтобы пробовать новые действия (вдруг они лучше) и тем, чтобы пользоваться действием, которое уже кажется выгодным.

Суть конфликта

Представьте, что вы переехали в новый город. Можно каждый день ходить в первое же понравившееся кафе (использование) или пробовать новые места (исследование). Если только использовать — вы рискуете застрять на посредственном варианте, не узнав о лучшем за углом. Если только исследовать — вы никогда не насладитесь найденным хорошим. RL-агент в каждый момент решает ровно эту дилемму.

Почему чистая жадность проигрывает

Жадный агент всегда выбирает действие с максимальной текущей оценкой. Проблема: оценки в начале случайны. Если первое действие случайно дало хорошую награду, агент будет повторять его вечно, так и не попробовав по-настоящему лучшее. Без исследования он не сможет исправить ошибочную раннюю оценку.

import random
random.seed(0)

# Два действия: A в среднем 5, B в среднем 8. Но первая проба A была удачной.
true_mean = {"A": 5.0, "B": 8.0}
estimate = {"A": 9.0, "B": 0.0}   # ошибочно завышенная оценка A
count = {"A": 1, "B": 0}

# ЧИСТО жадный агент: всегда берёт действие с лучшей оценкой
for _ in range(500):
    action = max(estimate, key=estimate.get)
    reward = true_mean[action] + random.uniform(-1, 1)
    count[action] += 1
    estimate[action] += (reward - estimate[action]) / count[action]

print("Сколько раз пробовал A и B:", count)
print("Итоговые оценки:", {k: round(v, 1) for k, v in estimate.items()})
print("B так и не попробован:", count["B"] == 0)

Вывод:

Сколько раз пробовал A и B: {'A': 501, 'B': 0}
Итоговые оценки: {'A': 5.0, 'B': 0.0}
B так и не попробован: True

Жадный агент застрял на A и ни разу не попробовал B, которое на самом деле лучше. Это цена полного отказа от исследования.

Как работает под капотом

Баланс достигается тем, что в стратегию закладывают долю случайных, «исследовательских» действий. Со временем эту долю обычно снижают: в начале знаний мало — исследуем много; ближе к концу оценки надёжны — больше используем. Самый простой способ — epsilon-greedy (следующий урок); есть и более хитрые (UCB, softmax/Boltzmann, Thompson sampling), которые исследуют умнее, отдавая предпочтение перспективным, но недоизученным действиям.

Частые ошибки

  • Нулевое исследование. Чисто жадный агент часто застревает на первом удачном действии.
  • Постоянное исследование. Если всё время выбирать случайно, агент не использует найденное и набирает мало награды.
  • Не снижать долю исследования. На старте полезно исследовать активно, но к концу обучения это только мешает.

Итоги

  • Дилемма exploration vs exploitation — фундаментальный компромисс RL.
  • Чистая жадность застревает на неоптимальных действиях из-за ранних случайных оценок.
  • Решение — закладывать долю исследования и со временем её уменьшать.
Проверьте себя
1. В чём суть дилеммы exploration vs exploitation?
AВыбор языка программирования
BБаланс между пробой новых действий и использованием уже известных выгодных
CВыбор скорости обучения
DВыбор числа слоёв нейросети
2. Почему чисто жадный агент может работать плохо?
AОн слишком медленный
BОн может застрять на действии с завышенной ранней оценкой и не попробовать лучшее
CОн не умеет считать награду
DОн требует слишком много памяти
3. Как обычно меняют долю исследования по ходу обучения?
AДержат постоянной и максимальной
BСо временем уменьшают: много в начале, мало в конце
CУвеличивают к концу
DПолностью отключают с первого шага