Variational option discovery: как агент учит навыки без наград
Алгоритмы вроде VIC, DIAYN и VALOR учат агента набору различимых навыков без единой внешней награды — за счёт взаимной информации между навыком и поведением. Разбираем, как это работает и где ломается.

Обычное обучение с подкреплением упирается в награду: без функции reward агент не знает, что делать. Variational option discovery заходит с другой стороны. Агенту дают латентную переменную — обозначим её z, дискретную или непрерывную, — и просят вести себя так, чтобы по траектории можно было угадать, какой именно z был выбран. Никакой внешней задачи. Только требование: разные z должны давать различимое поведение. На этом простом принципе построено целое семейство алгоритмов, и их идеи легли в основу иерархического RL и предобучения агентов.
Что вообще такое «опция» и почему её ищут
Опция (option) в RL — это темпорально протяжённый навык: не одно действие, а политика, которая работает несколько шагов подряд с собственным условием завершения. Классическая формализация — фреймворк options Саттона, Прекап и Сингха (1999). Проблема в том, что руками задавать набор опций дорого и негибко. Отсюда задача option discovery: пусть агент сам найдёт репертуар навыков.
Variational-подход решает это через взаимную информацию1 между латентным навыком z и тем, что агент делает или куда приходит. Максимизируя эту информацию, мы заставляем навыки быть, во-первых, разнообразными, во-вторых, различимыми со стороны.
Награды нет — есть требование быть узнаваемым. Если наблюдатель может по вашему поведению сказать, какой навык вы исполняете, значит навык осмыслен.
Математика в двух формулах
Цель — максимизировать взаимную информацию I(z; s) между навыком и состоянием (или траекторией). Напрямую она невычислима, потому что требует апостериорного распределения p(z | s). Здесь и появляется слово variational: истинный апостериор заменяют обучаемым приближением q_φ(z | s) — так называемым discriminator. Получается вариационная нижняя граница:
I(z; s) = H(z) - H(z | s)
>= H(z) + E[ log q_φ(z | s) ]
Первое слагаемое, энтропия H(z), обычно фиксируют: z берут из равномерного или заранее заданного приора. Значит, максимизировать надо второе — логарифмическую вероятность, с которой дискриминатор угадывает навык по состоянию. Именно log q_φ(z | s) и служит внутренней (intrinsic) наградой для политики. Дискриминатор и политика учатся совместно: политика старается быть предсказуемой для дискриминатора, дискриминатор — точнее угадывать.
Три опорных алгоритма
Семейство удобно разбирать через три работы, каждая из которых сдвигает одну деталь.
VIC (Variational Intrinsic Control)
Грегор, Рессенде и Виерстра, 2016. Максимизирует информацию между навыком и финальным состоянием траектории. Приор p(z) здесь тоже обучаемый, из-за чего на практике часть навыков схлопывается: агент предпочитает несколько «удобных» опций и забрасывает остальные.
DIAYN (Diversity Is All You Need)
Эйсенбах и соавторы, 2018 — самый цитируемый представитель. Ключевые отличия: дискриминатор смотрит на каждое состояние траектории, а не только на последнее, и приор p(z) фиксируют равномерным, чтобы навыки не схлопывались. К награде добавляют энтропию политики (максэнтропийный RL, поверх SAC). Итог — агент в среде без наград отращивает десятки различимых поведений: разные позы у симулированных роботов, разные направления движения.
VALOR (Variational Auto-encoding Learning of Options through Reinforcement)
Ахиам и соавторы, 2018. Здесь дискриминатор получает не отдельные состояния, а всю последовательность (через рекуррентную сеть), но не видит действий — чтобы навык кодировался именно траекторией состояний, а не тем, как агент дёргает джойстик. Авторы вводят curriculum по числу навыков: начинают с малого K и постепенно наращивают, иначе большое пространство z учится плохо.
| Алгоритм | На что смотрит дискриминатор | Приор p(z) | Главная фишка |
|---|---|---|---|
| VIC | финальное состояние | обучаемый | первая постановка задачи |
| DIAYN | каждое состояние | фиксированный, равномерный | стабильность + макс. энтропия |
| VALOR | вся траектория состояний | фиксированный | curriculum по числу навыков |
Где это ломается
Красивая идея упирается в несколько повторяющихся проблем, и о них стоит знать до того, как вы потратите неделю GPU-времени.
- Схлопывание навыков. Если приор обучаемый или энтропии мало, агент сводит всё к паре опций. Лечится фиксацией равномерного приора и добавкой энтропии политики.
- Статичные навыки. Дискриминатор, глядящий на отдельные состояния, поощряет агента просто прийти в разные места и там замереть. Различимость есть, полезной динамики нет. VALOR частично лечит это взглядом на всю траекторию.
- Локальность. Навыки в DIAYN часто разбегаются недалеко от старта: различить их можно и по маленьким смещениям, поэтому далеко идти нет стимула. Отсюда более поздние работы, где информацию считают не по состоянию, а по изменению состояния.
- Различимость не равна полезности. Навык может быть прекрасно узнаваем и совершенно бесполезен для последующей задачи. Это цена обучения вообще без reward.
Зачем это на практике
Основной сценарий — предобучение. Агент в фазе без наград набирает репертуар навыков, а потом их используют как строительные блоки: либо иерархический контроллер выбирает подходящий z под задачу, либо навыки служат хорошей инициализацией для дообучения на настоящей награде. Второй сценарий — исследование среды: набор различимых навыков покрывает пространство состояний плотнее, чем случайные действия, и это ускоряет последующий поиск разреженной награды.
Минимальный рецепт, если хотите воспроизвести DIAYN у себя:
- Задайте дискретный
zиз равномерного приора, напримерK = 20навыков. - Конкатенируйте one-hot
zк наблюдению и подавайте политике. - Обучите дискриминатор
q_φ(z | s)предсказыватьzпо состоянию (кросс-энтропия). - Отдавайте политике внутреннюю награду
log q_φ(z | s) - log p(z)и учите её через SAC. - Следите, растёт ли точность дискриминатора: если застряла у случайной — навыки не расходятся.
# псевдокод шага
z = sample_uniform(K)
traj = rollout(policy, obs, z)
for s in traj.states:
logits = discriminator(s)
r_intrinsic = log_softmax(logits)[z] - log(1.0 / K)
store_reward(r_intrinsic)
update_sac(policy, traj)
update_discriminator(discriminator, traj.states, z)
1 Взаимная информация I(X; Y) — мера того, насколько знание одной величины снижает неопределённость о другой. Равна нулю, если переменные независимы, и тем больше, чем сильнее по Y предсказуем X.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: Eysenbach et al. Diversity Is All You Need: Learning Skills without a Reward Function (arXiv:1802.06070), Achiam et al. Variational Option Discovery Algorithms (arXiv:1807.10299)
Частые вопросы
Чем option discovery отличается от обычного обучения с подкреплением?
Почему приор p(z) в DIAYN делают фиксированным, а не обучаемым?
Найденные навыки сразу решают целевую задачу?
Что такое «схлопывание навыков» и как его заметить?
Дискриминатор должен видеть действия агента?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.