Обучение с подкреплением и выравнивание
Практика: от gridworld до DPO
Value iteration, REINFORCE, PPO и DPO своими руками — и проверки, которые ловят настоящие ошибки
Ветка в двух формулах
Слева уроки 010–050, справа 060–110. Уроки 120–140 показывают, что вторая формула с KL-регуляризацией и есть выравнивание, а 150 возвращает модель среды в первую.
Что реализовать
1. Gridworld и динамическое программирование
Начните с того, где есть точный ответ.
- реализуйте value iteration и policy iteration на сетке из урока 010;
- сверьте значения с виджетом: при и цене шага клетка рядом с целью обязана давать , следующая — ;
- посчитайте число итераций обоих алгоритмов и сравните с уроком 040.
терминал стена
- горизонт 1/(1−γ)
- 10
- значение старта
- 0.344
- изменение за проход
- 0.0e+0
- проходов до сходимости
- 7
Эталонные значения. Ваш value iteration обязан сойтись сюда, а policy iteration — за меньшее число итераций.
2. Табличный Q-learning
Та же сетка, но без модели.
- -жадное поведение, убывающий шаг;
- сравните выученную с точным ответом из пункта 1;
- сделайте то же для SARSA и найдите состояния, где политики различаются.
Ожидание из урока 050: у обрыва SARSA обходит с запасом, Q-learning идёт по краю. Если различий нет вовсе — вероятно, слишком мало, и обе схемы фактически совпали.
3. REINFORCE на бандите
Самая маленькая задача, где виден весь механизм градиента политики.
- три руки, награды , , ;
- посчитайте точный градиент в замкнутой форме и сравните с выборочным;
- измерьте дисперсию оценки с базовой линией и без;
- прибавьте ко всем наградам и повторите измерение.
Ожидание из урока 070: градиент не изменится, дисперсия без базовой линии вырастет примерно в тридцать тысяч раз. Это самая убедительная демонстрация во всей ветке, и стоит увидеть её своими глазами.
Дальше тот же REINFORCE переносится на CartPole — классическую следующую ступень, и переносится почти без изменений в коде. Меняется одно, зато существенное: в бандите награда приходит сразу за действие, а в CartPole эпизод длится сотни шагов, и приходится решать, какому из них приписать падение шеста. Это и есть назначение вклада (credit assignment) — задача, которой у бандита просто нет.
CartPole ценен ещё и тем, что последний пункт предыдущего эксперимента встроен в него по условию: награда там за каждый шаг, поэтому все возвраты положительны и без базовой линии каждое действие в каждом эпизоде получает толчок в свою сторону. Ровно тот же сдвиг на , только его нельзя убрать из задачи — его можно убрать лишь базовой линией. Возьмите скользящее среднее возврата, сравните с запуском без него, и посмотрите на дисперсию градиента: это тот же замер, что на бандите, но теперь на задаче, где он влияет на результат.
4. PPO на чём-нибудь непрерывном
Маятник или что-то подобное. Обязательные детали, каждая из уроков 080–110:
- GAE с ;
- нормализация преимуществ по батчу;
- обрезка с и ранний выход по измеренной KL;
- энтропийный бонус;
- отдельная сеть критика или общий ствол — но с разными скоростями обучения.
Логируйте четыре величины: среднюю награду, KL от старой политики, долю обрезанных примеров (clip fraction) и энтропию политики. Каждая ловит свой класс ошибок.
5. DPO на игрушечной модели
Здесь можно обойтись без языковой модели вовсе. Возьмите распределение над пятью-десятью «ответами», задайте синтетическую награду, сгенерируйте пары предпочтений по Брэдли–Терри и обучите политику функцией потерь DPO.
ответ вероятность
- средняя награда
- 1.6966
- KL от опорной
- 0.6693
- значение цели
- 1.362
- β·log Z
- 1.362
6. Пять измерений
Измерение 1: оба алгоритма ДП дают одно и то же. Value iteration и policy iteration обязаны сойтись к одинаковым значениям с точностью . Если нет — ошибка в одном из них, и найти её проще, чем разбираться с обучением.
Измерение 2: базовая линия не смещает. Сравните выборочный градиент с точным при включённой и выключенной базовой линии. Ожидание: оба несмещены, дисперсии различаются на порядки.
Измерение 3: преимущество в среднем нулевое. Посчитайте по вашей оценке. По определению это нуль; заметное отклонение означает ошибку в критике или в весах.
Измерение 4: обрезка PPO односторонняя. Подайте в вашу функцию потерь при и при . Ожидание из урока 110: в первом случае градиент нулевой, во втором — нет.
Измерение 5: DPO сходится к правильному распределению. Обучите на парах и сравните итоговую политику с , нормированной. Это проверяет весь вывод урока 140 разом.
Куда смотреть, если не работает
| симптом | что проверять первым |
|---|---|
| значения ДП не сходятся | синхронность обновления, обработку удара в стену |
| Q-learning сходится не туда | убывание шага, покрытие всех пар состояние–действие |
| REINFORCE не учится, награды крупные | базовую линию (урок 070) |
| PPO обучается и внезапно ломается | KL за эпоху — вероятно, нужен ранний выход |
| clip fraction около нуля | шаг слишком мал, ограничение не работает |
| clip fraction больше трети | шаг слишком велик, большая часть батча без градиента |
| энтропия падает почти до нуля | добавить бонус, иначе исследование прекратилось |
| DPO: потери падают, качество нет | логировать обе неявные награды по отдельности |
Последняя строка — специфичная для DPO и разобранная в уроке 140: функция потерь не различает «поднять предпочтённое» и «опустить оба». Единственный способ увидеть разницу — смотреть на для победителя и проигравшего отдельно.
Чем закончить
Прогоните все пять измерений. Особенно третье и пятое: первое проверяет, что ваша оценка преимущества согласована сама с собой, второе — что вся цепочка от предпочтений до политики приводит туда, куда обещает теория. Обучение, которое «выглядит нормально», проходит и с ошибками; эти тождества — нет.
Источники
- Huang и др. — The 37 Implementation Details of Proximal Policy Optimization — Полный список того, что в PPO обычно не пишут в статьях
- Sutton, Barto — Reinforcement Learning, An Introduction — Эталонные примеры, с которыми стоит сверяться
Проверки
0 из 2Отладка агента
Отметьте все верные утверждения об отладке алгоритмов этой ветки.
Аудит гиперпараметров
Перед запуском обучения полезно перевести гиперпараметры в величины, у которых есть смысл. Реализуйте
audit(gamma, lam, epsilon, beta)— верните[task_horizon, gae_horizon, clip_kl, horizon_ratio]:task_horizon= — на сколько шагов смотрит задача;gae_horizon= — на сколько шагов доверяет наблюдениям оценка преимущества;clip_kl= при — оценка расхождения, которое соответствует границе обрезки PPO (урок 110);horizon_ratio=gae_horizon/task_horizon.
Аргумент
betaв вычислениях не участвует — он передаётся, потому что в настоящем аудите проверяют и его, и полезно видеть, что он не влияет ни на одну из этих четырёх величин. KL-регуляризация и оценка преимущества — независимые части конфигурации.Загрузка редактора…
Ctrl/⌘ + Enter