От таблиц к аппроксимации: зачем нейросети

Урок объясняет, почему Q-таблица не масштабируется и зачем её заменяют нейросетью.

Аппроксимация функции ценности — это замена таблицы Q(s,a) параметрической функцией (обычно нейросетью), которая по состоянию вычисляет ценности действий и обобщает их на новые, невиданные ранее состояния.

Проклятие размерности

Табличный Q-learning хранит по числу для каждой пары «состояние-действие». Для сетки 4×4 это 16×4 = 64 ячейки — мелочь. Но реальные задачи огромны.

ЗадачаРазмер пространства состояний
Gridworld 4×416
Шахматыпорядка 10 в степени 40+
Игра по пикселям экранаастрономически много

Хранить таблицу для шахмат или для экрана из миллионов пикселей физически невозможно. И даже если бы влезло — агент никогда не посетит каждое состояние, чтобы заполнить ячейку. Это проклятие размерности.

Идея обобщения

Нейросеть решает обе проблемы сразу. Вместо запоминания каждой клетки она обобщает: похожие состояния получают похожие оценки. Научившись на одной позиции, агент разумно оценит близкую, которую никогда не видел. Это как разница между зубрёжкой таблицы умножения до 1000×1000 и пониманием самого умножения.

# Аналогия обобщения: вместо таблицы значений — функция-предиктор.
# Таблица помнит только то, что видела; функция считает для любого входа.
table = {1: 1, 2: 4, 3: 9}              # "запомненные" квадраты
def approximator(x):                     # "обобщающая" функция
    return x * x

print("Таблица знает x=3:", table.get(3))
print("Таблица про x=7:", table.get(7))          # не видела -> None
print("Функция для x=7:", approximator(7))        # обобщает на новое
print("Функция для x=100:", approximator(100))

Вывод:

Таблица знает x=3: 9
Таблица про x=7: None
Функция для x=7: 49
Функция для x=100: 10000

Это упрощённая аналогия: таблица бессильна на невиданных входах, а функция-аппроксиматор обобщает. Нейросеть в RL играет роль такой функции для Q(s,a).

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

В deep RL нейросеть получает на вход состояние (например, пиксели кадра) и выдаёт оценку ценности для каждого действия. Обучают её, минимизируя ту же TD-ошибку, что и в табличном случае, но теперь градиентным спуском по весам сети. Подробности нейросетей и обратного распространения — в наших курсах «Глубокое обучение» и «PyTorch»; здесь важно понять роль: сеть — это компактная, обобщающая замена огромной таблицы.

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

  • Думать, что нейросеть «всё исправит». Аппроксимация приносит нестабильность: маленькое изменение весов меняет оценки сразу для многих состояний.
  • Брать deep RL для крошечных задач. Если состояний мало, табличный метод проще, быстрее и стабильнее.
  • Игнорировать представление состояния. Качество обобщения сильно зависит от того, как закодировано состояние (признаки, нормализация).

Итоги

  • Табличный RL не масштабируется из-за проклятия размерности.
  • Нейросеть аппроксимирует Q(s,a) и обобщает оценки на невиданные состояния.
  • Цена обобщения — нестабильность, которую приходится укрощать (см. урок про DQN).
Проверьте себя
1. Что такое проклятие размерности в контексте табличного RL?
AСлишком быстрое обучение
BЧисло состояний растёт так, что таблицу нельзя ни хранить, ни заполнить
CНехватка действий
DСлишком маленький gamma
2. Какое главное преимущество даёт нейросеть-аппроксиматор по сравнению с таблицей?
AОна не требует обучения
BОна обобщает: похожие состояния получают похожие оценки, даже невиданные
CОна всегда точнее таблицы
DОна не использует награды
3. Какова плата за переход к аппроксимации функции ценности?
AПолная потеря наград
BНестабильность обучения: изменение весов сразу влияет на многие оценки
CНевозможность исследования
DИсчезновение состояний