Что такое TD3 и какие три улучшения он вносит в DDPG?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
TD3 — это улучшенная версия DDPG для непрерывных действий. Он снижает переоценку Q-значений и делает обучение стабильнее. Ключевые три улучшения: два критика, отложенное обновление актера и сглаживание целевого действия.
Определение:
TD3 (Twin Delayed Deep Deterministic Policy Gradient) — это алгоритм обучения с подкреплением для задач с непрерывным пространством действий, построенный поверх DDPG. Его цель — уменьшить типичные проблемы DDPG: переоценку ценности действий и нестабильность обучения.
Три основных улучшения TD3:
-
Два критика вместо одного
Вместо одного Q-функционального приближения используются два независимых критика. При вычислении целевого значения берется минимум из двух оценок, что помогает бороться с переоценкой. -
Отложенное обновление актера
Политика (актор) обновляется реже, чем критики. Это дает критикам возможность точнее подстроиться под текущую политику и снижает шум в обновлениях. -
Target policy smoothing
При вычислении целевого Q-значения в действие, подаваемое в target actor, добавляется небольшой шум с ограничением. Это делает обучение менее чувствительным к ошибкам аппроксимации и снижает риск переоптимизации по узким пикам Q-функции.
Пример использования:
TD3 часто применяют в управлении роботами или непрерывном control-задаче, где агент должен выбирать не дискретный класс, а конкретное значение действия: угол поворота, тягу, усилие.
# Псевдокод обновления TD3
# 1) Обновляем критики
target_action = target_actor(next_state)
target_action = clip(target_action + clipped_noise, action_low, action_high)
target_q1 = target_critic1(next_state, target_action)
target_q2 = target_critic2(next_state, target_action)
target_q = reward + gamma * (1 - done) * min(target_q1, target_q2)
loss_critic1 = MSE(critic1(state, action), target_q)
loss_critic2 = MSE(critic2(state, action), target_q)
# 2) Обновляем актера реже
if step % policy_delay == 0:
actor_loss = -critic1(state, actor(state)).mean()
update(actor)
soft_update(target_actor, actor)
soft_update(target_critic1, critic1)
soft_update(target_critic2, critic2)
Пояснение кода:
Код показывает типичный цикл TD3.
Сначала для следующего состояния вычисляется действие target-актора, к нему добавляется ограниченный шум, и результат обрезается по допустимому диапазону. Это и есть smoothing: target значение строится не по одному “точному” действию, а по слегка зашумленному.
Дальше считаются два target Q через два критика, и для целевой величины берется минимум. Это уменьшает риск того, что алгоритм будет учиться на завышенной оценке.
Затем оба критика обучаются на одинаковой целевой величине через MSE.
Актер обновляется не на каждом шаге, а по задержке policy_delay. Его цель — максимизировать оценку одного из критиков для действий, которые он сам предлагает. После обновления выполняется soft update целевых сетей.
Ключевые моменты:
- TD3 — это улучшение DDPG для непрерывных действий.
- Основная проблема DDPG — переоценка Q-значений и нестабильность обучения.
- Первый ключевой механизм TD3 — два критика и использование минимума из их оценок.
- Второй — отложенное обновление актера, чтобы критики успевали “догонять” политику.
- Третий — сглаживание target policy через шум в целевом действии.
- В сумме TD3 обычно обучается устойчивее и дает более надежные результаты, чем DDPG.