От таблиц к аппроксимации: зачем нейросети
Урок объясняет, почему Q-таблица не масштабируется и зачем её заменяют нейросетью.
Аппроксимация функции ценности — это замена таблицы Q(s,a) параметрической функцией (обычно нейросетью), которая по состоянию вычисляет ценности действий и обобщает их на новые, невиданные ранее состояния.
Проклятие размерности
Табличный Q-learning хранит по числу для каждой пары «состояние-действие». Для сетки 4×4 это 16×4 = 64 ячейки — мелочь. Но реальные задачи огромны.
| Задача | Размер пространства состояний |
| Gridworld 4×4 | 16 |
| Шахматы | порядка 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).