Reptile: как OpenAI упростила мета-обучение до одной строки
Reptile — алгоритм мета-обучения от OpenAI, который учит модель быстро адаптироваться к новым задачам без второй производной. По качеству близок к MAML, но проще в реализации.

Что делает Reptile
Reptile — это алгоритм мета-обучения1, представленный OpenAI в 2018 году. Его задача — не научить сеть решать одну задачу, а научить её быстро адаптироваться к новым задачам, увидев всего несколько примеров. Классический пример: модель должна распознать новый класс изображений, имея на него 1–5 картинок (few-shot classification).
Идейный предок Reptile — MAML (Model-Agnostic Meta-Learning). MAML требует считать градиент по градиенту, то есть вторые производные, что усложняет код и увеличивает потребление памяти. Reptile обходится без этого. Он делает несколько шагов обычного SGD на конкретной задаче, а затем сдвигает исходные веса в сторону получившихся. И всё.
Алгоритм в трёх строках
На каждой итерации мета-обучения:
- Берём случайную задачу T и копируем текущие веса φ.
- Делаем k шагов SGD по задаче T, получая веса W.
- Обновляем: φ ← φ + ε (W − φ).
Разность (W − φ) работает как псевдоградиент направления, в котором стоит двигать начальную точку, чтобы из неё было легко дообучаться под любую задачу семейства. Это ключевая интуиция: Reptile ищет не решение задачи, а хорошую стартовую позицию.
Почему это не просто joint training
На первый взгляд шаг φ ← φ + ε (W − φ) напоминает обычное обучение на смеси задач. Но разница принципиальная и завязана на то, что k > 1.
Если сделать один шаг SGD (k = 1), Reptile действительно вырождается в минимизацию средней ошибки по задачам — то же самое, что обучать модель на всех данных сразу. Магия начинается, когда шагов несколько. Разложение в ряд Тейлора показывает, что при k ≥ 2 в обновлении появляется дополнительный член — произведение градиентов на разных минибатчах одной задачи. Именно он толкает веса туда, где градиенты по разным батчам согласованы, то есть где обобщение внутри задачи идёт легче.
Reptile не оптимизирует итоговое качество на задаче. Он оптимизирует лёгкость, с которой из стартовой точки до этого качества можно добраться.
Что даёт отказ от вторых производных
MAML нужно разворачивать граф вычислений через шаги адаптации и брать производную по нему. Reptile использует только результат адаптации — сами обновлённые веса. Отсюда практические следствия:
- реализация помещается в десяток строк поверх любого фреймворка;
- память не растёт с числом шагов адаптации, поскольку граф второго порядка не хранится;
- алгоритм совместим с любым оптимизатором внутреннего цикла — Adam, SGD с моментом и так далее.
Reptile против MAML и FOMAML
Есть три близких подхода. FOMAML (first-order MAML) — упрощение MAML, которое отбрасывает вторые производные, но всё ещё использует градиент только с последнего шага адаптации. Reptile идёт дальше и работает с полной траекторией весов.
| Свойство | MAML | FOMAML | Reptile |
|---|---|---|---|
| Вторые производные | да | нет | нет |
| Что используется для мета-шага | градиент через всю адаптацию | градиент последнего шага | разность весов до и после |
| Нужен разделённый support/query набор | да | да | нет |
| Сложность реализации | высокая | средняя | низкая |
По качеству на бенчмарках few-shot классификации (Omniglot, Mini-ImageNet) Reptile в оригинальной работе OpenAI показал результаты, сопоставимые с MAML и FOMAML. Точные числа по конкретным конфигурациям смотрите в исходной публикации — они зависят от числа классов, числа примеров на класс и архитектуры.
Псевдокод внешнего цикла
phi = init_weights()
for iteration in range(n_iterations):
task = sample_task()
W = phi.clone()
for step in range(k):
batch = task.sample_batch()
W = W - inner_lr * grad(loss(W, batch))
# мета-обновление: сдвигаем phi к адаптированным весам
phi = phi + eps * (W - phi)
Здесь eps — скорость мета-обучения (обычно её линейно снижают к нулю по ходу тренировки), inner_lr — шаг внутреннего SGD, k — число шагов адаптации. При батч-версии вместо одной задачи берут несколько, усредняя (W − φ) по ним.
Где Reptile уместен, а где нет
Reptile хорош, когда у вас есть распределение однотипных задач и вы хотите быстрый старт на новой. Классика — few-shot classification, но подход применяли и в обучении с подкреплением, и в регрессии.
Ограничения тоже реальны. Reptile не решает проблему, когда задачи слишком разнородны: если общей хорошей стартовой точки не существует, псевдоградиент будет тянуть веса в противоречивых направлениях. Кроме того, метод чувствителен к числу шагов k и к расписанию ε — это не те гиперпараметры, которые можно поставить наугад.
- Подходит: семейство близких задач, дефицит примеров на новую задачу, требование к простоте кода.
- Не подходит: сильно разнородные задачи, случаи, где вторые производные MAML дают заметный прирост, критичный для вашей метрики.
1 Мета-обучение (meta-learning, «обучение обучению») — подход, где модель тренируется не на одной задаче, а на распределении задач, чтобы приобрести способность быстро осваивать новую задачу из того же распределения по нескольким примерам.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: OpenAI — Reptile: A Scalable Meta-Learning Algorithm, Nichol, Achiam, Schulman — On First-Order Meta-Learning Algorithms (arXiv:1803.02999)
Частые вопросы
Чем Reptile принципиально отличается от MAML?
Почему Reptile с k=1 не работает как мета-обучение?
Нужен ли Reptile отдельный query-набор для оценки?
Как выбрать число шагов k и скорость мета-обучения eps?
На каких задачах Reptile проверяли авторы?
Можно ли использовать Adam во внутреннем цикле Reptile?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.