Агент, среда и награда: цикл взаимодействия
Урок разбирает базовый цикл RL и вводит словарь: агент, среда, состояние, действие, награда.
Цикл взаимодействия — повторяющаяся последовательность: состояние → действие → награда и новое состояние. Из этих кирпичиков собран любой RL-алгоритм.
Кто есть кто
В RL мир делится на две части: агент (тот, кто учится и принимает решения) и среда (всё остальное). Они обмениваются сообщениями по кругу.
- Состояние (state, обозначают s) — описание ситуации, которое видит агент. В шахматах это расстановка фигур, в игре — кадр экрана.
- Действие (action, a) — что агент может сделать: «налево», «прыгнуть», «купить».
- Награда (reward, r) — число, которое среда выдаёт после действия. Это единственный сигнал обучения.
Схема цикла
На каждом такте времени t происходит один оборот:
действие a_t ┌──────────────────────┐ │ v +-------+ +---------+ | Агент | | Среда | +-------+ +---------+ ^ │ │ состояние s_(t+1), │ └─── награда r_(t+1) ──┘
Агент видит состояние, выбирает действие, среда отвечает новым состоянием и наградой — и круг повторяется, пока эпизод не закончится (например, агент дошёл до цели или проиграл).
Возврат: что именно максимизирует агент
Агент стремится не к разовой награде, а к возврату (return) — сумме всех будущих наград. Часто будущие награды учитывают с коэффициентом дисконтирования gamma (о нём — отдельный урок), но идея проста: важна не одна конфета сейчас, а вся цепочка.
# Один эпизод: агент идёт по коридору к выходу.
# Действие "вперёд" даёт -1 (трата времени), достижение выхода даёт +10.
rewards = [-1, -1, -1, -1, 10] # 4 шага + награда за выход
total_return = sum(rewards)
print("Награды за эпизод:", rewards)
print("Возврат (сумма наград):", total_return)
# Дисконтированный возврат: дальние награды весят меньше
gamma = 0.9
discounted = sum(r * gamma ** t for t, r in enumerate(rewards))
print("Дисконтированный возврат:", round(discounted, 2))Вывод:
Награды за эпизод: [-1, -1, -1, -1, 10] Возврат (сумма наград): 6 Дисконтированный возврат: 3.12
Как работает под капотом
Среда — это «чёрный ящик» с двумя функциями: reset() возвращает начальное состояние, а step(action) принимает действие и возвращает четвёрку «новое состояние, награда, флаг конца, доп. информация». Именно такой интерфейс закрепил стандарт Gymnasium, к которому мы вернёмся в конце курса. Агент же — это любая логика, которая по состоянию выбирает действие; в простейшем случае это словарь «состояние → действие», а в сложном — нейросеть.
Частые ошибки
- Считать, что агент видит весь мир. Он видит только состояние, которое выдаёт среда. Если состояние неполное, агент работает «вслепую».
- Награждать за процесс, а не за цель. Если щедро награждать за каждый шаг, агент может научиться бесконечно ходить, а не доходить до выхода. Награда должна вести к настоящей цели.
- Забывать про конец эпизода. Без терминального состояния возврат может расти бесконечно, и обучение разъезжается.
Итоги
- Цикл RL: состояние → действие → награда и новое состояние, и так по кругу.
- Агент максимизирует возврат — сумму будущих наград, а не разовую награду.
- Стандартный интерфейс среды —
reset()иstep(action).