Привет, друзья!

Меня зовут Сабрина, я XAI/MI researcher, и это наш новый туториал и в этот раз он ближе к разбору статьи. Если вы не знаете ни одного термина из заголовка — вам можно и нужно читать статью — она написана с целью познакомить Вас со всеми терминами во время прочтения.

Работать будем с двумя красивыми вещами. Первая — из DL: автоэнкодеры. Вторая — из математики: динамическая система и то, что расположено внутри нее.

Изучать динамическую систему в AE будем на основе публикации Navigating the Latent Space Dynamics of Neural Models. Приступим!

Весь код к туториалу лежит в ноутбуке на Github.

Введение

Работа Navigating the Latent Space Dynamics of Neural Models попалась мне на глаза ещё в мае 2025 и привлекла своей необычной постановкой. Сейчас, в сентябре 2026 наконец‑то её разбирая, я рада увидеть её принятой на ICLR 2026!

Наш план на разбор большой, отсюда вы можете читать его по частям, возвращаясь к нужным. Для разбора как всегда также есть ноутбук для запуска plug‑and‑play. В процессе туториала, идя по нему step‑by‑step, у нас получится:

  1. Задать определение векторного поля в общем смысле и посмотреть, что это за объект внутри модели.

  2. Узнать детали поля (когда появляется, как сходится, какие есть теоремы).

  3. Узнать, что такое аттракторы, бассейны притяжения и и как найти их (вместе с тонкостями процесса).

  4. Проанализировать, как поле эволюционирует за обучение.

  5. Увидеть, зачем это надо, кроме красивых картинок.

  6. Порадоваться — ведь шесть шагов выше — это разбор ICLR статьи и вы его преодолели.

Шаг 6 — самый значимый. Если вы будете «трогать» термины впервые — это титанический труд — дойти до конца. Поэтому не сдавайтесь, читайте, перечитывайте и всё получится! Приступим.

Часть 1. Поле внутри модели

1.1 Автоэнкодер и его латент

Начнём с начала. Как я писала выше, первым объектом этого туториала для нас будет автоэнкодер. Вспомним, что его задает.

Автоэнкодер F_\Theta есть пара энкодер и декодер (E_{\theta_1},  D_{\theta_2}), где энкодер E_{\theta_1} сжимает (или разжиает) вход x в представление z = E(x), декодер D_{\theta_2} восстанавливает по этому представлению объект обратно. Учится конструкция автоэнкодера так, чтобы композиция
F = D \circ E : \mathcal{X} \to \mathcal{X}
могла восстановить объект x, то есть дать F(x) \approx x. Чаще всего, для этого валидно использовать MSE и для эффективности можно добавить регуляризационный член:

\mathcal{L}_{\mathrm{MSE}}(x) = \sum_{x \in \mathcal{X}} \|x - F_\Theta(x)\|_2^2 + \lambda R(\Theta)

где R — явная (ограничение на параметры) или неявная (ограничение на обучение) регуляризация.

В такой постановке у нас:

  • Видно, что чтобы задать модель нужны две части

  • Четко выделена компонента z \in \mathcal{Z} \subseteq \mathbb{R}^k, от которой зависит восстановление и успешность обучения.

Далее нас будет интересовать именно \mathcal{Z}, причем всё целиком. Его назовём латентным пространством. Вопрос, который мы будем исследовать: как проанализировать латентное пространство, имея в арсенале обе части модели.

Почему нас так интересует латент?
По постановке, латенты должны быть богаты (и в случае хорошего обучения они такие и есть). Это следствие интуиции — на основе их, сжатых/расжатых, декодер в случае успешного обучения близко восстанавливает исходный объект. И это всегда делало латетнты важным объектом анализа.

В качестве подопытного, обучим автоэнкодер с представлением размера k=2 на 10 000 картинках MNIST. Такой размер скрытого представления дает нам власть строить векторное поле на плоскости в точном его виде — без сжатий и потерь информации.

Стандартный анализ латентов и ноу‑хау, с которым мы будем работать

Как я уже сказала, идея анализа латентов не нова. Стандартно их принять анализировать следующей последовательностью шагов:

  1. Поставить вопрос: как в модели кодируется «что‑то»? (Выбрать, что)

  2. Рассмотреть некоторые данные (сет подбирается под задачу, например разные классы, или конкретно‑специфическая выборка);

  3. Прогнать данные через через энкодер и снять представления для анализа;

  4. Получить «след» и проанализировать его (например, объекты одного класса обычно сбиты в кластер, можно посмотреть, как одна картинка перетекает в другую, а ещё можно подвигать представления на основе направлений из разностей центроид между классами).

Такая постановка задачи сфокусирована на том, что:

  • латент определен и понимается как карты объектов: множество точек плюс наше описание на языке слов, направлений и центроид того, как оно себя ведет.

  • объект интерпретации — расположение конкретных данных в модели, но не сама модель;

Результаты для стандартного анализа латентов. Слева — карта объектов из обучающей выборки (как модель расположила обучающие данные), справа — та де карта в декодированном виде равномерной сетки.
Результаты для стандартного анализа латентов. Слева — карта объектов из обучающей выборки (как модель расположила обучающие данные), справа — та де карта в декодированном виде равномерной сетки.
Построение графиков

Слева. Прогоняем все 10 000 обучающих картинок через энкодер и рисуем полученные коды z = E(x) точками с цветом по классу цифры, а поверх ставим центроиды — покоординатные средние кодов внутри каждого класса.

Справа. Рассматриваем облако латентов справа. По каждой из координат берем по 14 и строим сетку из 14 \times 14 кодов, накрывающую облако латентов (узлы расставлены по квантилям от 2-го до 98-го процентиля каждой оси). Далее декодируем каждый узел и выкладываем 196 полученных картинок в одно полотно в том же порядке — так что соседние клетки отвечают соседним точкам латента (отсюда плавный переход).

1.3. Нестандартный анализ: смена парадигмы

Постановка выше рассказала нам про расположение данных в модели, но не сказало, а что внутри себя собрала модель. Для ответа на такой вопрос, авторы Navigating the Latent Space Dynamics of Neural Models предложили рассмотреть AE сам по себе, как некоторую систему, изучившую некоторую структуру. Для этого предложено изучить следующую конструкцию:

f(z) = E \circ D (z), \qquad f : \mathcal{Z} \to \mathcal{Z}, \quad \mathcal{Z} \subseteq \mathbb{R}^k

Да! Энкодер от декодера. По определению — это отображение латентного пространства в себя, а раз это отображение в себя, то можно повторить его сколь угодно много раз: f(f(f(\dots f(z)))).

Декодер , энкодер . Значит композиция  начинает в  уходит в  и возвращается обратно в . Область определения и область значений отсюда — одно и то же множество, и только поэтому результат можно подать этой же функции на вход ещё раз. У композиции  типы тоже сходятся () (при достаточном качестве обучения), и её тоже можно итерировать. Это вариант классической постановки.
Декодер D : \mathcal{Z} \to \mathcal{X}, энкодер E : \mathcal{X} \to \mathcal{Z}. Значит композиция E \circ D начинает в \mathcal{Z}, уходит в \mathcal{X} и возвращается обратно в \mathcal{Z}. Область определения и область значений отсюда — одно и то же множество, и только поэтому результат можно подать этой же функции на вход ещё раз. У композиции F = D \circ E типы тоже сходятся (\mathcal{X} \to \mathcal{X}) (при достаточном качестве обучения), и её тоже можно итерировать. Это вариант классической постановки.

Заметим, что:

  • Такое представление ограничено тем и только тем, что выучила внутри себя сеть и стало быть будет тем хуже, чем хуже наш AE;

  • Мы можем получить случай f(f(z)) = f(z) (неподвижную точку). Тогда как в постановке D(E(x)) = D(z) у нас такие точки скорее артефакт переобучения и как правило не возникают, тут они — просто точки, ибо как выглядит прострнство внутри энкодера мы не знаем (и хотим узнать).

Неподвижные точки будем далее обозначать как z^* = f(z^*).

Тождественность f как побочный эффект обучения.

Заметим, что лосс требует D(E(x)) \approx x. Рассмотрим фиксированную картинку x' из множества тестовых данных с представлением z' = E(x'). Для неё по определению выполнено D(z') \approx x', если модель хорошо обучена. Поставим это в исследуемую композицию f=E(D(z)):

f = E\big(D(E(x'))\big) =  E(D(z'))  \approx E(x') = z'

отсюда на латентах данных обучения, валидации и теста $f$ почти тождественна. Однако, важно зафиксировать, что:

  • «Почти» — это в точности до уровня качества модели. Даже если ошибка реконструкции будет порядка 0.05, то невязка, малая в начале, будет накапливаться с количеством взятия f(z).

  • На всём E(\mathcal{X}) остается (достаточно большое) подмножество \mathcal{Z}. которое никогда не появлялось в данных (и может там вообще не быть (например, ещё не придуманный шрифт MNIST‑а)). На нём ничто не мешает f вести себя как угодно, так как лосс туда доходил только ковсенно.

И здесь ещё раз виден тезис — композиция D \circ E— то, чему модель училась. Композиция E \circ D нигде в лоссе не фигурирует: её поведение на латентах данных получилось как следствие, а вне данных не контролировалось. И всё, что мы по постановке увидим в таком поле, — побочный эффект обучения, а не его цель.

Математический аппарат

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

Динамической системой, заданной на (гладком многообразии) X, называется отображение g: \mathbb{R} \times X \to X, записываемое в параметрическом виде g^t(x), где t \in \mathbb{R}, x \in X, оно дифференцируемо, и g^0 — тождественное отображение X.

Гладкость нам нужна для диффенцируемости, а многообразие — для того чтобы видеть близость нашего X к чему‑то линейному.

Теоретическое примечание

При этом: для стационарных обратимых систем семейство \{g^t : t \in \mathbb{R}\} образует группу (в смысле математической группы) преобразований, то есть g^{t_1} \circ g^{t_2} = g^{t_1 + t_2}. Само X при этом называют фазовым пространством, а траекторию точки под действием g^t — фазовой траекторией.

Стационарность — значит, что правило движения не зависит от того, который час (который шаг): g^tопределяется только длительностью t, а не моментом старта.

Обратимость значит, что двигаться можно и назад, для t > 0.

В динамической системе допустимы «два подтипа», зависящих от формана параметра t. Это:

  1. Поток — параметр t рассмотрен как непрерывное время. Это определение описывает ОДУ (обыкновенное дифференциальное уравнение)

  2. Каскад — время идёт шагами, и система задаётся парой (X, f), где f : X \to X. Траектория точки — последовательность x,\ f(x),\ f^2(x), \dots

Чтобы нанести определение на нашу задачу, декомпозируем его:

В определении потока

В задаче

фазовое пространство X

латентное \mathcal{Z} = \mathbb{R}^k

Гладкое многообразие

Также многообразие

Отображение g^t

Определено:

f^t = \underbrace{f \circ \dots \circ f}_{t \text{ раз}},где

f = E \circ D

Непрерывное время t \in \mathbb{R}

Дискретное время: t \in \{0, 1, 2, \dots\} — сколько раз применили f

g^0 = \mathrm{id}

Можно определить как f^0 = \mathrm{id} — ноль применений ничего не меняют

g^{t_1} \circ g^{t_2} = g^{t_1 + t_2}

f^n \circ f^m = f^{n+m}  при n, m \geq 0

Семейство \{g^t\}образует группу

\{f^n\}образует только полугруппу: обратного элемента нет (декодировать точно не можем)

gдифференцируемо, в том числе по t

Производной по времени нет, но есть производная f по z — якобиан J_f

Строки 1, 2, 3 и 5 и 6 совпадают. Седьмая — нет, ибо f не обратима, а обратного элемента для f нет по построению, так как E сминает \mathbb{R}^{784} в \mathbb{R}^k, и разные точки после шага становятся неразличимы (нет взаимо‑однозначного соответствия).

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

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

Шаги в пространстве: дискретное против непрерывного

  • Когда мы идем дискретно, мы идем прыжком на весь вектор сразу. Производной по времени нет: последовательность z_0, z_1, z_2, \dots не является функцией непрерывного аргумента, и брать \partial / \partial t не от чего. Её аналог — конечная разность:

    \Delta z_t \;=\; z_{t+1} - z_t \;=\; f(z_t) - z_t

  • Когда мы идем непрерывно, двигаясь вдоль вектора и пересчитывая направление бесконечно часто. Вот здесь производная появляется, и получается обыкновенное дифференциальное уравнение:

    \frac{\partial z}{\partial t} \;=\; f(z) - z

Правые части уравнений одинаковые — это одно и то же поле. Отличается только левая: конечная разность против производной. Непрерывный вариант — предел дискретного при длине шага h \to 0, а наша итерация — противоположный край: h = 1, грубый шаг из возможных. Формально это метод Эйлера.

Метод Эйлера

Метод Эйлера приближает решение \partial z / \partial t = V(z) так: z(t+h) \approx z(t) + h\,V(z(t)). Подставим h = 1 и V(z) = f(z) - z:

z_{t+1} \;=\; z_t + \big(f(z_t) - z_t\big) \;=\; f(z_t)

— что есть наша итерация, где h = 1 означает, что малости шага нет, и отсюда:

Траектории разные. Точка, прошедшая t шагов итерации, — это не та точка, в которую её привёл бы поток за время t. Мы считаем ломаную, а не кривую потока.

А вот неподвижные точки, о которых мы ещё поговорим ниже, будут одни и те же. Условие V(z^*) = 0 равносильно f(z^*) = z^*, никакого приближения здесь нет. То есть пути разные, а концы совпадают — и именно поэтому искать итерацией то, что живёт в непрерывной картинке, корректно.

Благодаря шагам, мы можем попробовать восстановить будущее каждой точки. Объект, который его задаёт, есть вектор V(z) \;=\; f(z) - z, а набор всех таких векторов, по одному в каждой точке пространства, называется векторным полем.

Для непрерывного времени V(z), введенный выше — это скорость. Он описывает, в какую сторону и как быстро она движется прямо сейчас. Будущее точки — решение уравнения \partial z / \partial t = V(z): гладкая кривая, которая в каждой своей точке касается поля. Путь, пройденный за время t, — это как раз g^t(z) из определения выше.

Для дискретного времени это приращение: куда точка попадёт ровно за один шаг.

z_{t+1} \;=\; z_t + V(z_t) \;=\; f(z_t)

Будущее точки — последовательность z,\ f(z),\ f^2(z), \dots, то есть ломаная из конечных отрезков. Между узлами не происходит ничего: промежуточных положений у точки нет.

Неподвижные точки и аттракторы

Кажется, на этом этапе время устать от теории и снова посмотреть в модель. Уже выше, если вы читали каты, мы заметили особые точки — такие, что V(z^*) = 0, то есть V(z^*) = f(z^*) - z^* = 0,f(z^*) = z^*. Такие точки называют неподвижными и к ним можно прийти с разных сторон поля. Если траектории всех достаточно близких точек сходятся к z^*, будем называть её аттрактором.

Отлично. Определения в наших руках, и время посмотреть на них в нашем AE. Возьмём 2600 стартовых точек и поищем траектории с наивным приближением аттракторов. Для этого выполним для них итерацию z \leftarrow f(z) для каждой точки. Полученные точки (куда переходили z после функции) склеим по евклидовой норме 0.1 — это будут неподвижные точки.

Латентное поле автоэнкодера.
Латентное поле автоэнкодера.

Что задает картинка:

  • Структуру. Стрелки почти отовсюду они указывают внутрь, в область, где лежат латенты обучающих картинок.

  • Места, где поле обнуляется (белые области). Там $f(z) \approx z$: кодирование и декодирование перестают что‑либо менять. У нашей модели таких точек две, и обе есть наши аттракторы по определению 2 (невязка \|f(z^*) - z^*\| порядка 10^{-5} и 10^{-6}).

  • Норма поля растёт с удалением от данных. Чем дальше точка от того, что модель видела, тем сильнее её движение или, говоря иначе, длина стрелки — мера «насколько эта точка чужая». В блоке «практическое применение» мы увидим, как из этого следствия авторы предлагают строить OOD‑детектор.

Почему мы сходимся к (почти) неподвижности?

Гипотеза работы — потому что нейросети — сжимающие.

Сжимающее отображение — это такое, которое сближает любые две точки: если взять z_1 и z_2 и применить к ним f, расстояние между ними гарантированно уменьшится, причём не меньше чем в фиксированное число раз. Отсюда получаем сходимость: за t шагов расстояние падает как C^t, то есть геометрически, и любые две траектории рано или поздно «склеиваются».

Оценить сжимаемость можно: это описано в практической тетради к разбору. Вкратце — модели сжимающи ещё при инициализации — то есть до обучения.

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

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

Липшцевость: определение

Функция f : \mathcal{Z} \to \mathcal{Z} липшицева, если существует константа C такая, что для любой пары точек

d(f(z_1), f(z_2))_{\mathcal{Z}} \le C \, d(z_1, z_2)_{\mathcal{Z}}

С другой стороны, данная константа может быть описана через Якобиан, как:

C = \sup_{z \in \mathcal{Z}} \|J_f(z)\|_\sigma

где \|\cdot\|_\sigma — спектральная норма (максимальное сингулярное число).

При C < 1 отображение называется сжимающим (contractive) (то есть константа — наш первый индикатор сжимаемости). На наших данных сжимаемость есть, однако по выборке она скорее непрерывная характеристика:

Область данных, раскрашенная по С в нашей постановке.
Область данных, раскрашенная по С в нашей постановке.

Заметим, что сжимаемость не бинарна (есть или нет), а скорее непрерывна по удалению от данных::

  • На обучающих данных — сжатия нет: средняя норма примерно 1.08, и условие сжатия < 1 выполняется меньше чем в половине точек.

  • Сразу за краем облака оно уже появляется: медиана \approx 0.69, условие выполняется в 87%.

  • Далеко от данных модель сжимающая: медианная \|J_f\|_\sigma \approx 0.27, условие < 1 выполняется в 96% точек.

Это закономерно из обучения. На данных автоэнкодер обязан не терять информацию, иначе реконструкция развалится. Отображение, сохраняющее информацию, локально близко к изометрии (сохраняет расстояния между точками), то есть \|J_f\| \approx 1.

Сжимать до нуля модель может себе позволить только там, где ничего ценного нет — то есть вне носителя данных.

Запомним результат: сжатие живёт на подходе к данным, а не внутри них. Сам по себе — он интерес при внутренней работе с моделями.

Поиск аттракторов

Итак, аттракторы особы. Выше мы нашли две неподвижные точки на основе движения: проитерировали f(f(f(\dots f(z)\dots))) до остановки и склеили полученные точки по евклидовой норме.

Наши точки получились при одном конкретном наборе: столько‑то стартов, такой‑то бюджет итераций, такой‑то порог склейки. Если поменять любую из них — ответ может измениться и перед нами возникает вопрос — как искать оптимально?

В работе, авторы приводят следующий алгоритм (Appendix D):

  1. Взять стартовые точки z_0 (латенты обучающих данных, латенты теста, или просто гауссов шум).

  2. Итерировать z_{t+1} = f(z_t), пока \|f(z_{t+1}) - f(z_t)\|_2^2 < 10^{-6} (или 10^{-5} дляпредобученных моделей в разделах 4.1–4.2), но не более t = 3000 шагов (или соответственно 500).

  3. Считать две точки остановки одним и тем же аттрактором, если \cos(z_1^*, z_2^*) > 0.99.

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

  1. Дедупликация по косинусу или норме полагает, что «две точки — один и тот же аттрактор, если угол/норма между ними мала». Однако в такой постановке важно помнить, что мы перенимаем также ограничения метрик:

    — Косинус не видит нормы. Точки (1, 0) и (100, 0) имеют \cos = 1 и будут объявлены одним аттрактором, хотя расстояние между ними — 99. Для латентных пространств, которые почти всегда анизотропны и имеют выделенное «среднее направление», это значит, что аттракторы, отличающиеся в основном длиной, схлопнутся в один.

    —  Норма относительна и требует пересчета на типичную норму пространства.

    — Порог относительный к размерности. В \mathbb{R}^{128} два случайных вектора имеют \cos \approx 0, и порог 0.99 оказывается тут строгим: любые две точки остановки, различающиеся на доли процента, будут посчитаны разными аттракторами. В \mathbb{R}^2 тот же порог — наоборот, щедрый.

  2. Критерий отстановки: \|f(z_{t+1}) - f(z_t)\|^2 < \text{tol} означает «мы медленно движемся». Для линейной динамики с коэффициентом сжатия $\rho$ остаточная

    ошибка связана с размером шага как \|z_t - z^*\| \approx \frac{\|z_{t+1} - z_t\|}{1 - \rho}

    то есть при \rho = 0.83 (у наших двух аттракторов ||J\|_\sigmaравна 0.83 и 0.66) ошибка примерно в шесть раз больше последнего шага. Останавливаемся мы не в аттракторе, а в облаке вокруг него — и размер этого облака задаёт, сколько «разных» аттракторов мы потом насчитаем.

Следствие: «число аттракторов» — это не свойство модели, это свойство (набор стартовых точек, ограничения на итерации, критерий склейки точек).

Любое утверждение вида «у модели стало столько аттракторов» осмысленно только при репорте также условий нахождения!

И помимо количества также полезно анализировать качество. Его нам может дать граница в виде бассейнов.

Бассейны притяжения

Вспомним, что бассейном притяжения называется множество стартовых условий z_0, приводящих к одному и тому же z^*. Построим их для нашего случая.

Область наших данных, раскрашенная по бассейнам притяжения.
Область наших данных, раскрашенная по бассейнам притяжения.

Заметим, что:

  • Граница бассейнов достаточно резкая. То есть динамика не непрерывна по начальным условиям, что закономерно, исходя из постановки нашего шага h=1. Для динамических систем в простом случае такие границы валидные.

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

  • Число шагов до сходимости различно, но тоже имеет структуру. Причем быстрее сходимость там, где данных у нас мало. Это можно использовать для OOD‑детекции, в статье также описано как.

  • Декодированные аттракторы есть простейшие цифры ноль и единица.

Зачем уделять аттрактором столько внимания?

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

Авторы описывают утверждение о формальной связи:

Пусть \mathcal{Z}^\star — конечный словарь аттракторов, \Pi(z) — проекция на ближайший аттрактор, а декодер D липшицев с константой L_D. Тогда для любой тестовой точки x:

\|x - F(x)\|_2^2 \;\le\; \underbrace{\|x - D(\Pi(z))\|_2^2}_{\text{ошибка прототипа}} \;+\; \underbrace{L_D^2 \|z - \Pi(z)\|_2^2}_{\text{ошибка покрытия}}


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

Эксперимент, показывающий, как разложение и баланс запоминания и обобщения меняется в процессе обучения также приложен в тетради (части 4 и 5).

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

Что можно делать с теорией?

Data‑free probing: что лежит в весах, если данных нет вообще

Постановка: Есть предобученная модель. Данных, на которых её учили, у нас нет. Вопрос: можно ли что‑то содержательное из весов?

Идея статьи: сэмплируем Z_n \sim \mathcal{N}(0, I), итерируем до нахождения аттракторов и полученный набор объявляем словарём сигналов, после чего смотрим, насколько разреженно им кодируются реальные данные. У авторов это AE Stable Diffusion, 4096 шумовых точек и шесть датасетов и результат: аттракторы выигрывают на всех датасетах.

Мне это воспроизвести не удалось на рассмотренном простом примере и моя гипотеза — причина бедности словаря модели и простота постановки.

OOD‑детекция по траекториям

Постановка (та же): Есть предобученная модель. Данных, на которых её учили, у нас нет.
Вопрос: пришёл ли объект из того распределения, на котором модель училась?

Идея статьи: у OOD‑объекта есть два способа выдать себя и их и проверяем:

  1. Его траектория не сходится к аттракторам обучающих данных — то есть он вообще в другом бассейне.

  2. Даже если бассейн общий, он сходится иначе — обычно быстрее, потому что снаружи носителя данных поле сильнее (мы это видели в части 2: \|J_f\| \approx 0.25 вдали и \approx 1 на данных).

Чтобы поймать оба случая, берётся вся траектория:

\mathrm{score}(z) = \frac{1}{N} \sum_{z_i \in \pi(z)} d\big(z_i, \mathcal{Z}^*_{\text{train}}\big), \qquad \pi(z) = [z_0, \dots, z_N]

Полученная оценка (среднее расстояние) сравнивается с KNN в пространстве признаков (средняя дистанция до K ближайших обучающих латентов).

\mathrm{score}_{\mathrm{KNN}}(z) = \frac{1}{K} \sum_{u \in \mathrm{NN}_K(z,\; \mathcal{Z}_{\text{train}})} d(z, u)

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

Обе метрики качества считаются как качество классификации по одной разметке: ID получает метку 0, OOD — метку 1. AUROC — вероятность, что случайный OOD‑объект получит скор выше случайного ID‑объекта (0.5 — метод не различает ничего). FPR95 — берём порог по вероятности, пропускающий 95% своих, и смотрим, какая доля чужих через него просочилась; чем меньше, тем лучше.

Рассмотрим этот эксперимент. Возьмем как ID — тест MNIST, OOD — FashionMNIST и равномерный шум, модель — наш k=32. Разделимость сравним на основе плотностей и на основе решения задач

Плотности расстояний до 5 аттракторов и до пятидесяти ближних объектов.
Плотности расстояний до 5 аттракторов и до пятидесяти ближних объектов.
обучающих аттракторов: на 1000 точек имеем 5 различных (в ноутбуке они ещё
и визулазированы)

Результаты по линейной разделимости

         OOD-набор |     траектории      |     KNN (K=50)     
                   |    AUROC     FPR95 |    AUROC     FPR95
      FashionMNIST |    0.828     0.374 |    0.821     0.528
   равномерный шум |    0.729     0.807 |    0.943     0.517

Что видим. По горизонтали — значение скора, по вертикали — плотность. Хорошая картинка должна выглядеть выглядит как две несовпадающие горки: зелёная (свои) слева, цветная (чужие) справа. Чем меньше они перекрываются, тем выше AUROC.

  • Слева, траекторный скор. Зелёная и серая горки сидят друг на друге — шум по этому скору неотличим от настоящих цифр. Красная сдвинута вправо и имеет отдельный пик у правого края: часть FashionMNIST уезжает совсем далеко от аттракторов.

  • Справа, KNN. Серая горка превратилась в узкий пик, стоящий правее зелёной, — шум отлично отделяется. Красная широкая и сильно перекрывается с зелёной.

Почему плотности выглядят так по‑разному.

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

Диапазоны у них разные (0–95 против 15–70), а построение нормирует площадь каждой горки на единицу.

Поэтому узкое распределение рисуется высоким, широкое — низким, и высоту столбиков между панелями сравнивать нельзя — только форму и перекрытие.

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

Слева тот же шум размазан шире, потому что траекторный скор усредняет по тридцати шагам, а на этом пути точки успевают разойтись.

На сами метрики масштаб не влияет: и AUROC, и FPR95 зависят только от порядка скоров, а не от их абсолютных значений.

Обобщение и вывод

Итак, мы рассмотрели эксперимент, позволяющий изучить внутреннюю картину мира модели на основе идей из динамических система. Подход не общий и валиден только для автоэнкодеров, у дискриминативной модели — классификатора, энкодера‑онли, next‑token‑предсказателя — его нет.

В статье это тоже рассмотрено и даже почти успешно, но с границами интерпретации экспериментов. А именно, описано, что:

  • можно обучить декодер поверх замороженного энкодера (в Appendix B.8.1 так сделано для DINOv2 и SigLIP2);

  • можно работать в выходном пространстве, определив поле как остаток F(x) - y;

  • можно итерировать весь residual stream целиком (в Appendix B.8.2 — для Qwen3-0.6B и SmolLM2-1.7B).

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

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

На этом у меня всё и вы молодцы! Спасибо, что дочитали! Надеюсь, вы повторите что-то у себя или просто получили удовольствие от красоты теории.

До новых встреч, друзья!


Если понравилось, как всегда зову в: