Топология
Форма данных: зачем топология видит то, что не видит статистика
**Двенадцать датасетов. У всех одинаковое среднее, дисперсия, корреляция - до второго знака после запятой.** Один из них в форме динозавра. Другой - звезда. Третий - круг. Статистика их не различает. Sklearn выдаст одинаковые числа. Pandas покажет одинаковые таблицы. А глаз отличит за полсекунды. Этот пример - Datasaurus dozen, Justin Matejka, 2017 - не просто визуальный фокус. Это диагноз: классическая статистика ослеплена, когда главный сигнал лежит в **форме**.
Топологический анализ данных (TDA) - дисциплина, которая считает форму. Не как набор пикселей, а как набор инвариантов: сколько кусков, сколько дыр, сколько пустот. Те же инварианты работают в R², R³ и в R⁵¹². Те же инварианты находят раковые подтипы в геномных данных, циклические паттерны в активациях нейросети и аномалии в IoT-телеметрии. Один формализм - десятки доменов.
Цели урока
- Понимать, почему статистика и топология видят разные стороны данных
- Формализовать 'форму' через числа Бетти $b_0, b_1, b_2$
- Строить Vietoris-Rips комплекс из облака точек
- Видеть, где TDA уже работает в продакшне: genomics, neural networks, time series
- Чувствовать разницу между 'кластер' (статистика) и 'компонента связности' (топология)
Предварительные знания
- Базовые множества: $A \cup B$, $A \cap B$, подмножества
- Метрика: евклидово расстояние $\|x - y\|$ в $\mathbb{R}^n$
- Минимум линейной алгебры: точка как вектор, графы как пары узлов
Алгоритм кластеризации видит толпу точек и спрашивает: 'на сколько групп их разбить?' Топология спрашивает другое: 'есть ли у этой толпы дырка?' Разница принципиальная. K-means на данных в форме кольца дробит его на дольки, не видя, что данные - одно целое с пустотой посередине. Persistent homology за один проход говорит: $b_0 = 1$ (одна компонента), $b_1 = 1$ (одна дырка). Кольцо. Без слепых дроблений.
- **Cancer subtypes (Carlsson 2011, Nature)**: TDA на 56 breast cancer экспрессионных профилях нашла подтип c-MYB, который ускользал от иерархической кластеризации. Подтип имеет 100% выживаемость на 10 лет - терапевтически критичное открытие.
- **Activations нейросети**: Naitzat et al. 2020 показали, что глубокие сети 'распутывают' топологию данных слой за слоем. Числа Бетти input-облака монотонно падают к выходу - это формальная мера 'упрощения' представления.
- **Time series в финансах**: Gidea & Katz 2018 поймали топологическую аномалию за две недели до краха 2008. На обычных индикаторах - тишина.
- **Drug discovery**: Ayasdi (Carlsson spinoff, raised USD 106M VC) использовала TDA для классификации белковых конформаций - продукт куплен Symphony AI.
- **Sensor networks**: TDA детектирует 'дыры покрытия' в сетях датчиков на местности без знания координат - только по матрице сигналов.
- **IoT-аномалии**: топологические дескрипторы устойчивы к шуму данных от датчиков, где z-score даёт false positives на каждый второй сэмпл.
Из чистой математики - в production за 30 лет
Топология как наука о формах оформилась в работах Пуанкаре в 1895. Сто с лишним лет она жила в чистой математике, описывая многообразия и инварианты. Перелом - 2009. Карлссон, профессор Стэнфорда, публикует 'Topology and data' в Bulletin of AMS - манифест, заявляющий: алгоритмы persistent homology готовы для реальных данных. Одновременно Edelsbrunner и Harer выпускают учебник 'Computational Topology' - первый систематический сборник. В том же году Карлссон основал Ayasdi - Stanford spinoff, получивший USD 106M венчурного финансирования и проданный Symphony AI в 2019. С 2015 в TDA появились Python-библиотеки giotto-tda, ripser, gudhi - классическая математика стала pip-устанавливаемой за 4 секунды.
Концепт 1: статистика слепа, топология видит
Anscombe's quartet, 1973. Четыре датасета по 11 точек. Среднее $x$, среднее $y$, дисперсия $x$, дисперсия $y$, корреляция $\rho$, регрессионная прямая - **всё совпадает до третьего знака**. А графики выглядят радикально по-разному: облако, парабола, выброс с прямой, выброс по $x$. Anscombe рисовал это вручную, чтобы доказать студентам: цифры лгут, рисунок не врёт. Через 44 года Justin Matejka и George Fitzmaurice доводят идею до экстремума: Datasaurus dozen - 13 датасетов с одинаковой статистикой, и один из них в форме динозавра.
**Топологический инвариант** - число (или структура), которое не меняется при непрерывной деформации. Растягивание, изгибание, сминание - инвариант сохраняется. Разрыв или склейка - меняет. Числа Бетти $b_0, b_1, b_2$ - ровно такие инварианты: компоненты, циклы, пустоты. Эти числа считают **гомологии** - линейная алгебра над цепями симплексов.
Концепт 2: что такое 'форма' - числа Бетти
Форма - расплывчатое слово. Топология формализует его через **дырки разных размерностей**. Поверхность сферы и поверхность тора - обе двумерные, обе компактные. Различие - тор имеет цикл, который нельзя стянуть в точку. Сфера такого цикла не имеет. Один бит информации, и шар отделён от бублика.
**Числа Бетти: каталог дыр.** $b_k$ - число независимых $k$-мерных дыр в пространстве $X$: - $b_0$ - число компонент связности - $b_1$ - число одномерных циклов (петли) - $b_2$ - число двумерных пустот (полости) - $b_k$, $k \geq 3$ - высокоразмерные дыры **Канонические примеры:** - точка: $b_0 = 1$, остальные 0 - окружность $S^1$: $b_0 = 1, b_1 = 1$ - сфера $S^2$: $b_0 = 1, b_1 = 0, b_2 = 1$ - тор $T^2$: $b_0 = 1, b_1 = 2, b_2 = 1$ - буква B (литера): $b_0 = 1, b_1 = 2$ Эйлерова характеристика - знакочередующаяся сумма:
**Гомология** - инструмент, который превращает 'дырки' в линейную алгебру. Симплексы (точки, рёбра, треугольники, тетраэдры) собираются в цепи. Граничный оператор $\partial$ переводит цепь в её границу. Цикл - то, у чего граница нулевая. Граница - то, что является границей чего-то старшего. Гомология $H_k = \ker \partial_k / \operatorname{im} \partial_{k+1}$ - факторпространство 'циклов по границам'. Размерность $H_k$ = $b_k$. Детали - в уроке `tda-03-homology`.
Концепт 3: Vietoris-Rips - от облака к комплексу
Облако точек - не топологический объект. Точки дискретны, у них нет ни связности, ни циклов в собственном смысле. Магия TDA в том, чтобы построить **симплициальный комплекс** - дискретную модель пространства - и считать его гомологии. Способ построения - комплекс Вьеториса-Рипса. Идея до примитивности проста: точки соединяются, если они достаточно близко.
**Vietoris-Rips комплекс $\mathrm{VR}_\varepsilon(X)$:** Дан конечный набор точек $X$ и порог $\varepsilon > 0$. - $k$-симплекс на точках $\{x_0, \dots, x_k\}$ включается тогда и только тогда, когда **попарные** расстояния не превосходят $\varepsilon$: $$\|x_i - x_j\| \leq \varepsilon \quad \forall i, j$$ То есть: рёбра между всеми точками на расстоянии $\leq \varepsilon$, треугольники - там где все три попарных ребра уже есть, тетраэдры - где все шесть, и так далее.
**Vietoris-Rips vs Čech.** VR использует попарные расстояния - дёшево считать, легко закодировать. Čech-комплекс требует, чтобы все шары $B(x_i, \varepsilon/2)$ имели общую точку - топологически 'правильнее' (теорема Nerve), но дороже. На практике почти всегда VR. Деталь: $\mathrm{VR}_\varepsilon \supseteq \mathrm{C}_{\varepsilon}$ - VR более 'жадный'.
Где TDA уже работает в production
TDA вышла из чисто академической ниши, когда совпали три фактора: (1) быстрые алгоритмы persistent homology с матричной редукцией, (2) Python-библиотеки с приличным DX, (3) понимание, что дескрипторы топологии можно подавать в любой ML-pipeline как обычный вектор фич.
**TDA - не серебряная пуля.** На очень шумных или очень малых данных (n < 50) persistence diagrams нестабильны. Размерность point cloud влияет на сложность: $\mathrm{VR}_\varepsilon$ на 10k точках в R^100 ещё считается, на 100k уже требует witness complexes. И главное: TDA говорит ЧТО есть в данных, но не всегда ПОЧЕМУ - интерпретация остаётся за доменным экспертом.
Статистика слепа, топология видит
Datasaurus dozen: 13 датасетов с одинаковыми средним, дисперсией и корреляцией - но разными формами. Классическая статистика их не различает. Persistent homology за один проход говорит: circle имеет b₁ = 1 (дырка), dino имеет b₁ = 0.
Два датасета имеют одинаковые среднее, дисперсию и корреляцию. Что из этого следует?
Моменты - агрегированная статистика, форма теряется. Числа Бетти b₀ (компоненты), b₁ (петли), b₂ (пустоты) инвариантны к непрерывным деформациям и различают circle от dino от bullseye даже при одинаковых статистических моментах.
Числа Бетти: каталог дыр
b₀ - число компонент связности, b₁ - число одномерных циклов (петель), b₂ - двумерных пустот. Тор: b₀=1, b₁=2, b₂=1. Окружность S¹: b₀=1, b₁=1. Сфера S²: b₀=1, b₁=0, b₂=1.
Цифра 8 (восьмёрка) как одномерная фигура. Какие у неё числа Бетти?
Одна компонента связности (b₀=1), две независимые петли (b₁=2). Как буква B. У окружности - b₁=1, у восьмёрки - b₁=2.
Vietoris-Rips: от облака к комплексу
VR_ε(X): k-симплекс на точках {x₀,…,xₖ} включается, если все попарные расстояния ≤ ε. При росте ε топологические особенности рождаются и умирают. Долгоживущие (большая persistence) - сигнал, короткоживущие - шум.
Точки {(0,0),(1,0),(0,1)} - прямоугольный треугольник со сторонами 1, 1, √2. При каком минимальном ε VR-комплекс становится 2-симплексом?
Условие 2-симплекса: ВСЕ попарные расстояния ≤ ε. Максимальное попарное расстояние - гипотенуза = √2. Только при ε ≥ √2 все три ребра есть и треугольник заполняется.
Datasaurus: цифры одинаковые, формы разные
Эксперимент, после которого 'pearson correlation' звучит как самоутешение
Все 13 датасетов имеют: - среднее $x$ ≈ 54.26 - среднее $y$ ≈ 47.83 - стандартное отклонение $x$ ≈ 16.76 - стандартное отклонение $y$ ≈ 26.93 - корреляция Пирсона ≈ -0.06 Формы: - dino - буквальный динозавр - circle - кольцо с пустотой посередине - bullseye- два концентрических кольца - star - звезда - x-shape - крест - ... KMeans с k=3 на 'circle' и 'star' даст похожие центроиды. UMAP/t-SNE без specific tuning сольёт круг в овал. А persistent homology скажет: - circle: b_0 = 1, b_1 = 1 (одна компонента, одна дырка) - bullseye: b_0 = 1, b_1 = 2 (одна компонента, две дырки) - dino: b_0 = 1, b_1 = 0 (одна компонента, без дырок) Три инварианта - и формы различены однозначно.
Два датасета имеют идентичные среднее, дисперсию и корреляцию. Какое утверждение корректно?
Точно. Моменты - агрегированная статистика, форма теряется. TDA восстанавливает информацию о связности и циклах.
'TDA - это просто продвинутая визуализация'
TDA даёт количественные инварианты, которые работают и в 1000-мерных данных, где визуализация невозможна.
Persistent homology возвращает barcode - набор интервалов рождения и смерти топологических фич. Это объект, на котором можно делать ML: bottleneck distance даёт метрику, persistence images - вектора фиксированной длины для CNN. TDA не заменяет глаза, а расширяет их в недоступные размерности.
Форма данных в реальных системах
Где b₀, b₁, b₂ перестают быть абстракцией
**Геномика, breast cancer (Carlsson 2011):** Пациенты как точки в R^28000 (gene expression). Цель - найти подтипы (компоненты связности): $b_0 \to$ кластеры. Но неожиданно $b_1 = 1$ для 'normal-like' региона - кольцевой паттерн. Интерпретация: непрерывный спектр промежуточных состояний. Одна цифра топологии - целая биологическая гипотеза. **Активации ResNet-50 на ImageNet (Naitzat 2020):** Измерения после каждого блока. На входе $b_0 = 100$ для ста классов. К последнему слою $b_0 = 1$ - все классы линейно отделимы. Монотонное падение Бетти - формальная картина 'обучение упрощает топологию'. **EEG при эпилепсии (Petri 2014):** Корреляционная матрица каналов как метрика. Персистентные циклы $b_1$ за 30 секунд до приступа резко возрастают. Клинический предиктор без feature engineering. **Sensor coverage:** Нейросеть из датчиков покрывает поле. Дырка в покрытии = $b_1 \geq 1$ на графе пересечений радиусов. TDA детектирует уязвимость без GPS.
Цифра 8 (восьмёрка) как одномерная фигура. Какие у неё числа Бетти?
Точно. Одна компонента, две независимые петли. Так же у буквы 'B'. У окружности - $b_1 = 1$, у восьмёрки - $b_1 = 2$, у trefoil-узла как graph embedding - тоже $b_1 = 2$.
VR на круге из 8 точек
Самый яркий пример рождения топологической дыры
8 точек равномерно на окружности радиуса 1. Попарные расстояния (для соседей по кругу): около 0.77. Через одну: ~ 1.41. Диаметрально: 2.0. ε = 0.5: 8 изолированных точек. $b_0 = 8, b_1 = 0$. ε = 0.8: рёбра между соседями. Кольцо! $b_0 = 1, b_1 = 1$. ← дырка появилась ε = 1.0: рёбра через одну. Звезда поверх кольца, треугольники начинают заполняться, но дырка всё ещё есть. $b_0 = 1, b_1 = 1$. ε = 1.5: почти все пары соединены, треугольники покрывают центр. Дырка заполнилась. $b_0 = 1, b_1 = 0$. ε = 2.0: полный комплекс на 8 точках. Всё стянуто. $b_0 = 1, b_1 = 0$. Дырка $b_1 = 1$ существовала на интервале ε ∈ [0.8, 1.5). Длина интервала = 'persistence' = 0.7 - сильный сигнал того, что кольцевая структура реальна, не шум. Короткие интервалы (длина 0.05, например) - почти всегда шум.
Точки $\{(0,0), (1,0), (0,1)\}$ - вершины прямоугольного треугольника со сторонами 1, 1, $\sqrt{2}$. При каком минимальном $\varepsilon$ VR-комплекс становится 2-симплексом (заполненным треугольником)?
Точно. Условие 2-симплекса - ВСЕ попарные расстояния $\leq \varepsilon$. Максимум - $\sqrt{2}$. Только при $\varepsilon \geq \sqrt{2}$ все три ребра есть, и треугольник заполняется.
- **ripser** (Bauer 2021) - C++ ядро, 100x быстрее предшественников. Считает persistence для VR-комплекса до 100k точек за секунды.
- **giotto-tda** (EPFL) - sklearn-совместимая библиотека. `from gtda.homology import VietorisRipsPersistence`. Drop-in для feature extraction.
- **gudhi** (INRIA) - научный стандарт, поддержка alpha-комплексов и cubical homology для изображений.
- **TDA в PyTorch** - дифференцируемые версии (Carriere et al. 2021), training neural networks с persistence loss.
- **Ayasdi → Symphony AI** - первый коммерческий продукт на TDA, B2B аналитика для healthcare и enterprise.
Топология активаций нейросети - не теория, а инструмент
Как persistence используют для дебага классификаторов
Дано: ResNet, обученный на CIFAR-10. Точность 94%, но что-то странное с confusion matrix: 'cat' и 'dog' путаются вдвое чаще, чем должны. Diagnostic pipeline: 1. Прогнать validation set через сеть, вытащить активации после avgpool. 2. Каждый класс - точечное облако в R^512. 3. Считаем VR persistent homology каждого облака. 4. b₁ для класса 'cat' = 2, для 'dog' = 2, для 'airplane' = 0. Интерпретация: 'cat' и 'dog' имеют две стабильные петли в latent. Это значит - сеть кодирует две моды (например, sitting/standing для cat), которые потом путаются через геометрию пространства. Практический вывод: добавить data augmentation, которое разделяет моды, или перейти к multi-prototype loss. Без TDA увидеть это - почти невозможно. Подобный анализ описан у Carlsson, Gabrielsson 2018 'Topological Approaches to Deep Learning' и Naitzat et al. 2020. В практике у Ayasdi и у нескольких MLOps-команд это часть стандартного debug-чеклиста.
Ключевые идеи
- **Datasaurus dozen**: одинаковые моменты, разные формы - формальное доказательство, что классическая статистика теряет геометрию.
- **Числа Бетти $b_0, b_1, b_2$**: каталог дыр размерностей 0, 1, 2 - инварианты, не меняющиеся при непрерывных деформациях.
- **Vietoris-Rips $\mathrm{VR}_\varepsilon$**: симплициальный комплекс, где $k$-симплекс существует, если все попарные расстояния $\leq \varepsilon$.
- **Persistence**: вместо одного $\varepsilon$ - всё семейство сразу, треккинг рождения и смерти фич. Длинные интервалы - сигнал, короткие - шум.
- **TDA в production**: ripser, giotto-tda, gudhi - pip install и работающий pipeline. Genomics, neural network interpretability, time series.
- **Ограничения**: малые $n$, очень высокая размерность, сложная интерпретация - TDA усиливает ML-стек, не заменяет его.
Вопросы для размышления
- Почему k-means на кольце даёт абсурдный результат, а persistence - правильный? Дело в loss функции или в самой постановке?
- Datasaurus показывает провал моментов первого и второго порядка. Какие моменты ВЫСОКОГО порядка могли бы различить динозавра и круг? И насколько ML-friendly они?
- Если активации нейросети имеют $b_1 = 2$ для класса 'cat', что это говорит о data augmentation, который надо применить?
- VR требует $O(n^k)$ памяти для $k$-симплексов. На 10k точек $k=3$ - это $10^{12}$. Какая стратегия (witness, sparse) кажется правильной для production?
- Чем отличается 'кластер' в DBSCAN от 'компоненты связности' в VR при правильно подобранном $\varepsilon$? Эквивалентны ли они или нет?
Что разблокирует этот урок
Фундамент TDA - и вход в ближайшие темы:
- Симплициальные комплексы — Углубление: формальные определения, Čech vs Rips, alpha-комплексы.
- Гомологии и Бетти — Линейная алгебра дыр: цепи, границы, факторпространства.
- Persistent homology — Главный объект курса: persistence как функция от $\varepsilon$, barcode, диаграммы.
- Mapper algorithm — Топологический скелет данных через клейкое покрытие.
- TDA в нейросетях — Топология активаций как инструмент interpretability.