Почему геометрия не сжимает веса

Как я пытался применить TurboQuant ко всей LLM и что из этого вышло

История одного исследования: от геометрии эмбеддингов — через TurboQuant от Google — к асимметрии весов и активаций, и к неожиданному пониманию модели как динамической системы.

3 моделиSmolLM-135M · Qwen2.5-0.5B · TinyLlama-1.1B — три архитектуры, один паттерн

124 экспериментас флагами техник; корреляционный анализ «что реально работало»

4.2875 bit/weightравный бит-бюджет CHMC и GPTQ — честное сравнение, без скрытых бонусов

v1 → v6: 4894× → ~1.18×эволюция PPL ratio на SmolLM; перелом — методология, не геометрия

Пролог. Вопрос, который не давал покоя

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

Через месяц после публикации Google выкатывает TurboQuant (ICLR 2026). Метод берёт ровно эти идеи — конусную геометрию, анизотропию, низкую внутреннюю размерность — и применяет их к KV-кэшу и эмбеддингам. Результат: сжатие в 6–8 раз без потери качества. Моя теория получила мощное индустриальное подтверждение.

Но остался вопрос, на который TurboQuant не отвечал: а что с весами? Если геометрия работает для активаций, может быть, она работает и для самих параметров модели? И шире: можно ли применить геометрическое сжатие не только к данным, которые модель производит (активации, эмбеддинги, KV-кэш), но и к самой модели, к её весам?

Так начался этот проект. Сразу оговорюсь: я не пытался превзойти GPTQ. Моя цель была понять, где проходит граница применимости геометрического подхода и почему он так блестяще работает для активаций и, как выяснилось, совершенно бесполезен для весов. Ответ оказался красивее, чем просто «ещё один метод квантизации», — и именно о нём эта статья.

Методика. Что такое CHMC

CHMC — Covariance/Hessian-Aware Manifold Compression. Идея в одном предложении: каждую весовую матрицу разбить на две части — низкоранговую, которая захватывает «конус» активаций (направления, где данные реально живут), и остаток, который квантуется с поколоночной компенсацией ошибок по GPTQ; ранг каждой слоя подбирается так, чтобы суммарный бит-бюджет совпал с бюджетом GPTQ ровно. Это не «ещё один квантизатор» — это геометрический фронтенд поверх оптимизаторов GPTQ.

Входные данные — те же, что у GPTQ: калибровочная выборка (2048 токенов WikiText) и активации X каждого слоя на ней. Всё остальное считается из весов и этих активаций в три шага.

Шаг 1. Низкоранговая часть вдоль конуса

Считаем демпфированные энергии активаций по направлениям входа и делаем усечённый SVD во взвешенной норме — так, чтобы ошибка была мала именно там, где активации велики:

Почему геометрия не сжимает веса, image #1

Шаг 2. Остаток — поколоночная компенсация по GPTQ

R = W − W_lr квантуется алгоритмом, совпадающим с GPTQ: гессиан из калибровочных активаций, обратный через разложение Холецкого, колонки в порядке убывания важности (act-order); после квантования каждой колонки её ошибка вычитается из оставшихся:

Почему геометрия не сжимает веса, image #2

Шаг 3. Равный бит-бюджет

Каждый слой хранит: низкоранговую часть (U, V в FP16), INT4-остаток и групповые масштабы. Биты на вес считаются явно, а ранг rlayer подбирается так, чтобы суммарный BPW не превышал 4,2875 — уровень GPTQ:

Почему геометрия не сжимает веса, image #3

Итог: W_comp = W_lr + R_q. И главное отличие от GPTQ:

GPTQ

CHMC v6

Что хранится

INT4-индексы + групповые масштабы

Низкоранговая часть (U, V в FP16) + INT4-остаток + групповые масштабы

Минимизация ошибки

Поколоночная компенсация через гессиан активаций

Тот же алгоритм (strict_sequential=true — буквально шаг GPTQ)

Роль калибровочных данных

Только гессиан H = XᵀX/n

Гессиан + взвешенный SVD низкоранговой части (энергии активаций c

j

)

Низкоранговая часть

Нет

Да: SVD вдоль конуса, ранг на слой из бит-бюджета

Бит-бюджет

4.2875 BPW (GPTQModel, 4-bit / group-128)

Ровно 4.2875 BPW — ранги распределяются под этот целевой уровень

Таблица 1. CHMC v6 против GPTQ: общее и различия. Стадия остатка у CHMC использует тот же оптимизатор, что и GPTQ; разница — в низкоранговом фронтенде, который кодирует конусную гипотезу. Именно этот фронтенд мы и проверяли на прочность.

Часть 1. Конусная гипотеза подтверждается — трижды

Прежде чем пытаться сжимать веса, нужно было убедиться, что исходная геометрическая картина верна. Я провёл серию измерений на трёх моделях разного масштаба: SmolLM-135M, Qwen2.5-0.5B и TinyLlama-1.1B. Вот что получилось.

Активации живут в узком конусе.
Для каждого слоя я оценивал эффективную размерность активаций — число главных компонент, необходимых для объяснения 90% дисперсии. В среднем по сети это 9 из 576 измерений† (1,56% пространства). Средний косинус между активациями одного слоя ≈ 0,75‡ — в изотропном пространстве он был бы около нуля. Это прямое подтверждение: представления не заполняют пространство, а сосредоточены в узком конусе.

Веса при этом полноранговые.
Тот же анализ для весовых матриц показал совершенно другую картину: минимальный эффективный ранг весов составил 29–30, медианный — около 60§. Для матриц размера, скажем, 576×576 это означает, что веса действительно плотные, без выраженной низкоранговой структуры.

Значит, конус создаёт сама модель.
Если активации узкие, а веса плотные, то отображение «плотные веса → разреженные активации» — это свойство обучения, а не просто отражение данных. Модель сама проецирует плотную информацию в узкое многообразие. Позже, используя топологический анализ (персистентные гомологии и 3D-проекции), я нашёл этому красивое уточнение: конус — это бутылочное горлышко середины сети. В средних блоках до 98,9% дисперсии лежит в трёх главных компонентах (в SmolLM пик приходится на середину сети; в Qwen и TinyLlama он достигается уже с первых блоков — Рисунок 2) — облако буквально свёрнуто в конус, а на входе и выходе представления снова размазаны (13–43% на краях). Паттерн одинаков на трёх разных архитектурах. Геометрия реальна, и она создаётся моделью в процессе обработки.

SmolLM-135M (d = 576)

Почему геометрия не сжимает веса, image #4

Qwen2.5-0.5B (d = 896)

Почему геометрия не сжимает веса, image #5

TinyLlama-1.1B (d = 2048)

Почему геометрия не сжимает веса, image #6

Рисунок 1. 3D-проекции активаций четырёх представительных блоков (первый, четверть, середина, последний) на три главных компонента центрированного объединённого облака [pre;post]: синие точки — исходная модель (pre), оранжевые — после сжатия CHMC v6 (post); серые линии связывают один и тот же токен до и после. В заголовках панелей — доля дисперсии, объясняемая этими тремя направлениями («PCA-3D var»). В середине сети облако свёрнуто в конус, на краях — размазано. Паттерн повторяется на всех трёх архитектурах.

Полный профиль по блокам. Рисунок 2 и Таблица 2 дают честную картину по всем блокам: где именно «середина» — зависит от модели, но сам паттерн (узкий конус после первых 1–2 блоков, изотропнее на краях) удерживается везде.

Почему геометрия не сжимает веса, image #7

Рисунок 2. Слева — доля энергии трёх главных компонент в центрированном облаке активаций каждого блока [pre;post] (та же величина, что «PCA-3D var» на Рисунке 1); справа — средний попарный косинус между токенами внутри блока (анизотропия). После первых 1–2 блоков почти вся сеть лежит в низкоразмерном конусе: 80–99% энергии в трёх главных компонентах; на обоих краях изотропнее (13–43%). Позиция пика различается по моделям — у SmolLM он в средних блоках, у Qwen и TinyLlama достигается уже с первых. pre ≈ post ≈ объединённое облако: концентрация — свойство самих активаций.

Модель (размерность d)

Средний попарный косинус

pre-токенов, диапазон по блокам

Доля энергии top-3 ПК: края → пик → спад

cos(pre

i

, post

i

)

по токенам

SmolLM-135M (d = 576)

0.52 – 0.78

15–28% (blk 0–10) →

99.2%

(blk 11) → 87% (blk 27); края: 24.7 / 43.4%

≥ 0.98

Qwen2.5-0.5B (d = 896)

0.08 – 0.64

13–14% (blk 0–1) →

98.5%

(blk 3, плато ~97% до blk 13) → 82% (blk 20); последние три блока: 17 / 18 / 26%

≥ 0.98

TinyLlama-1.1B (d = 2048)

0.13 – 0.38

13–14% (blk 0–1) →

98.6%

(blk 2), монотонный спад до ~19% (blk 20–21)

≥ 0.98

Таблица 2. Замеры анизотропии и «бутылочного горлышка» (данные проекта: выходы decoder-блоков на 2048 токенах, подвыборка 512 точек на блок; cos(prei, posti) — косинус одного и того же токена до/после сжатия CHMC v6).

† Оценка «d90 ≈ 9 из 576» — из предыдущего исследования на уровне эмбеддингов предложений. Для по-токенных выходов decoder-блоков в данных этого проекта профиль ещё более экстремален: в средних блоках одна главная компонента уже объясняет ≥90% энергии (d90 = 1), а на краях d90 достигает ~235.

‡ «Средний косинус ≈ 0,75» — измерено на SmolLM-135M (диапазон по блокам 0.5–0.8). На Qwen2.5-0.5B он ниже (0.08–0.64), на TinyLlama-1.1B ещё ниже (~0.13–0.38): сила анизотропии зависит от модели, но паттерн «бутылочного горлышка» удерживается на всех трёх.

§ Эффективный ранг весов — конвенция v5 (exp-энтропия нормированного спектра). Приведённые выше числа — из предыдущего исследования на другом подмножестве слоёв; в TDA-анализе этого проекта минимальный эффективный ранг по всем весовым матрицам составляет 18.7–22.1, медианный — 274–930 в зависимости от модели (Приложение Б).

Часть 2. Путь от коллапса до паритета

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

Дальше — серия экспериментов, каждая версия метода добавляла какую-то идею. Вот краткая хронология:

Версия

Что добавил

SmolLM, ratio

v1

Plain SVD

4894× 💀

v2

Adaptive rank

2.35×

v3

Честный учёт бит

1.84×

v4

Covariance + residual

1.49×

v5

7 стабилизаторов

~1.29×

v6

Равный бит-бюджет + GPTQ-оптимизаторы

~1.18×

Таблица 3. Эволюция CHMC на SmolLM-135M: PPL ratio против GPTQ (ratio = PPL_CHMC / PPL_GPTQ; 1.0 — паритет).

Почему геометрия не сжимает веса, image #8

Рисунок 3. Прогресс версий v1→v6 (PPL ratio против GPTQ, SmolLM-135M) в логарифмическом масштабе. Перелом — не новые геометрические идеи, а методологические исправления: честный учёт бит и компенсация ошибок.

Первая версия была катастрофой: простой SVD без учёта структуры ошибок дал чудовищное увеличение перплексии. Постепенно, добавляя адаптивный выбор ранга, корректный учёт битовой стоимости, ковариационные поправки и стабилизаторы, я довёл метод до уровня, сравнимого с GPTQ.

Два поворотных момента этого пути были методологическими.

Первый: честный учёт бит

На ранних этапах я радостно заявлял «Ща мы всех порвем», но при этом тратил 4,5 бита на вес против 4,29 у GPTQ — и всё равно проигрывал по качеству. Только когда я ввёл строгое сравнение при равном бит-бюджете (BPW), все предыдущие выводы обесценились. Оказалось, что без честного учёта бюджета любая таблица результатов — фикция. Это, пожалуй, главный практический урок проекта.

Второй: статистика

Когда одна конфигурация с dampening λ=0.05 дала PPL 1.1723 против 1.1761 у GPTQ, я было объявил победу. Но три дополнительных прогона показали: среднее — 1.1793, то есть в среднем я проигрываю. «Победа» была самым удачным из четырёх прогонов. Разброс в 0,007–0,009 реален, и сравнение по одному прогону — это гадание. С тех пор каждую ключевую конфигурацию я измерял 3–4 раза с разными сидами и сравнивал по среднему, а не по лучшему прогону.

Итог в цифрах (равный бюджет 4,29 бита/вес):

Модель

CHMC (среднее)

GPTQ

Вердикт

SmolLM-135M

1.179–1.186

1.176

паритет, в пределах шума

Qwen2.5-0.5B

1.174*

1.141

проигрыш

TinyLlama-1.1B

1.059

1.081

реальная победа (более 30σ)

Таблица 4. Итоговые PPL при равном бит-бюджете 4,2875 BPW. *Qwen — предварительный одиночный прогон, репы ещё впереди; остальные модели — среднее по 3–4 сидам.

Почему геометрия не сжимает веса, image #9

Рисунок 4. PPL исходной модели, CHMC v6 (среднее по сидам) и GPTQ при равном бит-бюджете. SmolLM — паритет; Qwen — проигрыш (одиночный прогон); TinyLlama — стабильная победа.

Метод конкурентоспособен: на одной модели стабильно бьёт индустриальный SOTA, а на малых моделях превосходит наивное скалярное квантование в 6–11 раз (16.48× у scalar_q4 против 1.42× у моего метода на SmolLM — при сопоставимом бюджете ~4,0–4,2 бита/вес). Но «геометрического превосходства» нет. Почему?

Часть 3. Геометрический апокалипсис

Я перепробовал все геометрические техники, которые подсказывала литература и моя теория: ротацию Адамара (из QuIP#), Lloyd-Max квантизатор, конусную декомпозицию, QJL-коррекцию (из TurboQuant). Провалилось всё:

Техника

Ожидал

Получил

Hadamard-ротация

−2–5%

2.23× (в 1,8× хуже)

Lloyd-Max

оптимум для гаусса

1.35× (хуже базлайна 1.21×)

Cone-Aware

точное сохранение конуса

2.15×

QJL 1-bit residual

экономия 3 бит

PPL 267 228 💀

Таблица 5. Геометрические техники и их результат на SmolLM-135M (ratio против GPTQ при равном бит-бюджете; для QJL — абсолютный PPL, ratio бессмыслен).

Математика провалов оказалась поучительнее самих провалов.

QJL физически не может хранить веса

Его реконструкция signs @ Uᵀ имеет ранг не выше числа проекций, то есть представляет только низкоранговые матрицы. Остаток после low-rank приближения по определению не низкоранговый — значит, QJL принципиально не может его закодировать. Теоретический предел ошибки — √(1−1/4) ≈ 87%. Это инструмент для оценки норм, а не формат хранения весов.

Ротация не меняет целевую функцию, но меняет квантовочную решётку

Я доказал, что loss инвариантен к ортогональному повороту весов (это просто замена базиса). Однако после ротации распределение весов становится более гауссовым, а INT4-квантизатор, который отлично работает на анизотропных данных, начинает работать плохо. Главное же: data-adaptive компенсация ошибок (которую делает GPTQ) в исходном конусном пространстве бьёт любую распределенческую оптимальность в повёрнутом. Конусная гипотеза выигрывает у ротации именно потому, что не разрушает анизотропию.

Единственный рычаг, который работал, — не геометрия

Это dampening (λ=0.05), то есть регуляризация оценки матрицы Гессе. При малой калибровке оценка шумная, и обратная матрица усиливает шум в низкоэнергетических направлениях. Демпфирование дало −4% — больше, чем все геометрические техники вместе взятые (те дали ноль или минус). Это был первый звоночек: работает не захват геометрии, а контроль шума.

Это подтверждает и статистика по всем 124 экспериментам проекта. Я собрал флаги каждого прогона — какие техники были включены и побил ли прогон GPTQ — и посчитал корреляции. Результат: единственный флаг, положительно коррелирующий с успехом, — dampening (+0.40); все геометрические флаги (ротация, конус, Lloyd-Max, QJL) коррелируют с успехом отрицательно или около нуля. Геометрия не помогала не в одном неудачном прогоне, а систематически, по всему ансамблю экспериментов.

Даже «улучшение» базовой математики работало против меня. Взвешенный SVD считается рандомизированным алгоритмом с power-итерациями, и я проверил: больше итераций — точнее разложение — лучше качество? Наоборот: 5 итераций — ratio 1.0586, 10 — 1.0610, 20 — 1.0662. Точная аппроксимация переобучается на калибровку; слегка «неточная» — лучше генерализует. Ещё один штрих к теме «контроль шума важнее захвата структуры» — и ещё один аргумент за честную статистику: все сравнения в статье даны по среднему по сидам.

Часть 4. Дрейф и последний тупик

Оставалась красивая идея: после квантования точки-токены дрейфуют. Дрейф d(x) = (W_comp − W)x — линейное поле. Входы лежат в конусе, значит, дрейф должен быть низкоразмерным, и его можно скорректировать дешёвой low-rank дельтой. Я даже сформулировал критерий остановки заранее: если размерность дрейфа выше 50 — гипотеза неверна, направление закрыть.

Почему геометрия не сжимает веса, image #10

Результат на всех трёх моделях и всех блоках: d90 дрейфа = 227–792. Энергия разброса размазана по сотням направлений. Идеализированная коррекция с рангом 30 захватила бы от ~3 до ~39% энергии дрейфа (Таблица 6). Гипотеза не подтвердилась — чисто, по заранее объявленному правилу, без соблазна «подкрутить и попробовать ещё».

Почему геометрия не сжимает веса, image #11

Рисунок 5. Спектры дрейфа после квантования: строки — модели, столбцы — блоки; энергия главных компонент дрейфа с накопительной кривой и меткой d90. Энергия размазана по сотням направлений, а не сосредоточена в первых десятках. Низкоранговая коррекция здесь бессильна по построению.

Модель (d)

Блок

d90 дрейфа

Эфф. ранг дрейфа

Top-10 overlap с конусом

cap30, %

SmolLM-135M (576)

227

187

0.160

10.2

7

301

247

0.213

10.0

15

304

168

0.680

27.2

29

237

141

0.526

38.8

Qwen2.5-0.5B (896)

353

318

0.114

5.9

6

432

344

0.508

15.2

12

442

401

0.390

12.4

23

391

289

0.426

22.3

TinyLlama-1.1B (2048)

459

358

0.115

2.9

5

716

601

0.327

6.5

11

792

695

0.423

8.3

21

743

607

0.364

11.4

Таблица 6. Диагностика дрейфа после квантования CHMC v6 (одни и те же 2048 токенов, выходы decoder-блоков). d90 — число главных компонент, необходимых для объяснения 90% энергии дрейфа; top-10 overlap — косинусное совпадение ведущих направлений дрейфа с осями конуса (топ-10 правых сингулярных векторов центрированных входов); cap30 — доля энергии дрейфа, захватываемая идеализированной коррекцией ранга 30 вдоль осей конуса. Все блоки нарушают критерий остановки d90 ≤ 50. В средних блоках, где конус сконцентрирован (SmolLM blk 15, Qwen blk 6, TinyLlama blk 11), дрейф совпадает с главными осями конуса (overlap ≈ 0.4–0.7), но большая часть его энергии лежит в других направлениях — cap30 там ≤ 27%.

Оставался последний шанс: суммарный дрейф высокоразмерен, но вклад каждого отдельного слоя — низкоразмерный. Тогда можно было бы сжимать только «безопасные» слои и держать остальные в FP16. Проверил на всех 210 сжимаемых слоях SmolLM: локальный дрейф слоя D_l = X·(W − W_comp)ᵀ — чистый вклад слоя на чистом FP-входе, без доп. forward-проходов. Критерий объявил заранее: ≥50% слоёв с локальным d90 ≤ 30 → идём дальше, иначе закрыть. Результат: медианный локальный d90 = 230 (диапазон 9–339), ниже порога — лишь 1 из 210 слоёв (0,5%), единственный прошедший — L0.o_proj (ранг 2, d90 = 9). Магнитуда per-layer дрейфа мала (~2–10% от выхода слоя в блоке 0), но он высокоразмерный уже в каждом отдельном слое: локальный d90 не растёт с глубиной, а лежит плоский ~220–247 по всем блокам. Механизм тот же самый: GPTQ-компенсация распределяет ошибку округления по всем активным направлениям входа — per-layer дрейф мал по норме, но почти изотропен в каждом слое. Селективная компрессия по размерности безопасности — закрыта.

И тут пазл сложился. Есть структурный аргумент: моя дельта-коррекция ΔW = E·V·Vᵀ — строго слабее того, что GPTQ уже делает внутри себя: его поколоночная компенсация минимизирует ошибку по всем направлениям калибровочных входов, а конусная коррекция — лишь подмножество. После GPTQ остаточная ошибка почти ортогональна распределению данных. Проецировать её на конус — нечего.

Отдельно стоит уточнить связь с «теоремой аналогии» в логике Хоара (опубликованная статья, Nature Scientific Reports), которую мы обсуждали как формальную рамку для переноса гарантий квантования. Её метрика живёт не в пространстве весов, а в пространстве сигналов: это послойный дрейф активаций D_l = ‖post_l − pre_l‖ — насколько сигнал меняется при прохождении конкретного слоя; если D_l остаётся в безопасных пределах (≤ ε−γ), качество сохраняется. При этом весовые матрицы W и ошибка квантования E_q = W − W_q в ней фигурируют лишь как объекты других, существующих методов (AWQ, GPTQ, LQER), чинящих или сжимающих сами веса; теорема смотрит на результат — как сжатие весов повлияло на сигналы внутри модели — и принимает решения именно в пространстве сигналов.

Мы измерили ровно эту величину по слоям — и получили то же, что и в суммарном дрейфе: малая магнитуда, высокая размерность (медианный локальный d90 ≈ 230; слоёв, безопасных в смысле «D_l ≤ ε−γ в low-rank смысле», нет). Если бы дрейф оказался низкоразмерным, D_l стал бы естественной метрикой точности — гейтом селективной компрессии: сжимать слои, где D_l ≤ ε−γ, остальные держать в FP16. Вместо этого этот путь оказался тупиком: безопасных слоёв нет, и это согласуется со всем остальным в этой части.

Часть 5. Единая картина: веса — закон, активации — траектория

Все негативные результаты проекта вдруг объяснились одной теоремой-наблюдением:

Конус — это сигнал, и он исчерпывается за один приём (взвешенный SVD вдоль конуса, первый порядок). Остаток после data-adaptive квантования — структурно бесструктурное высокоразмерное поле. Шум нечего эксплуатировать — поэтому любая геометрическая надстройка (ротация, конус, QJL, дельта-коррекция) даёт ноль или минус.

Но это лишь половина картины. Вторая половина — это понимание, которое пришло позже, в одном разговоре.

Активации — не «промежуточные эмбеддинги». Это внутреннее состояние модели

Трансформер — дискретная динамическая система:

Почему геометрия не сжимает веса, image #12
  • Веса = закон динамики (программа, «гамильтониан» системы). Плотный, полноранговый, вычищенный обучением.
  • Внутреннее состояние hl = траектория системы. И траектория лежит на низкоразмерном аттракторе — это и есть наш конус (d90=9, анизотропия 0.75).

Это классическая картина из теории динамических систем: уравнения движения могут быть сколь угодно сложными, но траектории сходятся к низкоразмерному аттрактору. Мы это буквально измерили — причём аттрактор стягивается к середине сети (98.9% дисперсии в 3 ПК в средних блоках против 13–43% на краях): самая глубокая точка обработки — самое сжатое состояние.

Теперь асимметрия становится тривиальной:

  • Траектория избыточна: она лежит на аттракторе, вне конуса просто ничего нет. Поэтому состояние сжимаемо — TurboQuant и жмёт KV-кэш (память состояний) в 6–8×.
  • Закон плотный: это он держит траекторию на аттракторе. Избыточности в нём нет — обучение её убрало. Поэтому геометрия там не помогает, и выигрывает GPTQ.

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

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

Три наших результата в свете динамической системы

  1. Линейное накопление ошибки (1.02 → 1.33 по слоям). Возмущённая динамика (сжатые веса) отклоняет траекторию, но аттрактор тянет её обратно — расхождение линейное, а не экспоненциальное. Модель устойчива к квантованию именно благодаря конусной структуре.
  2. TDA «макро-гомеоморфизм с микро-шумом»: сжатие сохраняет макроструктуру аттрактора (косинусы pre/post ≥ 0.98, эффективный ранг весов сдвигается на ~1%), но насыщает его мелким шумом — ложными циклами (b1-gain).
  3. Высокоразмерный дрейф: возмущение траектории — не сдвиг вдоль конуса, а рассеяние вокруг него: состояние возвращается на аттрактор, а шум остаётся в поперечных направлениях. Отсюда d90 дрейфа 227–792.

Эпилог. Что это даёт

Прорыва не случилось: 100× сжатия нет, стабильной победы над GPTQ нет. Но случилось другое.

Во-первых, понимание. Я получил связную картину с механизмом: почему геометрия работает для активаций (TurboQuant) и не работает для весов; почему data-adaptive компенсация бьёт распределенческую оптимальность; где живёт конус и что происходит с топологией при сжатии.

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

В-третьих, практика. Метод бьёт скалярное квантование в 6–11 раз на малых моделях — там, где оно катастрофически ломается, — и даёт интерпретируемый анализ модели (ранги, энергия, чувствительность слоёв), которого у чёрного ящика GPTQ нет.

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

Почему геометрия не сжимает веса, image #13

Идеальный edge-стек — это GPTQ для весов и TurboQuant для KV-кэша. Геометрия побеждает, просто не там, где мы сначала искали.

Послесловие: почему это важно для всей области

Этот проект теперь даёт не «мы попытались побить GPTQ и не смогли», а полную теорию:

«Я показал, что геометрия активаций LLM (конусная гипотеза) даёт значительный выигрыш при сжатии данных модели (KV-cache, эмбеддинги), но не при сжатии параметров модели (весов). Это объясняет успех TurboQuant на активациях и провал всех геометрических техник на весах. LLM создают редундантность в своих вычислениях, но не в своих параметрах.»

Эта теория объединяет:

  • успех TurboQuant на активациях;
  • провал геометрических методов на весах;
  • успех GPTQ/AWQ на весах;
  • конусную гипотезу (как свойство функции, не параметров).

И она же даёт практический вывод: для сжатия LLM на edge нужно два разных инструмента, потому что мы сжимаем две разные сущности — закон и траекторию.

Приложение А. Воспроизводимость

CHMC v6 (квантование). strict_sequential=true; dampening λ = 0,05; residual_bits = 4; group_size = 128 → суммарный BPW = 4,2875 (ранги на слои из v6/bpw.py, Таблица 1); seed = 42. Ключевые конфигурации измерены ≥3 сидами (SmolLM и TinyLlama), Qwen — одиночный прогон (помечен в Таблице 4). GPTQ-референс: GPTQModel, 4-bit / group-128.

TDA-анализ (топология). kNN-граф с k = 32, sample_points = 512 на блок, seed = 42; H₀ — union-find по компонентам связности + кросс-чек GUDHI (0 несовпадений); W₁-расстояние — обрезанное топ-64 L∞. Артефакты: results_v6/tda_analysis/.

Диагностика дрейфа. D = post − pre на выходах decoder-блоков (одни и те же 2048 токенов); PCA — SVD центрированных матриц (numpy); конусный базис V_c — топ-10 правых сингулярных векторов cent(pre); cap30 = ‖Dc·V_c[:, :30]‖²/‖Dc‖². Критерии остановки (d90 > 50 или overlap < 0,3) объявлены до экспериментов. Артефакты: results_v6/drift_correction/step1_diagnostics/.

Окружение. Все анализы в статье — CPU-only (torch 2.13.0+cpu); GPU-прогоны квантования выполнялись в отдельном окружении. Фигуры: results_v6/article/figures/.

Приложение Б. TDA-сравнение по моделям (pre vs post CHMC v6)

Модель

Средний косинус pre/post

(по блокам)

b1-gain / b1-drop

(блоки)

Эфф. ранг весов, медиана

pre → post

Мин. эфф. ранг (pre)

H₀-кроссчек

SmolLM-135M

0.9938

14 / 1

274 → 276 (+0,9%)

18.8

0 несовпадений

Qwen2.5-0.5B

0.9864

8 / 9

358 → 366 (+2,3%)

18.7

0 несовпадений

TinyLlama-1.1B

0.9907

8 / 4

930 → 941 (+1,2%)

22.1

0 несовпадений

Таблица 7. Персистентные гомологии облаков активаций (kNN k=32, sample_points=512): сжатие сохраняет макроструктуру — косинусы pre/post ≥ 0.986 по среднему блоков, эффективный ранг весов сдвигается на ≤ 2,3% — и добавляет микро-шум в виде ложных циклов (b1-gain). b1-drop — блоки, где циклы исчезли.

Приложение В. Источники и ссылки

Репозиторий проекта (код + воспроизводимые результаты): github.com/xmillogx-cmd/chmc-llm-quant

А. Упомянуто в статье напрямую

  • TurboQuant (Google Research, ICLR 2026) — геометрическое сжатие KV-кэша/эмбеддингов; точка отсчёта всего проекта: arXiv: 2504.19874 (Zandieh et al., «Online Vector Quantization with Near-optimal Distortion Rate») · блог Google Research — research.google
  • GPTQ — поколоночная компенсация ошибки квантования (Frantar et al., ICLR 2023): arXiv: 2210.17323
  • QuIP# — квантование с целочисленными кодовыми словами (Tseng et al., ICML 2024): arXiv: 2402.04396
  • Lloyd–Max-квантизатор: S. Lloyd, «Least squares quantization in PCM», IEEE Trans. Information Theory, 28(2), 1982 (оригинал — 1957) — IEEE Xplore; J. Max, «Quantizing for minimum distortion», IRE Trans. Information Theory, 6(1), 1960 — Semantic Scholar
  • QJL и лемма Джонсона–Ленстрасса: QJL — в составе TurboQuant (arXiv: 2504.19874); W. Johnson, J. Lindenstrauss, «Extensions of Lipschitz mappings into a Hilbert space», Contemp. Math., 26, 1984 — Semantic Scholar
  • Рандомизированный SVD: N. Halko, P.-G. Martinsson, J. A. Tropp, «Finding structure with randomness: stochastic algorithms for decomposing matrices», SIAM Review, 2011 — arXiv: 0909.4061
  • TDA (топологический анализ данных): giotto-tda — arXiv: 2004.02551 (JMLR 2021); GUDHI — gudhi.inria.fr; классика (без ссылок): Edelsbrunner, Letscher, Zomorodian, «A persistent topological approach to topology-based data analysis», 2002; G. Carlsson, «Topology and data», Bull. AMS, 2009.

Б. Модели и данные (использованы в экспериментах)

В. Дополнительная литература (смежные методы)

P.S. Все прогоны воспроизводимы: равный бит-бюджет 4,29, ключевые конфигурации измерены минимум тремя сидами (SmolLM и TinyLlama; Qwen — предварительный одиночный прогон, помечен в таблице), критерии остановки объявлялись до экспериментов. Негативный результат, полученный честно, — тоже результат.

9 views·2 shares