Июнь 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
ссылка на оригинал статьи https://habr.com/ru/articles/1048200/