Модель отредактировала веса другой модели без обучения. Часть 2: почему петля рвётся, а навык не добавить. llm.. llm. mit.. llm. mit. qwen.. llm. mit. qwen. веса нейросети.. llm. mit. qwen. веса нейросети. интерпретируемость.. llm. mit. qwen. веса нейросети. интерпретируемость. искусственный интеллект.. llm. mit. qwen. веса нейросети. интерпретируемость. искусственный интеллект. математика.. llm. mit. qwen. веса нейросети. интерпретируемость. искусственный интеллект. математика. Машинное обучение.. llm. mit. qwen. веса нейросети. интерпретируемость. искусственный интеллект. математика. Машинное обучение. редактирование моделей.. llm. mit. qwen. веса нейросети. интерпретируемость. искусственный интеллект. математика. Машинное обучение. редактирование моделей. трансформеры.
Модель отредактировала веса другой модели без обучения. Часть 2: почему петля рвётся, а навык не добавить - 1

Обложка сгенерирована с помощью ИИ

Статья получилась большой, поэтому я разбил её на две части. Это часть 2 из 2. Первая часть — про сами эксперименты MIT, дифф отредактированной Qwen и математику проекции; здесь — динамика петель, пределы метода, родственные работы, устройство весов разных моделей и риски.

Коротко о первой части

  • В посте MIT CSAIL [1] модель GPT-6 Astra правила веса чужих сетей напрямую, без градиентов. Главный пример — Qwen3.5-0.8B, которая на олимпиадных задачах в 93 % случаев уходила в бесконечный повтор.

  • Я побитово сравнил базовый и опубликованный отредактированный чекпойнт: изменены 131 072 веса в down_proj двух слоёв (15 и 19), и правка имеет вид W'=(I - 6vv^top)W — ранг 1, 99.999 % энергии в одном направлении v.

  • Это не «вычитание» направления, а его разворот: компонента вдоль v становится -5 от исходной. Среди правок, которые так меняют одну ось, это минимальная по норме Фробениуса.

  • Почему это вообще работает: все слои пишут в общий residual stream, а MLP — это сумма столбцов down_proj, взвешенных активациями нейронов. Значит, повернув одну ось на выходе MLP, мы меняем то, что все последующие слои «читают» вдоль неё.

Метки те же: [Статья], [Доказано], [Мой замер], [Модель/интерпретация].


Часть 1. Почему разворот одного направления лечит зацикливание

1.1. От направления к решению «выйти из цикла»

[Модель] На каждом шаге модель выбирает между «продолжить петлю» и «сломать её» (закрыть </think>, написать ответ, сменить мысль). Выбор определяется разностью логитов двух токенов. Логиты — линейная функция финального состояния: Delta z=u^top x_L, где u — разность соответствующих строк выходной матрицы. По свойству суммы residual stream (первая часть, 3.1) вклады слоёв 15 и 19 входят в Delta z слагаемыми, пропорциональными langle u, vranglecdot v^top m_l. Если v работает как «продолжай» (langle u,vrangle<0), разворот знака у этих нейронов сдвигает Delta z в сторону выхода на каждом шаге, где они активны. Это допущение: u мы не измеряли, и следующие слои могут частично компенсировать сдвиг.

Если по-простому: где-то в конце модель «голосует», продолжать ли тот же кусок текста. Слои 15 и 19 раньше подбрасывали голос «за». После правки они голосуют «против», и чаша весов чаще перевешивает в сторону выхода.

1.2. Мой замер: на петле эти нейроны правда пишут в v сильнее

[Мой замер] Я прогнал обе модели на CPU на двух текстах. Первый — нормальное решение уравнения (220 токенов). Второй — искусственная петля «Wait, let me check again…» ×12 (397 токенов). Хуком снимал, сколько выход MLP пишет вдоль v (code/demo_probe.py):

среднее langle v, m_lrangle

норм. текст, L15

петля, L15

норм. текст, L19

петля, L19

база

0.273

0.385

0.280

0.520

правка

−0.816

−1.518

−0.014

−0.246

Проекция выхода MLP на v по токенам

Проекция выхода MLP на v по токенам

Рис. 1. langle v, mathrm{MLP}_l(x_t)rangle по позициям: база против правки на нормальном и зацикленном тексте.

На петле базовые MLP пишут в v сильнее: в 1.4 раза в слое 15 и в 1.9 раза в слое 19. После правки знак противоположный. Это всего два текста, то есть иллюстрация, а не статистика. Короткая генерация (400 токенов) за отведённое время до ответа не дошла ни у одной модели, поэтому выводов из неё я не делаю.

1.3. Геометрическая модель: (1−p)^T

[Модель] Пусть, попав в петлю, модель на каждом токене выходит из неё с маленькой вероятностью p. Тогда вероятность не выйти за T токенов — это T «неудач» подряд:

Pr[text{упереться в лимит}]=(1-p)^T,qquad mathbb E[text{длина петли}]=1/p .

Подставим цифры статьи (T=32,768). 93 % обрывов соответствуют p approx 2.2cdot10^{-6}, 33.1 % — papprox 3.4cdot10^{-5}. Шанс выхода на токен вырос примерно в 15 раз. Для маленьких p логит и логарифм почти совпадают, так что это сдвиг логита выхода всего на ln 15 approx 2.7. Это не измерение, а перевод цифр статьи на язык модели.

Если по-простому: если каждый шаг даёт крошечный шанс вырваться, то при 32 тысячах шагов вероятность так и не вырваться очень чувствительна к этому шансу. Увеличить его в 15 раз — немного в абсолютных числах, но доля «застрявших» ответов падает с 93 % до трети.

Геометрическая модель

Геометрическая модель

Рис. 2. (1-p)^T для T=8192 и 32,768; горизонтали — 93 %, 33.1 % и 8.5 % из статьи. Аналитическая кривая, не данные.

Константное p — грубое упрощение. Xu и др. [2] показали, что повторы самоусиливаются: чем больше раз фраза уже повторилась, тем вероятнее следующий повтор. Петля становится ловушкой, из которой с каждым шагом выбраться труднее; о той же дегенерации при жадном декодировании писали Holtzman и др. [3]. Я собрал игрушечную марковскую модель с таким самоусилением (code/loop_sim.py). Видно пороговое поведение: небольшой сдвиг логита переводит систему из режима «почти всегда застревает» в режим «почти никогда».

Игрушечная марковская модель

Игрушечная марковская модель

Рис. 3. Монте-Карло игрушечной модели (параметры произвольные, не подогнаны под данные): доля обрывов в зависимости от сдвига логита при разной силе самоусиления β.

[Интерпретация] 93 % против 8.5 %. У Qwen ловушка срабатывает почти всегда, и её ослабление сразу открывает решения, которые модель и так умела довести до конца. Самопроверка Astra это подтверждает: 576 из 579 «спасённых» задач — бывшие обрывы, а точность на ответах, которые и раньше доходили до конца, не изменилась [4]. У Gemma ловушки почти нет, так что сдвигать нечего.


Часть 2. Почему нельзя добавить навык, но можно добавить схему машинке

2.1. Проекция ничего не добавляет

[Доказано] Если правка — проектор P, то новое представление Px вычисляется из старого x. По неравенству обработки данных информации о правильном ответе Y в нём не больше, чем было: I(Y;Px) le I(Y;x). Размерность тоже не растёт (operatorname{rank}P=d-1).

Честная оговорка. Строгого запрета это не даёт. Во-первых, правка с alpha=6 обратима. Во-вторых, вся информация и так есть в промпте, а модели не хватает вычисления, а не информации. Корректная формализация — «usable information» с вычислительными ограничениями [5], и там обработка может делать информацию доступнее. Поэтому сильное утверждение у меня только на уровне модели [Интерпретация]: одна ось с одним масштабом может переключить режим («продолжать» / «выходить»), но не может вписать новый алгоритм, например корректную многозначную арифметику. У Gemma ошибки распределённые, единого узкого места нет, и это сходится с её провалом.

Если по-простому: выключатель может погасить мешающий шум, но не может научить. Qwen умела решать, просто не могла остановиться, и правка убрала помеху. Gemma ошибается в самих вычислениях, а «где выключатель у неумения считать», не существует.

2.2. Машинка: тут правка именно добавляет схему

[Доказано: явная конструкция] У машинки обратная ситуация: нужно добавить в политику кусок, которого не было. Его можно вписать вручную. Простейший «если — то» строится из двух ReLU: при a=(x_{text{порог}}-x_{text{колеса}})/varepsilon

g=mathrm{ReLU}(a) - mathrm{ReLU}(a-1) in [0, 1].

Гейт g равен 0 по одну сторону порога и 1 по другую. Затем к логитам добавляется Mcdot gcdot(text{вектор «назад»}) с большим M. Пока гейт открыт, побеждает новая команда, а когда закрыт, работает исходная сеть без изменений. Пять промежуточных tanh-слоёв сигнал гейта переносят: на малых значениях tanh почти тождество, на больших почти знак, и для сигнала «да/нет» годится и то, и другое. По словам авторов, Astra сделала именно отдельный путь через несколько юнитов в каждом слое.

[Моя оценка] Три юнита на слой — это примерно 680 весов на входном слое на юнит, около 256 на каждый внутренний и 16 на выход. Итого ≈ 5 900 весов, или ~3.4 % от 171 664. Это одного порядка с 3.5 % из поста; точный состав правки я не проверял.

Если по-простому: машинке нужно было одно новое правило — «сначала сдай назад, потом газ». Такое правило умещается в пару «если — то» и несколько тысяч чисел, и его можно вписать руками. Многошаговую арифметику так не впишешь: это не одно правило, а большая программа.


Часть 3. Родственники из литературы — коротко

ROME [6] — тоже правка ранга 1, но с противоположной целью. ROME записывает новый факт: ищет минимальное изменение MLP-матрицы, при котором ключ k_star («Эйфелева башня находится в…») отображается в новое значение v_star, а остальные ключи страдают минимально. Решение задачи наименьших квадратов с одним ограничением даёт формулу

hat W=W + frac{(v_star - Wk_star),(C^{-1}k_star)^top}{(C^{-1}k_star)^top k_star},

где C — ковариация «обычных» ключей. Числитель — «чего не хватает» для нового факта, знаменатель — нормировка, а C^{-1} направляет правку туда, где она меньше всего мешает старым ассоциациям. MEMIT [7] масштабирует то же на тысячи фактов. Обе работы добавляют ассоциации, а не алгоритмы, и это ещё одна иллюстрация к части 2.

Если по-простому: абляция говорит слою «никогда не пиши в эту сторону», ROME — «на этот конкретный вопрос отвечай вот так». Это два зеркальных хирургических приёма над одной и той же матрицей.

Направление отказа [8]. Arditi и др. ортогонализуют все матрицы, пишущие в поток, по формуле W - hat rhat r^top W. Правка Astra из 50 прогонов локальнее (2 матрицы, 64 столбца, alpha=6). Правка из 10 прогонов ближе к Arditi: 30 матриц, alpha=1.5.

Task arithmetic и слияние моделей. Вектор задачи tau=theta_{text{ft}}-theta_{text{pre}} можно прибавлять и вычитать [9]. Это работает, потому что дообученные модели из одной точки старта лежат в одной «долине» лосса (linear mode connectivity [10]). Развитие этой линии — model soups [11], TIES [12], DARE [13], Git Re-Basin [14]. Отличие от Astra: там правка получена обучением, здесь — рассуждением.

Суперпозиция. В d-мерном пространстве почти ортогональных направлений помещается гораздо больше, чем d: у случайных векторов косинус порядка 1/sqrt d (рис. 4). Сети этим пользуются и хранят больше признаков, чем измерений [15, 16]. Отсюда практическое следствие: «чистого» направления цикла может не быть, и разворот v слегка задевает сотни соседних признаков. Поэтому важен контроль Astra со случайным направлением той же нормы [4].

Косинусы случайных векторов

Косинусы случайных векторов

Рис. 4. Симуляция: косинусы между 2 000 случайных единичных векторов при d=64, 1024, 4096.


Часть 4. Как вообще устроены веса: Qwen, Gemma, Llama, MoE

Это справочная часть, ради которой полезно один раз посмотреть на реальные числа.

4.1. Где лежат параметры

[Мой замер] Я не стал считать по формулам, а прочитал заголовки safetensors всех шардов через HTTP Range-запросы (code/param_census.py). Это точные формы тензоров без скачивания самих весов. Gemma 3 и Llama у официальных репозиториев закрыты авторизацией, поэтому заголовки взяты из публичных зеркал unsloth/gemma-3-270m, unsloth/Llama-3.2-1B, NousResearch/Meta-Llama-3.1-8B. Конфиги в этих зеркалах соответствуют оригиналам, но побитовую идентичность весов я не проверял.

Модель

всего (хранится)

эмбеддинги/lm_head

внимание

MLP

Gemma 3 270M

0.268B

62.6 %

11.0 %

26.4 %

Qwen2.5-0.5B

0.494B

27.6 %

8.9 %

63.5 %

Qwen3-0.6B

0.752B*

41.4 %*

23.4 %

35.2 %

Qwen3.5-0.8B

0.873B

29.1 %

26.8 % (вкл. линейное)

30.3 % (+13.9 % vision/MTP)

Llama 3.2 1B

1.236B

21.3 %

13.6 %

65.2 %

Qwen3-8B

8.191B

15.2 %

18.4 %

66.4 %

Llama 3.1 8B

8.030B

13.1 %

16.7 %

70.2 %

Mixtral 8x7B

46.7B

0.6 %

2.9 %

96.6 % (эксперты)

Qwen3-30B-A3B

30.5B

2.0 %

3.0 %

95.0 % (эксперты)

DeepSeek-V3

684.5B**

0.4 %

1.7 % (MLA)

97.2 % routed + 0.4 % shared + 0.2 % dense

* В чекпойнте Qwen3-0.6B лежат и embed_tokens, и lm_head, хотя в конфиге tie_word_embeddings: true, поэтому эмбеддинги учтены дважды. ** Включая MTP-модуль. Без него получается 671B, как в техотчёте [17].

Доли параметров

Доли параметров

Рис. 5. Доля хранимых параметров по компонентам, по заголовкам safetensors.

Что видно из таблицы:

  • Gemma 3 270M — это наполовину словарь. 262,144times640=167.8 М параметров ушли на эмбеддинг, и на 18 слоёв трансформера остаётся около 100 М. Для правки «изнутри» это меньше «вычислительного мяса», а правки эмбеддингов в эксперименте были запрещены. [Интерпретация] Это ещё один довод в пользу того, что у Gemma просто нечего «разблокировать».

  • Qwen3.5-0.8B — гибрид. По layer_types из конфига каждый четвёртый слой — полное внимание (full_attention_interval: 4), остальные — linear_attention. В конфиге также стоят attn_output_gate: true, GQA 8 голов запроса на 2 KV-головы при head_dim 256, словарь 248 320 и tied-эмбеддинги. Блок MLP при этом классический SwiGLU 1024 → 3584 → 1024, поэтому выкладки первой части к нему применимы буквально.

  • Плотные модели среднего размера (Llama 3.1 8B: d=4096, 32 слоя, 32 Q-головы / 8 KV, FFN 14 336). Проверка: внимание на слой 2cdot4096^2+2cdot4096cdot1024=41.9 М, ×32 = 1 342 М; MLP 3cdot4096cdot14336=176.2 М, ×32 = 5 637 М. Оба числа точно совпадают с заголовками. Около 70 % весов — в MLP, то есть именно в «ключах и значениях» из первой части (3.2).

4.2. Как MoE меняет картину

В MoE вместо одного MLP стоит набор экспертов E_j и роутер:

mathrm{MoE}(x)=sum_{jinmathrm{TopK}(Rx)} pi_j(x),E_j(x)=sum_jpi_j(x)sum_i h^{(j)}_i(x),w^{(j)}_i .

Разложение 3.2 сохраняется, только коэффициенты теперь ещё и гейтятся роутером. По конфигам:

  • Mixtral: 8 экспертов, top-2 [18];

  • Qwen3-30B-A3B: 128 экспертов, 8 активных, moe_intermediate_size 768;

  • DeepSeek-V3: 256 routed + 1 shared эксперт, 8 активных, первые 3 слоя плотные, MLA-внимание с kv_lora_rank 512 [17].

[Интерпретация] Для «правок в пространстве весов» MoE двояк. С одной стороны, 97 % весов лежат в экспертах, и каждый эксперт видит только часть токенов, так что правка конкретного эксперта локальна по определению. С другой стороны, одно и то же направление в потоке пишут десятки экспертов. Чтобы убрать его из потока, придётся ортогонализовать всех: 256times 58 матриц down у DeepSeek-V3. Иначе роутер просто направит токен в нетронутого эксперта.

4.3. Как выглядят сами матрицы

Спектры down_proj

Спектры down_proj

Рис. 6. Сингулярные числа down_proj по всем слоям трёх моделей, от светлого к тёмному по глубине.

Эффективный ранг

Эффективный ранг

Рис. 7. Эффективный ранг exp(H(sigma^2/sumsigma^2)), нормированный на максимальный.

Нормы

Нормы

Рис. 8. Фробениусова норма down_proj по слоям.

[Мой замер] У Qwen3.5-0.8B эффективный ранг down_proj (1024×3584) составляет 690–854 из 1024 и имеет U-образный профиль с минимумом посередине (слои 9–13). У Qwen2.5-0.5B — 638–787 из 896, тоже с минимумом в середине. Матрицы далеки от низкорангового вида: модель использует почти всё пространство. Поэтому изменение ранга 1 на 64 столбцах — действительно точечная операция на фоне «плотной» матрицы: относительная фробениусова норма правки составила 10.6 % и 8.1 % от всей матрицы, но вся она сосредоточена в одном направлении из 1024. Нормы у Qwen3.5 почти постоянны по глубине (15–18). У Gemma они «пилообразные» (14–25), и максимумы приходятся на слои 0, 5, 12: 5 и 11 — слои с полным вниманием, а 0 и 12 — нет. Прямую связь я не утверждаю.

Распределения весов

Распределения весов

Рис. 9. Распределения весов Qwen3.5-0.8B (слой 15 и эмбеддинг), логарифмическая шкала плотности.

Распределения тяжёлохвостые. Эксцесс равен 4.7 у down_proj, 7.7 у gate_proj и 3.4 у эмбеддинга (у гауссианы 3). Максимум |w| в down_proj слоя 15 составляет 0.18 при σ = 0.0086, то есть около 21σ. Для правок это означает, что «посмотреть на большие веса» — плохая эвристика, и Astra её не использовала: отбор шёл по проекции на v, а не по величине (см. первую часть).


Часть 5. Ограничения, риски, открытые вопросы

Ограничения постановки. Это блог-пост, а не рецензированная статья. Модель Astra закрыта, и воспроизвести процесс поиска правки снаружи нельзя. Воспроизводима только сама правка, и её независимо перепроверили [19]. Три бюджета прогонов дали три разные правки с очень разным эффектом (12.3 / 14.1 / 48.1). Вывод: один удачный запуск — это ещё не надёжный метод. Авторы сами пишут, что строят бенчмарк и harness.

Модель, правящая себя. Авторы прямо называют рекурсивное самоулучшение одним из направлений. С формальной точки зрения правка весов — это действие с последствиями для всех будущих входов (см. 4.2: она не зависит от промпта). В отличие от промпта, её нельзя «откатить контекстом». Значит, нужен по крайней мере тот же уровень контроля, что и для обучения: фиксированные eval-сеты, контроль регрессий, ревью диффа.

Аудируемость. Есть и хорошая новость: правка ранга 1 читается лучше любого файнтюна. Диф из двух тензоров, SVD показывает одно направление, а манифест содержит sha256 до и после. Хорошо, что авторы сделали публикацию побитового диффа нормой. [Интерпретация] Плохая новость: правку той же нормы, но «размазанную» на много направлений, найти по весам существенно труднее. Аргумент суперпозиции (7.4) работает и против аудитора.

Цепочка поставок весов. Чекпойнт — это исполняемая логика, а не данные. Подмена 0.016 % весов может заметно поменять поведение, и метрики на стандартных бенчмарках эту подмену могут не выявить: на практике это сводится к контролю происхождения (хэши, подписи, воспроизводимые сборки). Обратная сторона статьи — тезис авторов, что LLM, читающая веса, могла бы искать такие вмешательства («auditing without evaluation»). В посте это заявлено как перспектива, а не результат: в эксперименте 7 по одним только весам сикофантскую модель отличить не удалось, удалось только с паттернами внимания.

Открытые вопросы (вам, читателям):

  1. Почему alphaapprox6, а не 1? Абляция (alpha=1) не хватает, потому что остальные слои тоже пишут в v? Или нужен активный сигнал «выходи из цикла»? Это проверяется дёшево: сравнить alphain{1,2,4,6} на 100 задачах с лимитом токенов.

  2. Можно ли найти то же направление без LLM, классическим diff-in-means между «зацикленными» и «продуктивными» контекстами, как у Arditi и др.? Если да, то что именно добавляет «рассуждение» Astra?

  3. Где граница между «снять препятствие» и «добавить навык»? Машинка показывает, что вписать вручную можно то, что описывается коротко. Есть ли для LLM навыки с короткой схемой, которых у модели нет?

  4. Как такие правки ведут себя при квантизации? В bf16 уже 884 из 131 072 изменений округлились в ноль. Что останется в int4?


Код и воспроизведение

Все скрипты лежат в code/ и работают на CPU (8 ядер, 15 ГБ RAM):

  • analyze_edit.py — дифф базовой и отредактированной Qwen3.5-0.8B, SVD правки, подгонка alpha;

  • param_census.py — подсчёт параметров по заголовкам safetensors;

  • charts.py — рисунки первой части и рис. 2, 4–9 этой части (спектры, нормы, гистограммы, аналитическая кривая, симуляция косинусов);

  • demo_probe.py — зонд langle v, m_lrangle (рис. 1) и короткая генерация;

  • loop_sim.py — игрушечная марковская модель (рис. 3).

Ключевая часть зонда:

for L in (15, 19):
    lm.layers[L].mlp.register_forward_hook(
        lambda mod, i, o, L=L: rec.__setitem__(L, (o[0] @ v[L]).detach()))
with torch.no_grad():
    model(tok(text, return_tensors='pt').input_ids)

Источники

  1. Takehi R., Teoh J., Zhang A., Khattab O. Sparks of Weight-Space Programming: LLMs can natively read & write neural network weights. MIT CSAIL, 2 Nov 2026. https://rikiyat.github.io/blog/weight-space-programming/

  2. Xu J. et al. Learning to Break the Loop: Analyzing and Mitigating Repetitions for Neural Text Generation. https://arxiv.org/abs/2206.02369

  3. Holtzman A. et al. The Curious Case of Neural Text Degeneration. https://arxiv.org/abs/1904.09751

  4. Логи экспериментов: https://github.com/RikiyaT/lm_understand-logs (каталог exp8_math/)

  5. Xu Y. et al. A Theory of Usable Information Under Computational Constraints. https://arxiv.org/abs/2002.10689

  6. Meng K. et al. Locating and Editing Factual Associations in GPT (ROME). https://arxiv.org/abs/2202.05262

  7. Meng K. et al. Mass-Editing Memory in a Transformer (MEMIT). https://arxiv.org/abs/2210.07229

  8. Arditi A. et al. Refusal in Language Models Is Mediated by a Single Direction. https://arxiv.org/abs/2406.11717

  9. Ilharco G. et al. Editing Models with Task Arithmetic. https://arxiv.org/abs/2212.04089

  10. Frankle J. et al. Linear Mode Connectivity and the Lottery Ticket Hypothesis. https://arxiv.org/abs/1912.05671

  11. Wortsman M. et al. Model soups. https://arxiv.org/abs/2203.05482

  12. Yadav P. et al. TIES-Merging: Resolving Interference When Merging Models. https://arxiv.org/abs/2306.01708

  13. Yu L. et al. Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch (DARE). https://arxiv.org/abs/2311.03099

  14. Ainsworth S. et al. Git Re-Basin: Merging Models modulo Permutation Symmetries. https://arxiv.org/abs/2209.04836

  15. Elhage N. et al. Toy Models of Superposition. https://arxiv.org/abs/2209.10652

  16. Cunningham H. et al. Sparse Autoencoders Find Highly Interpretable Features in Language Models. https://arxiv.org/abs/2309.08600

  17. DeepSeek-AI. DeepSeek-V3 Technical Report. https://arxiv.org/abs/2412.19437

  18. Jiang A. Q. et al. Mixtral of Experts. https://arxiv.org/abs/2401.04088

  19. Отредактированный чекпойнт и независимая перепроверка: https://huggingface.co/RikiyaT/Qwen3.5-0.8B-weight-space-programming

Автор: maxim_lomakin

Источник