Изоляция весов трансформеров: решение catastrophic forgetting с открытым кодом | AiManual
AiManual Logo Ai / Manual.
28 Июн 2026 Инструмент

Catastrophic forgetting больше не проблема: изоляция весов трансформеров с открытым кодом

Новый метод изоляции весов решает 30-летнюю проблему забывания в continual learning. Код на GitHub, точность 79% на 50 задачах. Обзор инструмента Paradigm-Swarm

Реклама
partv2

Тридцать лет. Именно столько исследователи бились над catastrophic forgetting — проклятием любой нейронной сети, которая после обучения на новой задаче безвозвратно теряет старые навыки. До недавнего времени приходилось выбирать: либо хранить гигабайты данных для replay, либо жертвовать точностью ради пластичности. Но в середине 2025 года группа разработчиков выложила в открытый доступ Paradigm-Swarm — библиотеку, реализующую изоляцию весов для трансформеров. Результат на тесте CIFAR-100 с ResNet-18 — 79% accuracy после последовательного обучения на 50 задачах. Без единого примера из прошлого. Звучит как магия? Давайте разберемся, как это работает и почему это ломает старые правила.

Изоляция весов: никакого компромисса

Классические подходы (EWC, SI, memory replay) пытаются найти золотую середину между старым и новым. Они штрафуют изменение важных весов или подмешивают старые данные в батч. Это работает, но плохо масштабируется: чем больше задач, тем сильнее падает точность, или растет объем памяти. Изоляция весов предлагает радикально иное решение — физически разделить параметры модели под каждую задачу.

В Paradigm-Swarm используется техника task-specific masks. При обучении на новой задаче сеть выбирает подмножество существующих нейронов (или создает новые) и закрепляет их за этой задачей. Веса предыдущих задач замораживаются — они буквально неприкосновенны для градиентов. В результате сеть напоминает коммутатор: входные данные перенаправляются в нужную подсеть, а остальные остаются нетронутыми.

Важный нюанс: в отличие от Progressive Neural Networks (которые добавляют целые слои), Paradigm-Swarm работает на уровне отдельных весов, что экономит ресурсы. Для трансформеров это особенно актуально — вместо дублирования гигантских attention-блоков модель точечно выделяет под каждый паттерн свои QKV-проекции.

Внутренняя кухня: при инициализации каждой новой задачи модель запускает быстрый forward pass, определяет нейроны с низкой загрузкой (или самые «уверенные» для данной задачи) и маркирует их маской. Градиенты обновляют только свободные веса. Порог свободности — гиперпараметр, который по умолчанию равен 0.3. На практике это означает, что около 30% весов в каждом слое остаются незакрепленными и могут быть использованы следующей задачей.

Парадокс точности: эксперимент на 50 задачах

Разработчики Paradigm-Swarm выбрали жесткий бенчмарк: ResNet-18, адаптированный под CIFAR-100 (50 классов), разбитый на 50 задач по 2 класса каждая. Обучали последовательно: задача 1 (классы 0-1), затем задача 2 (классы 2-3) и так далее. Без доступа к предыдущим данным. Для чистоты эксперимента каждый запуск повторяли 5 раз с разными разбивками.

Метод Точность после 50 задач Дополнительная память на задачу
EWC (Elastic Weight Consolidation) 42% ~10 MB (матрица Фишера)
Experience Replay (буфер 5000 примеров) 61% ~30 MB (изображения+метки)
Progressive Neural Networks (дублирование слоев) 73% ~200 MB (новые слои)
Paradigm-Swarm (изоляция весов) 79% ~5 MB (маски и смещения)

Цифры говорят сами за себя: 79% — это почти вровень с моделью, обученной на всех данных сразу (80-82% на полном CIFAR-100). При этом накладные расходы минимальны. Единственный минус — точность на первой задаче чуть ниже (около 72%), так как модель на старте не знает, какие весы закреплять. Но уже со второй задачи механизм адаптируется.

Как попробовать самому: быстрый старт с Paradigm-Swarm

Библиотека написана на PyTorch 2.5+ и устанавливается одной командой:

pip install paradigm-swarm

Допустим, вы хотите обучить трансформер (например, mini-BERT) на последовательности из трех текстовых задач: классификация тональности, определение спама, распознавание сущностей. Код будет выглядеть так:

import torch
from paradigm_swarm import SwarmModel, TaskRouter

# Инициализируем базовый трансформер (загружаем предобученный mini-BERT)
base_model = torch.hub.load('huggingface/pytorch-transformers', 'model', 'google/bert_uncased_L-4_H-256_A-4')
model = SwarmModel(base_model, mask_threshold=0.3)

# Определяем задачи
tasks = [
    TaskRouter('sentiment', num_classes=2),
    TaskRouter('spam', num_classes=2),
    TaskRouter('ner', num_classes=9)
]

# Обучаем последовательно
for task in tasks:
    train_loader = load_data(task.name)  # ваша функция загрузки
    model.fit(task, train_loader, epochs=5, lr=2e-5)
    print(f"{task.name} accuracy: {model.evaluate(task, test_loader)}")

# Инференс на любой задаче
model.switch('ner')
outputs = model(texts)

Под капотом SwarmModel перехватывает градиенты и автоматически расставляет маски. После обучения каждой задачи веса закрепляются — их можно сохранить отдельно или в составе модели. При переключении на новую задачу модель не тратит время на загрузку старых весов (они уже в RAM), просто меняется маска активных нейронов.

💡
Если вы используете RTX 4090 с 48 ГБ (апгрейд от Northridge Fix), то можете смело затюнить Paradigm-Swarm под 100+ задач — изоляция весов расходует дополнительно всего 10-15% памяти по сравнению с обычным обучением. Подробности железного тюнинга в статье RTX 4090 48GB: Хардверный хак от Northridge Fix, который NVIDIA скрывает.

Подводные камни: кому Paradigm-Swarm не подойдет

Библиотека не панацея. Первое: она требует, чтобы все задачи были известны заранее или появлялись последовательно, но без смены распределения на лету. Если в середине обучения внезапно меняется входной формат (например, с изображений на текст), механизм масок ломается — приходится дообучать классификатор с нуля для нового домена. Второе: при сильном перекрытии задач (например, две почти одинаковые классификации текста) изоляция весов приводит к дублированию, что снижает эффективность. Наконец, для сверхбольших моделей (70B+ параметров) маски становятся слишком разряженными, и точность падает до 70-72% на 10 задачах — авторы работают над улучшением.

Если ваша задача — детерминированный вывод без обучения (вроде трансформера как программируемого компьютера), изоляция весов избыточна. В таких случаях лучше обратить внимание на трансформер как программируемый компьютер — там нет проблемы забывания, потому что обучение вообще не нужно.

Почему это сломает рынок continual learning

До сих пор индустрия шла по пути реплея: хранить данные, дообучать на смешанных батчах — это дорого и неэтично (GDPR, удаление пользовательских данных). Изоляция весов позволяет забыть о хранении примеров. Компании вроде тех, кто использует облачные модели с риском утечки кода, могут спокойно обучать модель на локальных данных, не опасаясь, что она перезапишет конфиденциальные паттерны.

Кроме того, Paradigm-Swarm открывает путь к lifelong learning для роботов, дронов и IoT-устройств, где веса хранятся на борту и обновляются без доступа к серверу. Правда, тут есть подвох: метод работает только если вы уверены, что задачи не антагонистичны друг другу. Если задача А требует выделения «красных пикселей», а задача Б — «зеленых», маски могут конфликтовать. Авторы решают это через динамическое расширение архитектуры, но код пока в бета-версии.

Важно: Paradigm-Swarm пока не поддерживает автоматическое определение момента появления новой задачи. Придется указывать границы вручную — либо по явному сигналу, либо через детектор сдвига распределения. В следующем релизе планируют встроить адаптивный порог на основе Kullback-Leibler дивергенции.

Сравнение с другими open-source методами

На рынке есть несколько проектов, решающих ту же проблему, но с другими компромиссами:

  • Avalanche (ContinualAI) — фреймворк для Continual Learning, поддерживает EWC, replay, SI. Больше для экспериментов, чем для продакшена. Не дает прироста точности свыше 40 задач.
  • L2T (Learn to Transfer) — мета-обучение с разделением весов через task-embeddings. Точность выше (75% на 50 задачах CIFAR-100), но требует предобученного графа задач и двухфазного обучения.
  • PackNet — итеративное сжатие сетей с масками после каждой задачи. Хорош для небольших моделей, но на трансформерах теряет 15-20% точности из-за необходимости повторно обучать часть весов после pruning.
  • CODA — метод оптимизации через GEMM-эпилог, который косвенно уменьшает забывание за счет стабильной матричной факторизации (см. обзор CODA). Однако CODA не решает catastrophic forgetting напрямую — это просто техника ускорения.

Paradigm-Swarm выигрывает за счет чистоты подхода: изоляция весов без внешних данных, без дублирования слоев, с минимальным ростом памяти. И главное — код полностью открыт, без зависимостей от проприетарных фреймворков.

Куда копать дальше?

Сейчас команда работает над гибридной версией для state-space моделей — это связано с недавними исследованиями устойчивости архитектур к adversarial атакам (см. сравнение трансформеров и SSM). Если изоляция весов будет адаптирована для SSM, то catastrophic forgetting могут забыть раз и навсегда.

Мой совет: не ждите идеала. Загрузите Paradigm-Swarm уже сегодня, попробуйте на своей задаче (пусть небольшой) и замерьте прирост. Вероятно, вы будете неприятно удивлены, как много задач можно обучить без единого реплея. А если наткнетесь на баг — контрибьютьте в репозиторий. Это тот случай, когда открытый код делает нас всех чуточку умнее.

Подписаться на канал