ГлавнаяБлогActor-Critic: как решить проблему шума в REINFORCE
AI / Нейросети

Actor-Critic: как решить проблему шума в REINFORCE

Разбираем Actor-Critic — метод, который добавляет контекст к REINFORCE и убирает шум. Узнайте, как две сети работают вместе, и начните применять прямо сейчас.

Al
Редакция Algolitalgolit.ru
10 мин чтения29 июля 2026 г.

Зачем читать эту статью

REINFORCE — простой и понятный алгоритм обучения с подкреплением, но он страдает от высокого шума: удачные эпизоды могут толкать сеть в неправильном направлении, а неудачные — отбрасывать хорошие решения. В этой статье мы разберём Actor-Critic — архитектуру, которая добавляет контекст и радикально снижает дисперсию. Вы узнаете, как две сети работают в паре, увидите рабочий код и поймёте, почему на этой архитектуре построены современные алгоритмы вроде PPO и GRPO.

Проблема REINFORCE: нет контекста

Представьте баскетболиста, который набрал 15 очков за игру. Это хорошо или плохо? Всё зависит от его обычного уровня: если обычно он набирает 10 — это отличная игра, если 25 — плохая. Число само по себе ничего не говорит без контекста.

REINFORCE работает именно так: он видит возврат (return) 0.7 и обновляет сеть, не зная, хорошо это или плохо для данного состояния. Положительный возврат всегда считается хорошим, отрицательный — плохим. Отсюда шум: удачные эпизоды дают ложный сигнал, неудачные — сбивают с толку.

Actor-Critic: добавляем контекст

Actor-Critic решает эту проблему, вводя две сети с разными задачами:

  • Actor (актёр) — то же, что и в REINFORCE: принимает состояние, выдаёт вероятности действий. Решает, что делать.
  • Critic (критик) — новая сеть: принимает состояние, выдаёт одно число — оценку ценности этого состояния (value).

Критик никогда не выбирает действия. Он только наблюдает и оценивает. Его единственная задача — дать актёру более чистый сигнал.

Как выглядит вывод сетей

# Актёр: вероятности 4 действий
actor_output = [0.1, 0.3, 0.2, 0.4]

# Критик: оценка ценности состояния
critic_output = 0.72

Advantage (преимущество) — ключевое число

Вместо того чтобы использовать сырой возврат для обновления актёра, мы вычисляем advantage:

advantage = actual_return - critic_estimate

Если advantage положительный — действие сработало лучше ожидаемого, усиливаем его. Если отрицательный — хуже ожидаемого, ослабляем. Если ноль — ровно среднее, ничего не меняем.

Это простое вычитание убирает огромную часть шума. Проблема «удачного эпизода» исчезает, потому что «лучше ожидаемого» — теперь осмысленный сигнал, а не просто большое число.

Как выглядят обновления

Обе сети обновляются после каждого эпизода. Сначала критик (чтобы лучше оценивать), затем актёр (используя свежие оценки):

# Критик: учится предсказывать возврат точнее
critic_loss = (actual_return - critic(state)) ** 2

# Актёр: как в REINFORCE, но с advantage вместо сырого возврата
actor_loss = -advantage * log(probability_of_action_taken)

Критик обучается как простая регрессия. Актёр — как REINFORCE, но с более чистым сигналом. Они улучшаются вместе.

Что мы видим в результатах

После обучения критик научился оценивать ценность состояний в Gridworld:

  • Состояния рядом с целью — высокая ценность (~0.7–0.9)
  • Состояния рядом с дырами — низкая ценность (отрицательная)
  • Безопасные средние состояния — средняя ценность

Критик выучил карту мира, просто наблюдая за игрой актёра. Никто не говорил ему, где дыры — он понял это через опыт.

Почему это фундаментальная архитектура

На Actor-Critic построены все современные алгоритмы RL:

  • PPO (используется для обучения ChatGPT): Actor-Critic + клиппирование обновлений
  • A3C (DeepMind, 2016): Actor-Critic с параллельными агентами
  • SAC (Berkeley, 2018): Actor-Critic с энтропийным бонусом для робототехники
  • GRPO (DeepSeek-R1): Actor-Critic, где критика заменена групповым сравнением

Каждый из них — актёр, выбирающий действия, и что-то, оценивающее качество. Различия только в том, как вычисляется advantage и как стабилизируется обучение.

Практический вывод: что делать прямо сейчас

Откройте свой проект с REINFORCE и добавьте критика. Это всего одна дополнительная сеть с простой регрессионной потерей. Замените сырой возврат на advantage — и вы увидите, как шум уменьшится, а обучение ускорится. Весь код из этой серии, упорядоченный по дням, доступен на GitHub: github.com/MadhumithaKolkar/jax-rl-lab.

Счастливого обучения!

#actor-critic#reinforce#обучение с подкреплением#jax#глубокое обучение
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →