Обучение с подкреплением: PPO, SAC, DQN и промышленное применение
Большинство проектов с RL умирают не из-за неправильного алгоритма — они умирают из-за неправильно спроектированного reward. Инженер пишет reward = +1 за правильное действие, запускает обучение, через 10 миллионов шагов агент нашёл способ собирать награду, не решая задачу. Это называется reward hacking, и это основная боль промышленного RL.
Почему RL сложнее, чем supervised learning
В supervised learning у вас есть датасет с правильными ответами. В RL правильного ответа нет — есть скалярный сигнал «лучше/хуже», который часто приходит с задержкой в сотни шагов. Агент должен самостоятельно исследовать пространство и находить стратегию.
Следствия: нестабильность обучения, высокая чувствительность к гиперпараметрам, медленная сходимость. PPO на Atari сходится за 10M шагов — это часы. На роботизированных задачах с реальной физикой — дни или недели в симуляторе.
Выбор алгоритма под задачу.
| Задача | Алгоритм | Причина |
|---|---|---|
| Непрерывное управление (роботика, управление процессами) | SAC, TD3 | Sample efficiency, стабильность |
| Дискретные действия, game-playing | PPO, DQN + Rainbow | Простота, хорошо изучен |
| Multi-agent | MAPPO, QMIX | Кооперация/конкуренция |
| Offline RL (датасет без среды) | CQL, IQL, TD3+BC | Обучение без среды |
| RLHF (LLM alignment) | PPO, GRPO | Интеграция с reward model |
PPO: де-факто стандарт
PPO (Proximal Policy Optimization) — рабочая лошадка RL. Используется от игр до RLHF. Основная идея: ограничиваем обновление политики через клиппирование ratio clip_range=0.2, что даёт стабильность по сравнению с vanilla policy gradient.
Типичные проблемы при настройке PPO:
Entropy collapse. Агент слишком быстро становится детерминированным, перестаёт исследовать. Симптом: entropy coefficient падает до нуля, агент застрял в локальном оптимуме. Решение: ent_coef=0.01–0.05, не снижать ниже 0.001 в течение обучения.
Value function расходится. vf_loss_coef слишком высокий, critic переобучается на текущую политику. Симптом: explained_variance отрицательный. Лечение: vf_coef=0.5, gradient clipping max_grad_norm=0.5.
Неправильный n_steps. n_steps=2048 — дефолт для Stable-Baselines3. Для задач с длинным горизонтом (>500 шагов) нужно увеличивать. Для быстрых задач (10–50 шагов) — уменьшать до 256–512.
Основная библиотека для быстрого старта — stable-baselines3 + sb3-contrib. Для research и кастомных алгоритмов — tianshou или CleanRL (single-file implementations, проще читать и модифицировать).
SAC для непрерывного управления
SAC (Soft Actor-Critic) добавляет максимизацию энтропии в objective — агент учится быть и хорошим, и разнообразным. Это даёт отличную sample efficiency и устойчивость к шуму в reward.
На задачах управления технологическими процессами SAC обычно обходит PPO по сходимости: меньше взаимодействий со средой нужно для достижения того же качества. Важный параметр — target_entropy, обычно ставится автоматически как -dim(action_space), но для специфических задач лучше настраивать вручную.
Sim-to-Real: от симулятора к реальному железу
Обучать RL на реальном роботе — дорого и опасно. Стандартный подход: обучение в симуляторе → трансфер на реальное устройство. Основная проблема — reality gap: симулятор не воспроизводит реальную физику, трение, шум датчиков.
Domain randomization — главный инструмент для sim-to-real. Во время обучения случайно варьируем параметры среды: масса объектов ±30%, коэффициент трения ±50%, задержка действий 0–100 мс, шум наблюдений σ=0.01–0.1. Агент обучается быть робастным к вариациям, и real world становится лишь ещё одной вариацией.
Симуляторы: MuJoCo (стандарт для роботики), Isaac Gym / Isaac Lab от NVIDIA (GPU-accelerated, 10 000+ параллельных сред на одном GPU), PyBullet (бесплатный, медленнее), Gazebo (ROS-интеграция).
Кейс. Манипулятор для сортировки компонентов на PCB. Isaac Gym, 4096 параллельных сред на A100, PPO с domain randomization (случайная масса, освещение, позиция камеры). 500M шагов за 18 часов. После трансфера на реальный UR5: success rate 78% без дополнительного fine-tuning. После 2 часов fine-tuning на реальном роботе (10k шагов) — 94%.
RLHF: обучение LLM из человеческой обратной связи
RLHF стал стандартом для выравнивания языковых моделей после InstructGPT. Классическая схема: supervised fine-tuning → reward model training → PPO.
Проблемы классического RLHF через PPO: нестабильность (KL-дивергенция может взорваться), медленная сходимость, сложность в настройке. Поэтому популярность набирают альтернативы:
- DPO (Direct Preference Optimization) — обходит reward model полностью, обучается напрямую на парах предпочтений. Проще, стабильнее, но менее гибкий.
- GRPO (Group Relative Policy Optimization) — используется в DeepSeek-R1, хорошо работает для reasoning tasks.
- ORPO — объединяет SFT и alignment в одну стадию обучения.
Библиотеки: trl от Hugging Face — стандарт для RLHF/DPO. Поддерживает PPO, DPO, ORPO, GRPO из коробки. Работает с PEFT/LoRA для memory-efficient fine-tuning.
Процесс работы
Правильно спроектированный reward — 70% успеха проекта. Начинаем с reward engineering: детально описываем желаемое поведение, формализуем в reward-функцию, проверяем на наличие ловушек (reward hacking scenarios). Только потом — выбор алгоритма и среды.
Далее: настройка симулятора или среды, первые эксперименты с baseline, систематический hyperparameter sweep через Optuna или Ray Tune, анализ обучающих кривых.
Сроки: proof of concept на стандартной задаче — 2–4 недели. Разработка production-системы с кастомной средой и sim-to-real трансфером — 3–8 месяцев. RLHF для LLM — 4–10 недель в зависимости от объёма данных предпочтений.







