Recoverable but not stationary: линейные структуры в весах и активациях

17 июня 2026 г.

У нас с моим давним другом и соавтором Ириной Пионтковской недавно вышла статья “Recoverable but Not Stationary: Local Linear Structures in Weights and Activations“; пока в виде препринта, но, глядишь, и засунем куда-нибудь со временем.

Она про геометрию того, что происходит с нейросетью, когда мы её дообучаем, — и про то, почему так много разных способов “редактировать” уже обученную модель оказываются по сути линейными.

В этом посте я хочу рассказать и про мотивацию, и про результаты, а заодно дать общее введение в тему. Технических деталей будет немало — будут и теоремы, и формулы, — но я постараюсь, чтобы всё было понятно, а главное, чтобы было видно, как отдельные кусочки складываются в одну довольно-таки стройную картину.

Линейное дообучение: все хотят двигать модель по прямой

Начнём с наблюдения, которое в последние пару лет стало общим местом. Если у вас есть обученная модель (скажем, LLM) и вы хотите поменять её поведение — добавить навык, убрать нежелательную склонность, усилить какую-то черту, — то очень часто оказывается, что для этого достаточно сдвинуть параметры или активации вдоль одного линейного направления. Причём это работает в самых разных постановках.

В пространстве весов есть целое семейство методов, которые этим занимаются. Task vectors (Ilharco et al., 2022) предлагают вычислять “вектор задачи” как разность дообученных и исходных весов, а потом складывать и вычитать эти векторы, как будто они живут в обычном линейном пространстве. Примерно как word2vec арифметика в своё время:

Model soups (Wortsman et al., 2022) усредняют веса нескольких дообученных моделей и получают модель лучше каждой из исходных.

TIES-merging (Yadav et al., 2023) старается аккуратно разрешать конфликты между такими дельтами при слиянии:

Ну и совсем общеизвестное: LoRA-дообучение (Hu et al., 2021) ведь тоже с самого начала исходит из гипотезы, что дообучение может жить в низкоранговом срезе матриц весов, и потому учит только добавочку малого ранга.

В пространстве активаций происходит ровно то же самое, только методы по-другому называются. Activation addition (Turner et al., 2023) строит steering-вектор (вектор управления) как разность активаций на контрастных промптах и просто прибавляет его к скрытому состоянию. Function vectors (Todd et al., 2023) находят компактные векторные представления функций, выученных в контексте. Representation engineering (Zou et al., 2023) предлагает целую методологию мониторинга и управления поведением через линейные направления в пространстве представлений. А ReFT (Wu et al., 2024) обучает низкоранговые вмешательства прямо в активациях, а не в весах.

Как видите, приёмы разные, а идея одна и та же: нужная структура имеет малую размерность и локально линейна. И тут возникает естественный вопрос: а какая, собственно, линейная структура реально есть в обученной сети? Где она живёт — в весах или в активациях, локально или глобально? И как далеко можно двигаться вдоль неё, прежде чем линейность закончится?

Есть и более провокационная версия этого же вопроса. Совсем недавно вышла работа “Neural Thickets: Diverse Task Experts Are Dense Around Pretrained Weights” (Gan, Isola, 2026), в которой авторы утверждают, что достаточно хорошо предобученная модель окружена плотными “зарослями” (thickets) полезных направлений, и их можно найти, просто насэмплировав случайных возмущений параметров, оставив те, что помогают, и сложив их в ансамбль.

Это очень контринтуитивно: если бы полезные направления были редкими иголками в стоге сена размерности 10^9, случайный поиск не находил бы их никогда. А он находит.

Историю про случайный поиск в высоких размерностях продолжают и более ранние работы по zeroth-order и эволюционным методам — MeZO (Malladi et al., 2023) и evolution strategies (Salimans et al., 2017); все они показывают, что случайный поиск при правильном масштабе действительно двигает большие модели в полезную сторону.

Именно с этого мы и начали. Случайный поиск, очевидно, не конкурент градиентному спуску: на чистой точности градиент всегда выигрывает. Но его можно использовать как измерительный прибор. Если возмущения, насэмплированные внутри одного подпространства, при одинаковом размере шага работают устойчиво лучше, чем возмущения из другого подпространства, это говорит нам, какое из подпространств лучше согласовано с задачей. Случайный поиск здесь не метод оптимизации, а зонд (в смысле probe) локальной геометрии. И вся статья, по сути, отвечает на вопрос: что именно этот зонд нам говорит?

Восстановление после забывания

Чтобы изучать локальную геометрию, нам нужна точка отсчёта, ground truth: известный, заведомо рабочий сдвиг параметров, с которым можно сравнивать всех кандидатов. Откуда его взять? Мы устроили специальный экспериментальный цикл — восстановление после забывания (recovery after forgetting), — который даёт такую мишень в чистом виде.

Цикл состоит из трёх фаз.

  1. Мультизадачное обучение. Учим небольшую сеть на равной смеси из T задач до контрольной точки \theta_{\mathrm{mt}}.
  2. Доучивание на одной задаче (забывание). Продолжаем учить только на одной задаче, доходя до точки \theta_{\mathrm{forg}}, в которой одна или несколько других задач успели деградировать. Это и есть катастрофическое забывание.
  3. Восстановление. Из \theta_{\mathrm{forg}} делаем небольшое число шагов градиентного спуска обратно на исходной смеси (мы берём 100 шагов для синтетической модели и 50 для LoRA), приходя в точку \theta_{\mathrm{rec}}.

Теперь у нас есть сдвиг восстановления:

    \[\Delta_{\mathrm{GD}} = \theta_{\mathrm{rec}} - \theta_{\mathrm{forg}},\]

то есть конкретная, специфичная для задачи адаптация, которую произвёл сам градиентный спуск. Это и есть наша честная мишень: мы можем брать разные маленькие подпространства и спрашивать, насколько хорошо каждое из них содержит \Delta_{\mathrm{GD}}.

Здесь хорошо будет привести нашу тизер-картинку; хоть она и забегает вперёд по сравнению с тем, где мы сейчас находимся, она как раз иллюстрирует все эти обозначения:

Подчеркну, что в самих теоретических результатах нет ничего специфичного именно для забывания — то же самое относится к любой небольшой градиентной адаптации вокруг контрольной точки; просто в сценарии с забыванием есть удобный правильный ответ \Delta_{\mathrm{GD}}.

Кандидатов на “правильное подпространство” у нас три, точнее, целых три их семейства:

  • локальное подпространство задачи (local task subspace) U_\tau^{(r)}(\theta) — линейная оболочка топ-r собственных векторов матрицы ковариации градиентов сети, посчитанных в точке \theta; это и есть то самое “естественное” подпространство, которое часто неявно предполагается в упомянутых выше методах;
  • префикс траектории (trajectory prefix) U_{\mathrm{traj}}^{(k)} — линейная оболочка первых k шагов восстановления

        \[\theta_1-\theta_0, \dots, \theta_k-\theta_{k-1};\]

    по построению весь \Delta_{\mathrm{GD}} лежит в оболочке всей траектории, но здесь речь о том, что и короткого префикса, первых нескольких шагов может хватить, чтобы поймать основную часть нужного подпространства;
  • явный крыловский базис (explicit Krylov span) \mathrm{span}\{g, Hg, H^2 g, H^3 g\} в точке \theta_{\mathrm{forg}}, построенный через произведения гессиана на вектор (в реальности вычисленные через конечные разности); его мы используем как диагностику кривизны, а не как реальный базис; забегая вперёд, скажу, что он ловит лишь около 11% сдвига восстановления против 77% у префикса траектории, и почему так — это интересный вопрос.

А результаты случайного поиска мы оцениваем тремя способами, потому что они отвечают на разные вопросы:

  • best-of-N — выигрыш одного лучшего из N кандидатов (именно про эту величину наша теорема);
  • ens-k-of-N — выигрыш ансамбля из топ-k кандидатов по голосованию;
  • pass@N — доля тестовых примеров, решённых хотя бы одним из отобранных кандидатов; это верхняя граница, потолок для идеального “селектора”, выбирающего из вариантов.

Стоит сказать, что структура низкой размерности в весах — это вообще не новость. То, что многие задачи решаются в маленьком случайном подпространстве, люди знают как минимум со времён работ про intrinsic dimension (Li et al., 2018); то, что независимо обученные сети соединяются простыми кривыми малых потерь, показала серия работ про mode connectivity (Garipov et al., 2018) — и здесь большой очередной привет Дмитрию Ветрову!

Наш вклад в эту историю — временная ось: для восстановления после забывания релевантная низкоразмерная структура оказывается не статичным базисом, а движущимся пучком, который следует за траекторией.

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

Теория: почему случайный поиск вообще что-то находит

Самый контринтуитивный факт во всей этой истории — что случайный поиск работает в пространстве размерности 10^9. Давайте разберёмся, почему.

Теорема (гауссовский best-of-N в локально-линейной окрестности). Рассмотрим чекпойнт \theta и его окрестность, где приращение оценки S = -L_\tau ведёт себя линейно:

    \[S(\theta+\delta) - S(\theta) = a^\top \delta + \mathcal{O}(|\delta|^2)\]

для фиксированного полезного направления a \in \mathbb{R}^D. Посэмплируем \delta_1, \dots, \delta_N \sim \mathcal{N}(0, \sigma^2 I) и выберем лучший сэмпл, \delta_{n^\star} = \arg\max_n a^\top \delta_n. Тогда верно следующее.

  1. Каждая проекция a^\top \delta_n — центрированный гауссиан с дисперсией \sigma^2 |a|^2, не зависящей от размерности D.
  2. Ожидаемый выигрыш best-of-N равен

        \[\mathbb{E}[\max_{n \le N} a^\top \delta_n] = \sigma |a| \sqrt{2 \log N}\,(1 + o(1)),\]

    что растёт с бюджетом, но не с D.
  3. Для любого b \perp a (направление посторонней побочной задачи) у выбранного кандидата \mathbb{E}[b^\top \delta_{n^\star}] = 0, а типичная величина |b^\top \delta_{n^\star}| = \mathcal{O}(\sigma |b|), и она не зависит от N.

Доказательство тут совсем короткое и стандартное. Для \delta \sim \mathcal{N}(0, \sigma^2 I) величина a^\top \delta — центрированный гауссиан с \mathrm{Var}(a^\top \delta) = \sigma^2 |a|^2, что даёт пункт 1.

Дальше нормируем, X_n = a^\top \delta_n / (\sigma|a|) \sim \mathcal{N}(0,1), и применяем классический результат из теории экстремальных значений:

    \[\mathbb{E}\left[\max_{n\le N} X_n\right] = \sqrt{2\log N}\,(1+o(1)),\]

и это пункт 2.

Наконец, (a^\top\delta, b^\top\delta) являются совместно гауссовскими с ковариацией \sigma^2 \langle a, b\rangle; если \langle a, b\rangle = 0, они независимы, и обусловливание на то, что мы их выбрали (а это событие зависит только от a^\top\delta), оставляет b^\top\delta_{n^\star} \sim \mathcal{N}(0, \sigma^2|b|^2), что даёт пункт 3.

Главное здесь — первый пункт. Хотя сэмплер размазывает свою дисперсию по всем D координатам, “количество полезного направления” a в одном случайном векторе имеет дисперсию \sigma^2|a|^2, которая не сжимается с ростом D. То есть даже на масштабе LLM случайный поиск не безнадёжен: сигнал на один сэмпл одинаков для любых D, даже гигантских.

Best-of-N усиливает этот сигнал привычным гауссовским множителем \sqrt{2\log N}, растущим с бюджетом. А третий пункт — это та самая асимметрия, ради которой всё затевалось: отбор по a в среднем вообще не двигает ортогональное направление b, и даже случайный “снос” не растёт с бюджетом. Польза концентрируется на цели и растёт с N, а вред по соседям размазывается и не растёт.

Два графика внизу это иллюстрируют. Во-первых (слева), ожидаемый best-of-N сигнал a^\top\delta_{n^\star} для размерностей D=3, 100, 1000 ложится на одну и ту же кривую и похож на асимптоту \sigma|a|\sqrt{2\ln N}; во-вторых (справа), движение по ортогональному побочному направлению плоское по N и одинаковое для всех D:

Почему это контринтуитивно? Потому что в высоких размерностях случайный вектор почти ортогонален a, и наивно кажется, что чтобы найти согласованный, нужно будет экспоненциальное число попыток.

Так и есть — но для угла, который концентрируется около 90°. А угол здесь не совсем та величина, которая нас интересует: проекция a^\top\delta — это произведение (действительно исчезающего) косинуса и растущей как \sqrt{D} длины, и эти два эффекта сокращаются, оставляя \Theta(\sigma|a|) независимым от D.

Из теоремы, казалось бы, следует, что при сравнении подпространств выигрывать должно то, в котором содержится больше всего a. Так вот, это неверно — по крайней мере, при фиксированном размере шага.

Утверждение (поиск с фиксированной нормой предпочитает плотность, а не массу). Ограничим сэмплирование подпространством U размерности r, сэмплируя \delta = \rho u с u, равномерным на единичной сфере U. Тогда

    \[\mathbb{E}[a^\top\delta] = 0, \qquad \mathrm{Var}(a^\top\delta) = \rho^2 |P_U a|^2 / r.\]

Иначе говоря, сигнал поиска на одно измерение масштабируется как |P_U a|/\sqrt{r}: если добавить в U направления, ортогональные a, то r вырастет, |P_U a| не изменится — и сигнал упадёт. Доказательство здесь опять в одну строчку: для равномерного u на сфере U по симметрии \mathbb{E}[uu^\top] = (1/r) P_U, откуда \mathbb{E}[(a^\top u)^2] = |P_U a|^2/r.

Это очень важная для нас мысль: при фиксированном шаге значима плотность сигнала |P_U a|/\sqrt{r}, а не его масса |P_U a|^2. Подпространство ранга 32, целиком содержащее a, имеет плотность |a|/\sqrt{32}, и это хуже, чем у подпространства ранга 10, содержащего 77% от a. Именно эти цифры мы потом и увидим в экспериментах.

Наконец, что вообще представляет собой направление восстановления? Здесь тоже есть короткая лемма.

Лемма (крыловское восстановление). Пусть L_\tau квадратична с постоянным гессианом H на окне восстановления, и

    \[\theta_{t+1} = \theta_t - \eta \nabla L_\tau(\theta_t).\]

Тогда g_t = (I - \eta H)^t g_0, и

    \[\theta_T - \theta_0 = -\eta \sum_{t=0}^{T-1} g_t \;\in\; \mathcal{K}_T(H, g_0) := \mathrm{span}\{g_0, Hg_0, \dots, H^{T-1} g_0\}.\]

Иначе говоря, сдвиг восстановления лежит в крыловском подпространстве размерности не больше T (значит, он имеет малую размерность), но одно фиксированное направление ловит его лишь в вырожденном случае, когда градиент оказывается собственным вектором гессиана, а фиксированное подпространство — только если гессиан переводит его в себя (HU \subseteq U).

Для глубокой сети в забытом чекпойнте ни то ни другое не выполнено. Значит, объект восстановления низкоразмерный, но движущийся: старшие члены H^k g по мере разворачивания траектории всё время подмешивают новые компоненты. Отсюда и главная мысль из названия статьи: recoverable (восстановимо, низкоразмерно) but not stationary (движется).

Рисунок внизу это иллюстрирует. Слева видно, что путь изгибается — суммарный сдвиг \Delta_{\mathrm{GD}} не совпадает с начальным направлением -g_0 и вообще ни с каким фиксированным направлением; а справа показано, как направление шага поворачивается по мере разворачивания траектории (сначала быстро, потом очень медленно):

И последний кирпичик — мостик между весами и активациями. Если сдвинуть веса на \delta\theta, то активация каждого слоя сдвинется на

    \[h_\ell(x; \theta + \delta\theta) - h_\ell(x; \theta) \approx D_\theta h_\ell(x; \theta)\, \delta\theta,\]

то есть на пушфорвард (pushforward) весового сдвига в пространство активаций. А значит, если \delta\theta помогло задаче, то его усреднённая по примерам активационная “тень”

    \[v_\ell = \mathbb{E}_x[D_\theta h_\ell(x;\theta)\,\delta\theta]\]

является хорошим кандидатом в steering-векторы с тем же эффектом первого порядка на потери. К этой мысли мы вернёмся в самом интересном эксперименте.

Что показывают эксперименты

Мы проверяли всё это на трёх масштабах:

  • полностью контролируемый синтетический трансформер, где мы видим всю геометрию;
  • LoRA-адаптеры поверх настоящих предобученных моделей;
  • полные LLM с миллиардами параметров (ну ладно, единицами миллиардов, конечно).

Синтетический трансформер: подпространство движется

Начнём с того, что можно полностью контролировать: 4-слойный, 128-мерный, двухголовый каузальный трансформер (около 500К параметров), обученный на четырёх процедурных задачах с последовательностями цифр — copy, reverse, sort и mod-add. Мультизадачное обучение идёт в течение 20К шагов, доучивание для забывания — ещё 10К, восстановление — не более 100 шагов; везде усредняем по трём запускам.

Сначала хорошие новости для “линейной гипотезы”. В мультизадачной точке минимума матрица ковариаций градиентов каждой задачи действительно низкоранговая — эффективный ранг между 2 и 8, исчезающая доля от числа параметров. Более того, задачи не ортогональны друг другу: средневзвешенное перекрытие их топ-r подпространств по шести парам равно 0.11, что на четыре порядка выше ожидаемого значения \sim 6 \cdot 10^{-5} при случайном их выборе. Это значит, что низкоразмерная структура отдельных задач реальна и вдобавок между задачами есть что-то содержательно неслучайно общее (но не так много, всего 0.11).

Но низкоранговость и почти-ортогональность не спасают от забывания. После доучивания на одной задаче точность худшей из других падает на 0.56–0.95, что подтверждается даже у пар, чьи подпространства перекрываются меньше чем на 0.10. Жить в почти ортогональных подпространствах оказывается недостаточно для того, чтобы не мешать друг другу.

И здесь мы приходим к центральному отрицательному результату. Мы сравнили три способа восстановления при одинаковом шаге: полный градиентный спуск, спуск с градиентом, перепроецированным на каждом шаге на подпространство задачи в забытой точке, и градиент, перепроецированный на чистое подпространство до забывания.

Полное восстановление даёт exact-match 0.30, а обе проекции на статичное подпространство — лишь 0.10 и 0.07. То есть подпространство задачи, измеренное ровно в той точке, где задача была обучена, содержит меньше трети того, что достигает свободное восстановление. Более того, само подпространство движется и “уезжает”: перекрытие топ-r подпространств на шаге t и на шаге 0 падает с 1.0 до примерно 0.12–0.17 за 100 шагов (оставаясь, впрочем, сильно выше случайного, в 2400 раз):

При этом размерность его не меняется, это именно дрейф ориентации пространства. Получается, что любое статичное подпространство промахивается мимо восстановления именно потому, что нужное подпространство всё время поворачивается.

И, наконец, давайте используем наш “зонд” — случайный поиск. Сэмплируя возмущения с фиксированной нормой внутри каждого подпространства на забытой задаче sort, мы получаем воспроизводимый и понятный результат:

Это best-of-N выигрыш, та самая метрика из теоремы, но две другие метрики — ансамбль и pass@N — дают ровно тот же порядок. Причём, ровно как предсказывает наше утверждение про плотность, префикс траектории выигрывает несмотря на меньший ранг. А использование подпространства задачи (ранга 48) вдоль траектории не помогает, хотя и содержит ответ: лишние направления почти ортогональны сигналу восстановления и только размывают его.

LoRA на DistilGPT-2 и GPT-2: главный количественный результат

На синтетике всё сходится, но это одна архитектура с игрушечными задачами. Поэтому мы повторили все эксперименты на LoRA-адаптерах поверх двух настоящих предобученных моделей: DistilGPT-2 с адаптерами ранга 16 на паре sortmod-add и GPT-2 с адаптерами ранга 8 на reversesort, по три запуска, всего шесть прогонов.

И вот тут получается наш самый чистый количественный результат — про массу проекции, то есть про то, какую долю сдвига восстановления \Delta_{\mathrm{GD}} содержит каждое подпространство. Базис из первых 10 шагов восстановления содержит около 77% от \Delta_{\mathrm{GD}}; первые 20 шагов — около 90%; полная траектория, понятно, все 100% по построению.

А статичные подпространства ловят гораздо меньше: локальное — около 15%, до забывания — меньше 2%. Нужный нам объект следует за траекторией, а не сидит в фиксированном пространстве малой размерности, и это подтверждается на обеих моделях. Появляется та самая временная ось: там, где работы про intrinsic dimension и mode connectivity говорили о статичной низкоразмерной структуре, при восстановлении забытых задач она оказывается движущейся.

Здесь опять два графика; слева масса проекции |P_U\Delta_{\mathrm{GD}}|^2/|\Delta_{\mathrm{GD}}|^2 по подпространствам (среднее и разброс по 6 прогонам); справа предсказанная плотность |P_U\Delta|/\sqrt{r} (столбики) против наблюдаемого best-of-N выигрыша (точки), и видно, что они идут вместе:

Самое приятное здесь то, что масса проекции вместе с нашим утверждением про плотность предсказывает, как хорошо сработает случайный поиск внутри подпространства: поиск с фиксированной нормой извлекает сигнал плотности |P_U\Delta_{\mathrm{GD}}|/\sqrt{r}.

И прогноз сбывается! Best-of-N (та метрика, про которую теорема) точно следует за плотностью: префикс ранга 10 (0.165) лучше полной траектории ранга 16 (0.134) примерно в те самые \sqrt{16/10} раза, что предсказывает утверждение, а деление каждого выигрыша на \sqrt{r} делает порядок монотонным.

Интересно, что три метрики при этом немного расходятся — и расходятся ровно так, как предсказывает теория.

Ансамбль (ens-k-of-N) более снисходителен к большому подпространству (префикс 0.191 против полной траектории 0.182, почти ничья): объединение многих кандидатов размывает штраф за плотность. А pass@N просто отслеживает массу: чем больше \Delta_{\mathrm{GD}} содержит подпространство, тем выше потолок. Главный вывод мы делаем из best-of-N, где теория применима напрямую.

Полезно заглянуть и внутрь средних по семействам — на отдельных кандидатов. На рисунке около 1200 кандидатов из 6 прогонов:

Здесь можно увидеть две вещи. Во-первых, возмущения, которые улучшают задачу, — это в основном те, что согласованы с направлением градиентного восстановления: косинус кандидата с \Delta_{\mathrm{GD}} коррелирует с его выигрышем (r \approx 0.52), а поиск иногда даже чуть обыгрывает один шаг градиента, находя более удачный масштаб вдоль примерно того же направления. Во-вторых, перекрытие кандидата со статичным локальным подпространством задачи успех не предсказывает, а скорее анти-коррелирует (r \approx -0.40): из этого подпространства сигнал восстановления почти целиком убирает проекция.

Есть из этой картины и практический вывод. Гипотеза о движущемся подпространстве делает конкретное предсказание про мультизадачное дообучение: если довести одну задачу до конца и только потом добавить вторую, локальное пространство первой от этого “уедет”, а значит, последовательная специализация должна быть хрупкой.

Так и получается: на обеих моделях расписания, которые обновляют задачи вместе (простая сумма градиентов, чередование, PCGrad-lite в духе Yu et al., 2020), добиваются точности худшей задачи на порядок выше, чем расписания, которые сначала доучивают одну задачу до конца и лишь потом берутся за другую.

Тут стоит сказать, что вокруг конфликта градиентов в мультизадачном обучении выросло целое семейство методов: PCGrad, MGDA, GradNorm, CAGrad. Да и регуляризаторы для continual learning вроде EWC и GEM про то же. Мы не пытаемся добавить ко всему этому многообразию ещё один оптимизатор, а всего лишь делаем диагностику; разные одновременные расписания в наших экспериментах кучкуются в паре пунктов друг от друга без явного победителя. Но вывод всё равно чёткий: последовательно учить задачи не надо.

LLM-масштаб: картина слегка мутнеет

Синтетика и LoRA дают полное совпадение с теорией до \sim 10^6 обучаемых параметров. А что будет на моделях с миллиардами параметров? Здесь мы честно задаём три вопроса, и так же честно отвечаем, в том числе там, где доказательств меньше, чем хотелось бы.

Выживает ли низкоранговая геометрия? Лишь отчасти. На Qwen2.5-0.5B мы оцениваем ковариации градиентов через случайный скетч и считаем эффективные ранги — их значения очень малы, от единиц до полутора десятков. Но маленький эффективный ранг по нескольким десяткам минибатчей в пространстве размерности D \gg n может быть артефактом сэмплирования, а не свойством задачи.

Поэтому мы также добавляем “контрольную группу”: заменяем каждый градиент гауссовским вектором той же нормы и переоцениваем ранг тем же пайплайном. В результате на Qwen-3B при ограничении на MLP-слои измеренный ранг явно ниже контроля (там низкий ранг настоящий), а на Qwen-7B измеренный и контрольный ранги практически совпадают — и видимая низкоранговость неотличима от шума.

Так что чистый низкоранговый результат установлен на маленьких моделях и LoRA, а на миллиардных масштабах выживает лишь частично. Это, пожалуй, самое слабое место из всех наших утверждений в статье: мы не установили, что низкий ранг на миллиардах параметров сохраняется.

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

Мы делаем это напрямую; считаем симметричные конечные разности:

    \[F_1 = \tfrac{1}{2}[L(\theta+\sigma\delta) - L(\theta-\sigma\delta)], \qquad F_2 = \tfrac{1}{2}[L(\theta+\sigma\delta) + L(\theta-\sigma\delta) - 2L(\theta)],\]

где F_1 — антисимметричная (линейная) часть, а F_2 — симметричная (кривизна). Прогоняя масштаб \sigma, видим, что на Qwen2.5-0.5B линейная часть доминирует около \sigma \approx 10^{-4}, а выше кривизна берёт верх, и случайные ходы становятся разрушительными. И этот режим зависит от задачи: у BoolQ и HellaSwag есть здоровая полоса линейных и выпуклых направлений, а ARC-Easy на всех масштабах задавлена вогнутыми направлениями — это как раз случай, когда никакого предпочтительного направления нет и случайный поиск вырождается в шум.

Внутри же предсказанного окна теорема подтверждается: best-of-N при \sigma \approx 10^{-4} даёт возмущения, чей результат после объединения в ансамбль на отложенном BoolQ поднимает точность примерно на 10 пунктов, и урон по другим задачам остаётся маленьким.

А теперь самое интересное.

Можно ли из полезного весового возмущения сделать steering-вектор? Здесь работает наш пушфорвард, и это, по-моему, самый красивый результат статьи.

Чистая версия: один шаг градиента — это и есть steering-вектор. На Qwen2.5-0.5B (в формате “истинных/ложных” утверждений) мы делаем один шаг градиента, проталкиваем полученный весовой сдвиг в активации каждого слоя и сравниваем с контрастным (true-minus-false) CAA-вектором (centroid-based activation addition, в духе Rimsky et al., 2023), построенным независимо из размеченных промптов.

Два направления хорошо согласуются на поздних слоях: косинус растёт через средний блок декодера и достигает около 0.58 на слоях 19–20 — ровно тех, откуда обычно и берут steering-векторы, — и только при том самом промежуточном learning rate 10^{-4}, который анализ F_1/F_2 пометил как линейный.

При 10^{-3} шаг выходит из линейного режима, и согласованность рушится. А если впрыснуть градиентный сдвиг обратно в чистую модель, кривая отклика близко повторяет кривую CAA-вектора и поднимает точность примерно на 10 пунктов. Модель ведёт себя почти одинаково, пришёл ли steering-вектор из 80 размеченных контрастных пар или из одного шага градиента вообще без меток.

Шумная версия повторяет это, заменив честный шаг градиента случайным возмущением (отобранным по принципу best-of-N). Здесь пайплайн посложнее — сначала поиск кандидатов, потом усреднение их влияния на активации в steering-вектор, потом выбор “рабочей точки”, то есть слоя и масштаба впрыска, и финальный замер на отложенном наборе:

Мы прогнали это на 14 комбинациях (модель, задача) — Qwen2.5 на 0.5B/3B/7B и OLMo-7B. Структурированный перенос побеждает контроль (случайное направление той же нормы на том же слое) в 9 из 14 случаев, и эффект Qwen на BoolQ выживает на всех трёх масштабах. То есть получается не бесплатно и не универсально: на OLMo BoolQ, например, выигрыш +1.2 пункта на целевой задаче покупается ценой -17 пунктов на других задачах. Да и 9 из 14 — это не то чтобы очень убедительно.

Так что этот алгоритм получился реальным и часто полезным, но сильно зависящим и от задачи, и, что важнее, от архитектуры: на не-Qwen-семействе вроде OLMo перенос может оказаться небезопасным.

Более широкая проверка: что устояло?

А теперь самый потенциально неуютный шаг. Статью мы подали уже пару недель назад, и выложенный препринт примерно соответствует поданной версии (он разве что поподробнее). Но потом мы решили, что наши результаты нужно перепроверить более широко, и устроили безжалостный независимый стресс-тест всех наших утверждений.

Кстати, этот тест был сделан в большой степени автоматизированно, AI-агентами. Как вы знаете, тема того, как AI сам двигает науку, мне очень близка, я писал про неё недавно в постах про AI 2027 и опровержение гипотезы Эрдёша и много раз рассказывал, но сейчас не об этом.

Такая перепроверка всегда может оказаться смертельной для результатов. Точнее говоря, она может сильно ограничить результаты: вопрос не в том, верно ли мы всё сделали (скорее всего да), а в том, по каким осям — архитектура, масштаб, воспроизводимость, тип задачи — наши результаты подтверждаются, а где проходит граница. И, кажется, обошлось!

Геометрия восстановления воспроизводится широко. Главная находка — что восстановимый объект живёт в префиксе траектории, а не в статичном подпространстве — повторяется на пяти архитектурных семействах (Pythia/NeoX, GPT-Neo, OPT, TinyLlama/Llama, GPT-2) и доходит до 7B на всех четырёх проверенных семействах. Префикс везде уверенно превосходит и фиксированные, и согласованное по размерности случайное подпространство.

Он ловит около 0.41 сдвига восстановления, а другие методы буквально около нуля. Так что наш вывод устойчиво воспроизводится.

Кстати, тут обнаружилась важная поправка: сравнивать префикс размерности 10 с подпространством размерности 3 нечестно, потому что большее подпространство ловит больше чего угодно. Поэтому мы проверяли при согласованной размерности k=3, и, конечно, всё равно всё получилось.

Так что с геометрией всё в порядке. А что с нашей леммой?

Важное уточнение. В статье мы отмечаем, что явный крыловский базис ловит куда меньше \Delta_{\mathrm{GD}}, чем эмпирический префикс, и потому пользовались префиксом как рабочим прокси.

Стресс-тест показал, что префикс — это не крыловское подпространство никакого оператора. Ни обычный крыловский базис \{g, Hg, H^2g, \dots\}, ни “правильный” предобусловленный базис для Adam \{(P^{-1}H)^i P^{-1} g\}, ни даже “дрейфующий” базис с пересборкой оператора в каждой точке траектории не приближаются к префиксу.

У нас уже есть идеи о том, почему так, но это ещё требует дальнейших уточнений.

Подтвердилось и то, чего нам в статье как раз не хватало. Мы измеряли дрейф мультизадачной траектории восстановления, но не вращение подпространства задачи вдоль однозадачной оптимизации. Этот недостающий замер мы провели, и оказалось, что однозадачное подпространство градиентной ковариации действительно вращается, причём больше 90% этого вращения завершается рано, уже к 48-му шагу:

Так что нестационарность подпространства подтверждается и на прямом измерении.

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

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

Как всё это складывается вместе

Попробую теперь собрать общую картину.

Наш итоговый вывод получается в каком-то смысле отрицательным. Неверно, что нет никакой линейной структуры — она есть! Но нет и единого глобального вектора задачи (task vector).

Оказалось, что обученные задачи дают локальную низкоразмерную структуру, которая сильно зависит от того, где и как смотреть. В общем чекпойнте градиенты задач концентрируются в маленьком подпространстве, которое даёт хороший базис для одного шага градиентного спуска. Вдоль траектории сдвиг восстановления живёт в крыловском подпространстве, хорошо приближаемом ранним префиксом этой траектории; это подтверждается и случайным поиском. А в пространстве активаций тень одного шага градиента близко повторяет контрастный steering vector на поздних слоях.

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

Мне кажется, что естественнее всего смотреть на это с дифференциально-геометрической точки зрения: трактовать маленькие весовые возмущения как бесконечно малые смещения на многообразии параметров и изучать локальную касательную структуру, которую порождает оптимизация. В отличие от двух самых популярных сейчас объяснений линейных феноменов — через механистические схемы признаков (feature circuits) или через переполненные представления, мотивирующие sparse autoencoders, — мы заходим не со стороны интерпретируемости, а со стороны геометрии оптимизации.

И с этой точки зрения многие наблюдаемые “линейные” феномены возникают сами собой. Нейросеть — дифференцируемая функция, обучение идёт по некоторым гладким траекториям с какой-то локальной геометрией (напомню в скобках свой недавний пост о геометрии ландшафта потерь, а именно о термодинамике нейросетей); и эти траектории действительно имеют малую размерность, но они не статичны.

Та же оптика объясняет и то, с чего мы начинали, — почему случайные возмущения вообще работают на масштабе LLM. В локально-линейном режиме гауссовский поиск эффективно находит направления, улучшающие задачу, размазывая побочные эффекты по ортогональным задачам; и сигнал на сэмпл при этом не зависит от размерности. Эта часть у нас сопровождается даже некоторыми теоретическими результатами, что в deep learning редкость.

Несмотря на то, что мы сделали независимое подтверждение, ограничения у работы всё равно, конечно, есть. Масштаб наших экспериментов невелик, и самые чистые результаты получаются на маленьком трансформере на 500К весов и на LoRA-адаптерах. А у префикса траектории есть и концептуальная проблема: кажется, что мы знаем, где живут хорошие направления, но превратить это в практический алгоритм нельзя, потому что чтобы узнать префикс, надо уже запустить восстановление, а тогда зачем он?..

Куда дальше? Здесь много разных направлений, и мы, конечно, продолжаем. Упомяну, например, один глубокий вопрос, который эта работа ставит, но не решает: почему вообще полностью обученные чекпойнты содержат рядом возмущения, способные резко улучшить конкретную задачу? Откуда берутся эти крайне избирательные локальные направления и когда они возникают — при предобучении, при дообучении, или это свойство самого ландшафта потерь? Это мне кажется важным продолжением наших исследований.

В общем, кажется, что мы нащупали правильную оптику, через которую разрозненные результаты о линейности и маленьких подпространствах становятся проявлениями одной локальной и подвижной геометрии. Большое спасибо Ирине за совместную работу над всем этим, и надеюсь, что самое интересное ещё впереди!

Сергей Николенко

P.S. Прокомментировать и обсудить пост можно в канале «Sineкура»: присоединяйтесь!