OpenAI Baselines: чем A2C отличается от ACKTR на практике
OpenAI выложила в набор Baselines две реализации policy-gradient алгоритмов — A2C и ACKTR. Первый проще и быстрее считает шаг, второй тратит больше на математику ради лучшей выборки данных.

Набор OpenAI Baselines — это открытая коллекция эталонных реализаций алгоритмов обучения с подкреплением на Python и TensorFlow. Среди них есть два, которые часто ставят рядом: A2C (Advantage Actor-Critic) и ACKTR (Actor-Critic using Kronecker-Factored Trust Region). Оба относятся к семейству actor-critic, оба обучают агента играть в Atari и управлять моделями в MuJoCo, но выбирают между ними по одному вопросу — что у вас в дефиците: время вычислений или данные среды.
Что такое actor-critic и почему их два
В actor-critic две головы работают вместе. Actor выбирает действие по текущей политике, critic оценивает, насколько это действие лучше среднего — это и есть advantage*. Actor подстраивает политику в сторону действий с положительным advantage, critic учится точнее предсказывать ценность состояний. Такая связка снижает разброс градиента по сравнению с чистым policy gradient.
A2C и ACKTR отличаются не архитектурой, а тем, как они делают шаг оптимизации. A2C идёт обычным градиентным спуском. ACKTR аппроксимирует натуральный градиент через приближение матрицы Фишера методом K-FAC и держит обновление внутри trust region — области, за пределы которой политика за один шаг не уходит.
A2C: синхронная версия A3C
A2C — синхронный вариант известного A3C (Asynchronous Advantage Actor-Critic). В A3C несколько воркеров бегут по своим копиям среды и асинхронно шлют градиенты в общую сеть. OpenAI в своей заметке отмечала, что асинхронность в A3C не даёт выигрыша в качестве — она была нужна ради утилизации CPU, а не ради обучения.
A2C убирает рассинхрон: все воркеры ждут друг друга, градиенты усредняются по батчу, обновление применяется разом. В итоге код проще, шаг детерминированнее, и на одной машине с GPU A2C обычно эффективнее A3C по использованию железа.
ACKTR: дороже шаг, меньше шагов
ACKTR берёт идею натурального градиента из TRPO, но считает его практичнее. Вместо полного обращения матрицы Фишера метод K-FAC разбивает её на блоки по слоям и приближает произведениями кронекеровских факторов. Это позволяет обновлять политику по геометрии, которую задаёт сама вероятностная модель, а не по евклидову расстоянию в пространстве весов.
Расплата — каждый шаг тяжелее по вычислениям. Но за один шаг ACKTR извлекает из данных больше, поэтому взаимодействий со средой на ту же награду обычно нужно меньше.
Выбор между A2C и ACKTR — это выбор, что у вас дороже: секунды процессора или кадры симуляции. В Atari дёшево и то и другое, в робототехнике каждый эпизод среды стоит времени.
Как выбрать под задачу
Практическое правило простое. Если среда быстрая и вы можете сгенерировать много кадров дёшево (эмулятор Atari, лёгкая симуляция), берите A2C: он быстрее прокрутит миллионы шагов. Если каждый шаг среды дорогой (сложная физика, длинные эпизоды, реальное железо), sample efficiency** ACKTR окупает более тяжёлый шаг.
| Критерий | A2C | ACKTR |
|---|---|---|
| Тип оптимизации | обычный градиент | натуральный градиент (K-FAC) + trust region |
| Стоимость одного шага | ниже | выше |
| Sample efficiency | ниже | выше |
| Настройка learning rate | требует подбора | устойчивее за счёт trust region |
| Сложность реализации | простая | заметно сложнее |
| Когда брать | дешёвая быстрая среда | дорогие взаимодействия со средой |
Что нужно, чтобы запустить
Оба алгоритма живут в одном репозитории Baselines и запускаются похоже. Порядок примерно такой:
- Поставить зависимости: Python, TensorFlow нужной версии и совместимые сборки Gym и Atari-окружений. Версии критичны — устаревший TensorFlow ломает граф, поэтому сверяйтесь с README репозитория, а не с чужими постами.
- Подготовить среду: для Atari — обёртки предобработки кадров (grayscale, resize, стек из нескольких кадров), для MuJoCo — установленную и активированную лицензию физического движка.
- Запустить обучение через общий раннер Baselines, указав алгоритм (
a2cилиacktr), окружение и число параллельных сред. - Логировать метрики (среднюю награду за эпизод) и сохранять чекпоинты, чтобы можно было возобновить обучение и сравнить кривые двух алгоритмов на одной среде.
Точные имена флагов и модулей менялись между ревизиями репозитория, поэтому не полагайтесь на команду из старого туториала — сверяйте её с актуальным README и help раннера.
Частые грабли
- Несовпадение версий. Baselines писались под конкретные версии TensorFlow и Gym; свежие релизы ломают обратную совместимость. Изолируйте окружение.
- Мало параллельных сред. A2C рассчитан на батч из нескольких воркеров одновременно. С одним воркером обучение шумит и деградирует.
- Ожидание чуда от ACKTR на дешёвой среде. Если кадры бесплатны, выигрыш по sample efficiency не окупает более медленный шаг — по стене часов A2C может обогнать.
Статус проекта
OpenAI Baselines задумывался как набор эталонов, а не как продуктовая библиотека. Позже сообщество вынесло часть идей в форк Stable Baselines и Stable-Baselines3 на PyTorch, где интерфейс аккуратнее, а поддержка активнее. Если вы начинаете новый проект сегодня, оригинальные Baselines полезны как ориентир и источник реализаций, но для боевого кода стоит посмотреть и на более свежие форки.
* Advantage — насколько выбранное действие лучше или хуже среднего ожидаемого результата в этом состоянии. Positive advantage подталкивает политику повторять действие.
** Sample efficiency — сколько взаимодействий со средой нужно алгоритму, чтобы достичь заданного уровня награды. Чем меньше, тем эффективнее по данным.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: OpenAI Baselines: ACKTR & A2C (официальный блог), OpenAI Baselines — репозиторий на GitHub
Частые вопросы
A2C — это то же самое, что A3C?
Что даёт ACKTR по сравнению с обычным градиентом?
Какой алгоритм выбрать новичку?
Почему обучение шумит и не сходится?
Стоит ли использовать OpenAI Baselines в 2024 году для нового проекта?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.