История одного исследования: от геометрии эмбеддингов — через 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 во взвешенной норме — так, чтобы ошибка была мала именно там, где активации велики:

c_{j} = (1/n) · Σ_{t} x²_{t,j} + λ · mean(c), λ = 0.05min_{W_lr} ‖(W − W_lr) · diag(√c)‖²_{F} ⇒ W̃ = W · diag(√c), (U, S, Vᵀ) = svd_lowrank(W̃, q=r, niter=5), W_lr = (U·S)Vᵀ · diag(1/√c)

Шаг 1 из кода (v6/chmc_v6.py + v5/stabilizers.py): c — демпфированная диагональная ковариация активаций; svd_lowrank — рандомизированный SVD с power-итерациями (niter=5). Именно здесь конусная гипотеза входит в метод: направления с высокой энергией активаций аппроксимируются точнее.

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

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

H = XᵀX / n + λ · mean(diag(H)) · I, H⁻¹ — через разложение Холецкогодля колонки j (в act-order): q_{j} = round(col_{j}/scale)_{g} · scale_{g}, err_{j} = (col_{j} − q_{j}) / H⁻¹[j,j], R[:, j+1:] ← R[:, j+1:] − err_{j} · H⁻¹[j, j+1:]

Шаг 2 из кода (quantize_with_compensation_strict): group_size = 128 — масштаб общий на группу выходных каналов; strict_sequential=true означает «по одной колонке за раз, полная строка H⁻¹» — это и есть настоящий обновляющий шаг GPTQ.

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

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

BPW_{CHMC} = [16·r·(o+i) + b·o·i + 16·⌈o/gs⌉·i] / (o·i) vs BPW_{GPTQ} = [b·o·i + 16·o·⌈i/gs⌉] / (o·i)r_{layer} = floor( (BPW_{tgt} · o·i − b·o·i − 16·⌈o/gs⌉·i) / (16·(o+i)) )

Шаг 3 из кода (v6/bpw.py): o, i — размеры слоя; b = residual_bits = 4; gs = group_size = 128. У CHMC группы масштабов идут вдоль выходных каналов (⌈o/gs⌉·i), у GPTQ — вдоль входных (o·⌈i/gs⌉). Единственный свободный параметр бюджета — ранг r.

Итог: 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.Слева — доля энергии трёх главных компонент в центрированном облаке активаций каждого блока [pre;post] (та же величина, что «PCA-3D var» на Рисунке 1); справа — средний попарный косинус между токенами внутри блока (анизотропия). После первых 1–2 блоков почти вся сеть лежит в низкоразмерном конусе: 80–99% энергии в трёх главных компонентах; на обоих краях изотропнее (13–43%). Позиция пика различается по моделям — у SmolLM он в средних блоках, у Qwen и TinyLlama достигается уже с первых. pre ≈ post ≈ объединённое облако: концентрация — свойство самих активаций.
Модель (размерность d) Средний попарный косинус pre-токенов, диапазон по блокам Доля энергии top-3 ПК: края → пик → спад cos(preᵢ, postᵢ) по токенам
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(preᵢ, postᵢ) — косинус одного и того же токена до/после сжатия 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 — гипотеза неверна, направление закрыть.

d(x) = (W_comp − W) · x, D = [d(x₁); …; d(xₙ)] — поле дрейфа на калибровочных токенахΔW_{ideal} = E · V_c·V_cᵀ (ранг ≤ 30, вдоль осей конуса), cap30 = ‖Dc · V_c[:, :30]‖² / ‖Dc‖²

Диагностика дрейфа (drift_diagnostics.py): D — матрица дрейфов на выходах decoder-блоков (одни и те же 2048 токенов, pre/post CHMC v6);

V_c — топ-10 правых сингулярных векторов центрированного облака входов; cap30 — верхняя граница доли энергии дрейфа, которую могла бы захватить коррекция ранга 30 вдоль осей конуса.

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

Гипотеза не подтвердилась — чисто, по заранее объявленному правилу, без соблазна «подкрутить и попробовать ещё».

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

Модель (d) Блок d90 дрейфа Эфф. ранг дрейфа Top-10 overlap с конусом cap30, %
SmolLM-135M (576) 0 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) 0 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) 0 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, дельта-коррекция) даёт ноль или минус.

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

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

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

h_{l+1} = F_{l}(h_{l})

где $F_l$ задаётся весами слоя l. Тогда всё встаёт на места:

  • Веса = закон динамики (программа, «гамильтониан» системы). Плотный, полноранговый, вычищенный обучением.
  • Внутреннее состояние h_l = траектория системы. И траектория лежит на низкоразмерном аттракторе — это и есть наш конус (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.

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

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


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