Если ты хоть немного интересовался тем, как устроено глубокое обучение, тебе наверняка внушали базовую аксиому: веса нейросети — это непроницаемый «черный ящик». Миллионы или миллиарды чисел с плавающей точкой в матрицах синапсов распределены по слоям настолько хаотично и нелинейно, что человек не может просто так открыть файл весов и исправить конкретную ошибку.
Веса всегда считались артефактом сугубо для записи (write-only). Их получают в процессе многодневных вычислений на кластерах видеокарт с помощью стохастического градиентного спуска (SGD, Adam) через миллиарды шагов обратного распространения ошибки. Если модель начинает галлюцинировать, зацикливаться или грубить, единственный общепринятый путь — собирать свежий датасет примеров и запускать долгий и дорогой fine-tuning (LoRA, DPO или RLHF). А потом молиться, чтобы от нового обучения сеть не забыла половину прежних навыков.
Но научная группа из MIT CSAIL во главе с Рикией Такахаси, Джейденом Теохом, Алексом Чжаном и Омаром Хаттабом буквально перевернула эти представления с ног на голову. В своей работе «Sparks of Weight-Space Programming: LLMs can natively read & write neural network weights» они экспериментально доказали: современные большие языковые модели способны напрямую читать сырые массивы весов других нейросетей как структурированный программный код и точечно переписывать их параметры за считаные секунды без всякого градиентного спуска.
Чтение весов без подсказок: как модель понимает чужие синапсы
Первый этап эксперимента Такахаси выглядел почти как фокус. Исследователи брали небольшие специализированные нейросети — многослойные перцептроны (MLP), сверточные блоки и компактные трансформеры — и выгружали их матрицы весов в виде сырых массивов чисел с плавающей точкой. Никаких текстовых подсказок, названий переменных или меток архитектуры модели-редактору не давали.
Эти голые числовые матрицы скармливали во входной контекст передовым флагманам: GPT-6 Astra, Claude Opus 5.5 и Gemini 4. И модели без труда справлялись с задачей! Опираясь на внутреннее понимание алгебраических структур и механистической интерпретируемости, LLM безошибочно определяла:
- точное целевое назначение сети (например, балансировка тележки CartPole, управление агентом в лабиринте или расчет движения частиц);
- скрытые структурные дефекты архитектуры и аномальные сингулярные значения;
- конкретные группы нейронов и каналы, отвечающие за проблемные поведенческие паттерны.
Матрицы параметров перестали быть абстрактным шумом. Для рассуждающей языковой модели они выглядят так же естественно, как ассемблерный листинг или дизассемблированный байткод для опытного реверс-инженера. Ранее мы подробно обсуждали, как локальные архитектуры работают со сжатыми представлениями параметров, в разборе Google Gemma 4: открытые локальные веса с контекстом 256K и поддержкой функций.
Хирургия параметров: лечение бесконечного цикла за 45 секунд
Понимание назначения сети — это впечатляющий результат, но настоящая революция началась на этапе записи весов (writing and surgical editing).
Исследователи взяли реальный открытый чекпоинт компактной рассуждающей модели Qwen3.5-0.8B. У этой сетки была хорошо задокументированная родовая травма: при решении нестандартных олимпиадных задач по математике цепочка рассуждений (Chain-of-Thought) срывалась в бесконечный зацикленный бред, повторяя одни и те же фразы сотни раз до исчерпания лимита токенов.
В классическом подходе инженерам пришлось бы готовить синтетический датасет с «правильными» рассуждениями и тратить часы аренды серверных мощностей на дообучение. Исследователи пошли другим путем: они передали матрицы проекций внимания проблемных слоев модели GPT-6 Astra через подход Weight-Space Programming (WSP).
Флагман проанализировал спектральные характеристики весов внимания, вычислил деградировавшие ранги и вернул спецификацию точечного аддитивного патча. Внимание на цифры: изменению подверглось ровно 0,016% от общего числа параметров модели! Вся процедура анализа и генерации патча заняла ровно один контекстный прогон за 45 секунд.
Результат превзошел ожидания:
- Зацикливание рассуждений в цепочке CoT полностью исчезло.
- В бенчмарках математической логики MATH-500 и GSM8K точность решений выросла на статистически значимую величину.
- Базовые языковые способности модели не пострадали — явление катастрофического забывания (catastrophic forgetting), от которого страдают почти все методы fine-tuning, здесь отсутствовало начисто.
Как устроен механизм: от токенизации до прямого синтеза сетей
Давай разберем техническую изнанку метода. Чтобы языковая модель могла взаимодействовать с тензорами, числа с плавающей точкой форматируются в структурированные векторы, сгруппированные по функциональным ролям (Query, Key, Value и слои прямой связи FFN).
Вот упрощенный пример того, как строится пайплайн инспекции и расчета спектрального дельта-патча на PyTorch:
import torch
from typing import Dict, Any, Tuple
class WeightSpaceInspector:
def __init__(self, target_layer_weights: torch.Tensor):
# Тензор весов проекции внимания (in_features, out_features)
self.weights = target_layer_weights.float()
def extract_spectral_profile(self) -> Dict[str, Any]:
# Сингулярное разложение (SVD) для выявления деградировавших рангов
U, S, V = torch.linalg.svd(self.weights, full_matrices=False)
return {
"top_singular_values": S[:8].tolist(),
"tail_energy_ratio": (S[16:].sum() / S.sum()).item(),
"mean_magnitude": self.weights.abs().mean().item(),
"sparsity": (self.weights == 0).float().mean().item()
}
def apply_surgical_delta(self, edit_manifest: Dict[str, Any]) -> torch.Tensor:
# Создаем нулевую маску дельта-возмущений
delta_matrix = torch.zeros_like(self.weights)
for update in edit_manifest.get("sparse_edits", []):
row, col, delta = update["r"], update["c"], update["delta"]
delta_matrix[row, col] += delta
# Прямое аддитивное обновление весов без обратного распространения ошибки
return self.weights + delta_matrix
А вот как выглядит практический сценарий, в котором LLM получает спектральный профиль слоя и формирует точечный патч для устранения зацикливания:
def run_weight_surgery_demo():
# Симулируем матрицу весов внимания размером 1024x1024 с аномальным рангом
raw_weights = torch.randn(1024, 1024) * 0.02
inspector = WeightSpaceInspector(raw_weights)
profile = inspector.extract_spectral_profile()
print(f"Спектральный анализ завершен. Доля хвостовой энергии: {profile['tail_energy_ratio']:.4f}")
# Эмуляция ответа frontier-модели: точечная коррекция 0.016% параметров
simulated_patch_spec = {
"target_component": "self_attn.q_proj",
"sparse_edits": [
{"r": 142, "c": 310, "delta": -0.0452},
{"r": 142, "c": 311, "delta": 0.0381},
{"r": 890, "c": 12, "delta": -0.0195}
]
}
healed_weights = inspector.apply_surgical_delta(simulated_patch_spec)
diff_norm = torch.norm(healed_weights - raw_weights).item()
print(f"Патч успешно применен. Норма изменений тензора: {diff_norm:.6f}")
if __name__ == "__main__":
run_weight_surgery_demo()
Более того, авторы проверили и обратную задачу: компиляцию нейросетей «с нуля» (compilation from scratch). Исследователи давали языковой модели текстовое описание физических законов движения частиц или правил простой логической игры. И LLM генерировала готовый тензор весов полносвязного перцептрона, который сразу решал поставленную задачу без единой эпохи тренировки!
Ограничения метода и скрытые риски
Звучит как магия, но давай сохранять трезвость исследователя. У прямого программирования весов есть фундаментальные ограничения, которые пока не позволяют отправить датасеты и GPU-кластеры на свалку истории.
Во-первых, контекстное окно. Даже гигантские окна в 1–2 миллиона токенов вмещают плотные матрицы параметров объемом до 5–10 миллионов чисел. Загрузить во входной промпт целиком модель класса 70B или 405B сегодня физически невозможно. WSP требует предварительной локализации больного места: инженеры должны сначала выяснить, какой конкретно слой и блок проекций дает сбой, и только затем отправлять его срез на операционный стол.
Во-вторых, нелинейность глубоких сетей. Изменение даже десятка синапсов на пятом слое может непредсказуемо аукнуться на семидесятом при специфическом распределении входных данных. Доказать строгую математическую стабильность таких патчей еще только предстоит.
Но самый тревожный аспект — информационная безопасность. Если языковая модель способна незаметно менять веса чужой сети без обучения, злоумышленники получают инструмент для создания идеальных «спящих закладок» (sleeper agents). Внедрить скрытый бэкдор прямо в бинарный файл чекпоинта, не оставив ни следа в обучающих выборках и логах, становится вопросом одного грамотного промпта. И эту новую реальность индустрии ИИ придется учитывать уже сегодня.
