Июнь 2026. Две недели экспериментов, 90% точности многошагового рассуждения и 15‑килобайтная модель, которая бьёт FP32‑аналог. Без LLM. Без GPU. Без единого хардкод‑правила.
Ternary GraphKAN — первый тернарный KAN
Kolmogorov‑Arnold Networks (KAN) - альтернатива MLP, предложенная в 2024. Все существующие реализации используют FP32 или 4‑битные веса (QuantKAN, KANtize). До трёх бит никто не опускался.
Что сделано
Тернарные веса {-1, 0, +1} — 1.58 бита на параметр. 79 800 параметров упаковываются в 15.4 КБ. Это первый KAN с квантованием ниже 4 бит.
Модель | Веса | Размер | MNIST | Fashion‑MNIST |
|---|---|---|---|---|
GraphKAN 256→100→10 | float | 15.4 КБ | 94.77% | 84.1% |
GraphKAN 256→100→10 | ternary {-1,0,+1} | 15.4 КБ | 96.15% | 86.68% |
MLP 256→100→10 | float | 106.8 КБ | ~93% | - |
15.4 КБ — самый маленький KAN с >95% на MNIST.
Эффект регуляризации квантованием
Неожиданное открытие: точность растёт в процессе квантования.
float (94.77%) → STE ternary → hard clamp → finetune (96.15%)
↑ ↑ ↑
+1.01% +0.31% +0.06%
Дискретные веса работают как регуляризатор, отсекая шум в градиентах. В литературе по KAN такой эффект не описан.
Как это устроено
Архитектура. Граф из 366 нейронов, 26 600 направленных связей. Каждая связь — интерполяция по трём контрольным точкам на позициях [-1, 0, 1]. Точки — тернарные {-1,0,+1}. Tanh активация, синхронные циклы обновления.
Обучение. 4-фазный QAT:
Float clamp — веса в [-1, 1]
STE ternary — прямой проход тернарный, обратный float
Hard clamp — принудительная фиксация {-1,0,+1}
Finetune — только scale+bias
Упаковка. Для деплоя тернарные значения упаковываются по 4 штуки в uint8: {-1}→00, {0}→01, {+1}→10. 79 800 параметров = 19 950 байт.
Куда это помещается
Устройство | Память | Вмещается? |
|---|---|---|
Cortex‑M4 L1 cache | 16–32 КБ | ✅ |
RISC‑V микроконтроллер | 16–64 КБ | ✅ |
DSP смарт‑часов | 32–128 КБ | ✅ |
$0.50 чип | 16–64 КБ | ✅ |
VSA-Reasoner — рассуждение без LLM
Vector‑Symbolic Architecture (VSA) представляет знания как векторы высокой размерности (1024-8192). Факты кодируются связыванием (bind) и объединяются суперпозицией (bundle). Дёшево, интерпретируемо, но шумно.
Проблема
В VSA при bundle более ~12 фактов возникает шум суперпозиции: unbind даёт 80% точности независимо от размерности векторов. D=1024 или D=8192 — результат одинаковый. Это фундаментальное ограничение: sum_{i≠k} (s_i·s_k)·o_i не зависит от D.
Решение
Три learned‑компонента, собранных в пайплайн:
1. Предикатно‑шардированная память — факты группируются по предикатам. Вместо 100+ фактов в одном векторе - ~12 на шард.
2. Нейронный резонатор (16 КБ, тернарные веса) — learned итеративное уточнение VSA‑запроса:
VSA query → proj(256) → [ternary matmul ×5] → unproj(D) → cleanup
93% точности против 80% у чистого VSA.
3. Контроллер + ChainScorer - float32 MLP выбирает предикат, Transformer оценивает кандидата. Beam search ширины 1-3.
Пайплайн целиком
Question → Parser → (entity, goal)
→ PredicateShardedStore (VSA память)
→ FastController (MLP, <1 КБ)
→ GraphKANResonator (16 КБ, ternary)
→ ChainScorer (Transformer)
→ Beam search (width 1–3)
→ Answer (entity)
Результаты
Метод | Overall | 1‑hop | 2‑hop | 3‑hop |
|---|---|---|---|---|
VSA direct | 30% | 90% | 0% | 0% |
Resonator only | 30% | 90% | 0% | 0% |
Ctrl + Res + Scorer | 90% | 100% | 100% | 70% |
96 фактов, 53 сущности, 30 запросов. Все learned‑компоненты, никаких хардкод‑правил.
Размеры
Компонент | Параметры | Размер |
|---|---|---|
GraphKANResonator | 65 536 тернарных | 16 КБ |
FastController | 37 384 float | <1 КБ |
ChainScorer | ~4 000 float | <1 КБ |
VSA память (96 фактов) | D=1024 | ~44 КБ |
Итого | <62 КБ |
CPU‑only инференс.
Что дальше
Оба изобретения используют один и тот же 4‑фазный QAT и одинаковую упаковку весов. Это не случайность — тернарный формат оказался универсальным: одни и те же 2 бита работают и для KAN, и для резонатора. Код приватный.
Публичные тизеры:
Автор: Fakeonomics, июнь 2026


























