Propagate: обучение LLM без backpropagation эволюционными стратегиями | AiManual
AiManual Logo Ai / Manual.
04 Янв 2026 Инструмент

Propagate: когда backpropagation устарел, а эволюция - новый king

Обзор Propagate - инструмента для обучения языковых моделей без обратного распространения. Эволюционные стратегии, ускорение тренировки, сравнение с LoRA и GRPO

Backpropagation умер? Да здравствует эволюция

Ты тренировал нейросеть. Ты знаешь это чувство: запускаешь обратное распространение, ждешь вечность, видишь как VRAM улетает в небеса. А потом появляется Propagate и говорит: "А давайте вообще забудем про backpropagation". Звучит как ересь. Но работает.

💡
Propagate - это open-source инструмент от исследователей, которые устали ждать, пока градиенты дойдут до всех слоев. Они заменили backpropagation эволюционными стратегиями. Результат? Обучение ускоряется в разы, а VRAM почти не используется.

Как это работает (или не работает по-старому)

Забудь про цепочки градиентов. В Propagate все проще:

  1. Берешь веса модели
  2. Создаешь 30 разных "возмущений" (немного меняешь веса в случайных направлениях)
  3. Каждую измененную версию прогоняешь через данные
  4. Смотришь, какая работает лучше
  5. Берешь лучшую, повторяешь

Это как естественный отбор для нейросетей. Нет сложных вычислений производных. Нет проблем с исчезающими градиентами. Просто пробуешь разные варианты и оставляешь лучший.

1 Почему это не безумие

В теории звучит как бред: зачем делать 30 проходов вместо одного? А на практике оказывается, что каждый проход проще и быстрее. Backpropagation требует хранить промежуточные значения для каждого слоя. Propagate - нет. Ты просто делаешь forward pass несколько раз с разными весами.

# Вот как выглядит базовое использование Propagate
import propagate
from propagate.models import LLaMAForCausalLM
from propagate.training import EvolutionTrainer

model = LLaMAForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B")
trainer = EvolutionTrainer(
    model=model,
    perturbations=30,  # Те самые 30 возмущений
    perturbation_scale=0.01,  # Насколько сильно меняем веса
    learning_rate=0.001
)

# Обучаем как обычно, но без backprop!
trainer.train(
    dataset=your_dataset,
    epochs=10,
    batch_size=32
)

Чем Propagate отличается от LoRA и GRPO

Все слышали про LoRA и GRPO. Это методы тонкой настройки. Propagate - это не тонкая настройка. Это полноценное обучение с нуля или дообучение, но другим способом.

Метод Как работает Память Скорость
Backpropagation Цепочка градиентов через все слои Высокая Медленная
LoRA Добавляет малые адаптеры, обучает только их Низкая Быстрая
Propagate Эволюционные стратегии без градиентов Очень низкая Очень быстрая

GRPO (Group Relative Policy Optimization) - это вообще из другой оперы. Там про reinforcement learning для alignment. Propagate же работает на уровне базового обучения модели, не только для выравнивания.

"Мыслительные" модели и где они обитают

В статье про Dark CoT мы говорили о том, как научить модель "думать". Propagate решает другую проблему: как сделать так, чтобы эта "думающая" модель обучалась быстрее.

Представь: ты хочешь создать модель, которая решает математические задачи как в Grokkit, но у тебя нет кластера из 1000 GPU. Propagate позволяет тренировать такие "мыслящие" модели на обычном железе.

Важный момент: Propagate особенно хорошо работает с задачами, где нужно "рассуждать". Не просто предсказывать следующее слово, а именно думать. Потому что эволюционные стратегии лучше находят глобальные оптимумы, а не застревают в локальных.

2 Реальный пример: обучение модели для pass@k

Pass@k - это метрика, которая показывает, сколько из k попыток решения задачи успешны. В SWE-Bench она критически важна. С Propagate можно тренировать модели специально для этой метрики:

# Обучение модели для максимизации pass@k
from propagate.metrics import PassAtKMetric
from propagate.training import EvolutionTrainer

# Создаем метрику, которая оценивает не точность,
# а именно успешность решения задач за k попыток
metric = PassAtKMetric(k=5)

trainer = EvolutionTrainer(
    model=model,
    metric=metric,  # Используем pass@k как целевую функцию
    perturbations=20,
    # Эволюционные стратегии ищут веса,
    # которые максимизируют именно эту метрику
)

# Теперь модель учится не "правильно предсказывать",
# а "решать задачи за несколько попыток"
trainer.train(dataset=code_dataset)

Где Propagate врет (или не договаривает)

Нет серебряной пули. Эволюционные стратегии хороши не для всех задач:

  • Для больших моделей все еще нужны огромные ресурсы. Propagate экономит память, но не избавляет от необходимости иметь много GPU для тренировки Llama 3 70B.
  • Точность иногда ниже, чем у backpropagation. Особенно на маленьких датасетах.
  • Сходимость может быть медленнее в начале обучения. Зато потом выстреливает.

И да, если ты думаешь, что Propagate решит все проблемы из статьи про чистые AI-модели для науки - нет, не решит. Но поможет тренировать их быстрее.

Кому подойдет Propagate (а кому нет)

Бери Propagate, если:

  • У тебя мало VRAM, но много CPU. Эволюционные стратегии легко распараллеливаются.
  • Ты тренируешь модель для сложных reasoning задач, как в KEF vs OpenAI o3.
  • Тебе нужно быстро протестировать архитектуру модели без долгой тренировки.
  • Ты работаешь с задачами, где backpropagation плохо работает (исчезающие градиенты и все такое).

Не бери Propagate, если:

  • Тебе нужна максимальная точность на ImageNet или других классических бенчмарках.
  • У тебя есть доступ к кластеру из 1000 H100 и тебя не волнует эффективность.
  • Ты тренируешь диффузионные модели - там свой зоопарк проблем.

3 Как начать использовать (практический гайд)

Установка проще некуда:

pip install propagate-ai

Базовый пример тренировки модели на датасете с кодом:

import torch
from datasets import load_dataset
from propagate.models import AutoModelForCausalLM
from propagate.training import EvolutionTrainer

# Загружаем модель
model = AutoModelForCausalLM.from_pretrained("codellama/CodeLlama-7b-hf")

# Загружаем датасет с кодом
dataset = load_dataset("bigcode/the-stack", split="train[:1000]")

def preprocess_function(examples):
    # Твоя предобработка здесь
    return {"text": examples["content"]}

dataset = dataset.map(preprocess_function, batched=True)

# Создаем тренер
trainer = EvolutionTrainer(
    model=model,
    train_dataset=dataset,
    eval_dataset=dataset.select(range(100)),
    perturbations=30,  # Магическое число из статьи
    perturbation_scale=0.01,
    learning_rate=0.001,
    num_train_epochs=3,
    per_device_train_batch_size=4,
    per_device_eval_batch_size=4,
    logging_steps=10,
    save_steps=100,
    evaluation_strategy="steps",
    load_best_model_at_end=True,
)

# Обучаем!
trainer.train()

# Сохраняем модель
trainer.save_model("./my-trained-model")

Что дальше? Будущее без backpropagation

Propagate - не первый инструмент, который пытается убить backpropagation. Но он один из немногих, который делает это практично, а не в исследовательских бумагах.

Что будет через год? Возможно, мы увидим гибридные подходы. Как в обратной инженерии правил "Жизни", где комбинируют разные методы.

Мой прогноз: backpropagation не умрет. Но для определенных задач - reasoning, кодогенерация, математика - эволюционные стратегии займут свою нишу. Особенно когда нужно тренировать модели на ограниченном железе, как в SAM-Audio без боли.

Попробуй Propagate на своей задаче. Если ты тренируешь модели для шахмат как Chess GPT или для научных расчетов - он может ускорить процесс в разы. Если нет - хотя бы поймешь, почему backpropagation все еще king.

И последнее: не верь статьям на arXiv слепо. Скачай код, запусти на своих данных. Только так поймешь, работает ли это для тебя. Propagate - не панацея. Но это свежий взгляд на проблему, которая всех достала.