Почему геометрия не сжимает веса
Как я пытался применить 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 во взвешенной норме — так, чтобы ошибка была мала именно там, где активации велики:
Шаг 2. Остаток — поколоночная компенсация по GPTQ
R = W − W_lr квантуется алгоритмом, совпадающим с GPTQ: гессиан из калибровочных активаций, обратный через разложение Холецкого, колонки в порядке убывания важности (act-order); после квантования каждой колонки её ошибка вычитается из оставшихся:
Шаг 3. Равный бит-бюджет
Каждый слой хранит: низкоранговую часть (U, V в FP16), INT4-остаток и групповые масштабы. Биты на вес считаются явно, а ранг rlayer подбирается так, чтобы суммарный BPW не превышал 4,2875 — уровень GPTQ:
Итог: 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)
Qwen2.5-0.5B (d = 896)
TinyLlama-1.1B (d = 2048)
Рисунок 1. 3D-проекции активаций четырёх представительных блоков (первый, четверть, середина, последний) на три главных компонента центрированного объединённого облака [pre;post]: синие точки — исходная модель (pre), оранжевые — после сжатия CHMC v6 (post); серые линии связывают один и тот же токен до и после. В заголовках панелей — доля дисперсии, объясняемая этими тремя направлениями («PCA-3D var»). В середине сети облако свёрнуто в конус, на краях — размазано. Паттерн повторяется на всех трёх архитектурах.
Полный профиль по блокам. Рисунок 2 и Таблица 2 дают честную картину по всем блокам: где именно «середина» — зависит от модели, но сам паттерн (узкий конус после первых 1–2 блоков, изотропнее на краях) удерживается везде.
Рисунок 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 — паритет).
Рисунок 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 сидам.
Рисунок 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 — гипотеза неверна, направление закрыть.
Результат на всех трёх моделях и всех блоках: d90 дрейфа = 227–792. Энергия разброса размазана по сотням направлений. Идеализированная коррекция с рангом 30 захватила бы от ~3 до ~39% энергии дрейфа (Таблица 6). Гипотеза не подтвердилась — чисто, по заранее объявленному правилу, без соблазна «подкрутить и попробовать ещё».
Рисунок 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, дельта-коррекция) даёт ноль или минус.
Но это лишь половина картины. Вторая половина — это понимание, которое пришло позже, в одном разговоре.
Активации — не «промежуточные эмбеддинги». Это внутреннее состояние модели
Трансформер — дискретная динамическая система:
- Веса = закон динамики (программа, «гамильтониан» системы). Плотный, полноранговый, вычищенный обучением.
- Внутреннее состояние hl = траектория системы. И траектория лежит на низкоразмерном аттракторе — это и есть наш конус (d90=9, анизотропия 0.75).
Это классическая картина из теории динамических систем: уравнения движения могут быть сколь угодно сложными, но траектории сходятся к низкоразмерному аттрактору. Мы это буквально измерили — причём аттрактор стягивается к середине сети (98.9% дисперсии в 3 ПК в средних блоках против 13–43% на краях): самая глубокая точка обработки — самое сжатое состояние.
Теперь асимметрия становится тривиальной:
- Траектория избыточна: она лежит на аттракторе, вне конуса просто ничего нет. Поэтому состояние сжимаемо — TurboQuant и жмёт KV-кэш (память состояний) в 6–8×.
- Закон плотный: это он держит траекторию на аттракторе. Избыточности в нём нет — обучение её убрало. Поэтому геометрия там не помогает, и выигрывает GPTQ.
Модель обучена создавать избыточность в вычислениях, но не в параметрах. Она — генератор конусной геометрии, но сама по себе не геометрична.
Честная оговорка: аттрактор — это интерпретация, а не теорема. Но интерпретация продуктивная: она не подгоняется под ответ, а предсказывает три независимых наблюдения, которые мы получили раньше.
Три наших результата в свете динамической системы
- Линейное накопление ошибки (1.02 → 1.33 по слоям). Возмущённая динамика (сжатые веса) отклоняет траекторию, но аттрактор тянет её обратно — расхождение линейное, а не экспоненциальное. Модель устойчива к квантованию именно благодаря конусной структуре.
- TDA «макро-гомеоморфизм с микро-шумом»: сжатие сохраняет макроструктуру аттрактора (косинусы pre/post ≥ 0.98, эффективный ранг весов сдвигается на ~1%), но насыщает его мелким шумом — ложными циклами (b1-gain).
- Высокоразмерный дрейф: возмущение траектории — не сдвиг вдоль конуса, а рассеяние вокруг него: состояние возвращается на аттрактор, а шум остаётся в поперечных направлениях. Отсюда d90 дрейфа 227–792.
Эпилог. Что это даёт
Прорыва не случилось: 100× сжатия нет, стабильной победы над GPTQ нет. Но случилось другое.
Во-первых, понимание. Я получил связную картину с механизмом: почему геометрия работает для активаций (TurboQuant) и не работает для весов; почему data-adaptive компенсация бьёт распределенческую оптимальность; где живёт конус и что происходит с топологией при сжатии.
Во-вторых, честные негативные результаты с объяснениями — редкий и ценный жанр. «QJL не может хранить веса, вот предел ошибки», «дрейф не низкоранговый, вот размерность», «ротация разрушает анизотропию, вот инвариант» — это готовые ответы для тех, кто пойдёт этим путём следом.
В-третьих, практика. Метод бьёт скалярное квантование в 6–11 раз на малых моделях — там, где оно катастрофически ломается, — и даёт интерпретируемый анализ модели (ранги, энергия, чувствительность слоёв), которого у чёрного ящика GPTQ нет.
И главное — я перестал думать о «победе над GPTQ». Я понял, что мой исходный вопрос был не «как сжать веса геометрически», а «где проходит граница геометрического сжатия». И ответ оказался красивым:
Идеальный 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.
Б. Модели и данные (использованы в экспериментах)
- SmolLM-135M — блог Hugging Face, 2024: huggingface.co/blog/smollm
- Qwen2.5-0.5B: arXiv: 2412.15115
- TinyLlama-1.1B: arXiv: 2401.02385
- WikiText (калибровка и PPL): S. Merity et al., «Pointer Sentinel Mixture Models» — arXiv: 1609.07843
- GPTQModel (библиотека для GPTQ-базлайна): github.com/ModelCloud/GPTQModel
- Исходная статья автора о геометрии эмбеддинг-пространств (конусная гипотеза) — блог: [вставить ссылку]
В. Дополнительная литература (смежные методы)
- AWQ — активационно-весовое квантование: arXiv: 2306.00978
- ASVD: arXiv: 2312.05821
- SVD-LLM — осведомлённое об усечении побеление (холецкий по XᵀX): arXiv: 2403.07378
- LQER — low-rank error correction («зеркальная двойняшка» дельта-коррекции): arXiv: 2402.02446
- Теорема аналогии в логике Хоара — формальные гарантии переноса, обсуждалась как рамка (метрика D_l): опубликованная статья, Nature Scientific Reports
P.S. Все прогоны воспроизводимы: равный бит-бюджет 4,29, ключевые конфигурации измерены минимум тремя сидами (SmolLM и TinyLlama; Qwen — предварительный одиночный прогон, помечен в таблице), критерии остановки объявлялись до экспериментов. Негативный результат, полученный честно, — тоже результат.
