Приложение: выбор алгоритма
Методы смягчают конкретные режимы отказа при определённых предположениях — редко «решают offline RL» полностью.
Это decision aid, а не рейтинг. Используйте вместе с OPE (глава 3), BC-baseline и пониманием покрытия данных и риска развёртывания.
Краткая таблица выбора
| Метод | Идея | Когда пробовать | Главный failure mode | Когда не использовать |
|---|---|---|---|---|
| BC | Доверять данным | Поведение достаточно хорошо; короткий горизонт; сильное покрытие | Накопление ошибки; нет улучшения сверх логов | Нужно комбинировать хорошие части траекторий или использовать награду |
| TD3+BC | Улучшать Q, оставаясь у данных | Непрерывное управление; простой actor-critic baseline | Подбор $\lambda$; OOD-запросы актора к Q | Мультимодальное поведение; нужна строгая теория |
| AWAC | In-sample policy с весами по advantage | Стохастическая политика; без OOD-запросов актора | Чувствительность к $\beta$; качество критика | Жёсткие latency / детерминизм |
| CQL | Пессимистичная Q для OOD | Непрерывное управление; default value-pessimism | Слишком консервативно; нестабильный Q / $\alpha$ | BC уже достаточен; награда слабо определена |
| IQL | Expectile V + AWR | In-sample обновления; без явного OOD max | $\tau$, $\beta$; мало хороших действий в данных | В логах нет действий лучше среднего поведения |
| Decision Transformer | Sequence modeling | Длинные горизонты; multi-task логи | Return conditioning вне support | Узкий одноPolicy датасет; жёсткие ограничения |
| MOPO / MOReL | Модель + штраф неопределённости | Богатые переходы; структура динамики помогает | Bias модели; ложная уверенность ансамблей | Динамика не учится; один узкий контроллер |
| FQE / DR (OPE) | Оценка без rollout | Сравнение кандидатов offline | Экстраполяция; слабое покрытие | Высокий риск deploy при расхождении OPE |
| Physics-informed | Структура + остатки | Есть инженерная модель | Структурное несоответствие модели | Нет надёжной физики / ограничений |
Source anchors (ключевые методы)
Формат: статья → предположение → failure mode → когда не использовать.
Behavioral Cloning (глава 1)
- Оригинал: Pomerleau (1989); Ross et al. (2011) DAgger
- Предположение: Состояния при deploy похожи на обучающие; поведение близко к цели
- Failure mode: Сдвиг распределения → накопление ошибки действий
- Когда не использовать: Нужно улучшение сверх залогированной политики
CQL (глава 4)
- Оригинал: Kumar et al. (2020) arXiv:2006.04779
- Код: code/cql.py (учебный)
- Предположение: Покрытие; настроенный conservative penalty; успешная оптимизация
- Failure mode: Пере-пессимизм; неверная OOD-калибровка Q
- Когда не использовать: BC достаточен; награда слабая или confounded
IQL (глава 5)
- Оригинал: Kostrikov et al. (2022) arXiv:2110.06169
- Код: code/iql.py (учебный)
- Предположение: В данных есть действия лучше среднего для advantage weighting
- Failure mode: Чувствительность expectile / $\beta$; мало хороших действий
- Когда не использовать: Только один узкий субоптимальный режим в логах
TD3+BC (глава 6)
- Оригинал: Fujimoto & Gu (2021) arXiv:2106.06860
- Код: code/td3bc.py (учебный)
- Предположение: Q и BC сопоставимы после batch $|Q|$ scaling
- Failure mode: Неверный $\lambda$; переоценка Q на OOD-действиях актора
- Когда не использовать: Сильно мультимодальное поведение
Decision Transformer (глава 7)
- Оригинал: Chen et al. (2021) arXiv:2106.01345
- Предположение: Разнообразие траекторий; return в пределах support
- Failure mode: Conditioning на return вне логов; хрупкость длинного контекста
- Когда не использовать: Маленький однородный датасет
MOPO / MOReL (глава 8)
- Оригинал: Yu et al. (2020); Kidambi et al. (2020)
- Предположение: Динамика учится в support; uncertainty коррелирует с ошибкой
- Failure mode: Exploitation модели; некалиброванные ансамбли OOD
- Когда не использовать: Нестационарный процесс; доминируют unmodeled confounders
OPE: FQE / DR (глава 3)
- Оригинал: Le et al. (2019); Jiang & Li (2016)
- Код: code/fqe.py (учебный)
- Предположение: Покрытие для целевой политики; $\hat Q \approx Q^\pi$ или верные веса
- Failure mode: OOD $(s,\pi(s))$; proxy по всем states $\neq J(\pi)$ от $s_0$
- Когда не использовать: Политика далеко от support; один estimator и высокий риск
Код в этом репозитории
Файлы в code/ — учебные скелеты на игрушечной среде, не benchmark-grade реализации.
Перед production:
- Согласуйте нормализацию state/reward между train и eval.
- FQE по всем states датасета — proxy, не истинный $J(\pi)$ без initial states.
- При расхождении доверяйте
code/*.py, а не embedded snippet в markdown. - После обновления зависимостей прогоняйте smoke tests.
Рекомендуемый порядок для практиков
- Главы 1–2 (BC + extrapolation error)
- Глава 3 (OPE), если deploy дорог
- BC → CQL или IQL → TD3+BC при необходимости лёгкого actor-critic
- Глава 8 при обучаемой модели динамики
- Главы 10–11 перед industrial rollout