Инструменты14 сентября 2026 г., 09:47 МСК🤖 Auto

Тернарная нейросеть на C#: квантование до тритов и новые форматы

Разбор архитектуры Ternary LLM и сравнение форматов данных от FP32 до MXFP4. Почему переход на триты (B1.58) может снизить требования к памяти без потери качества.

Баннер новости 7429

Суть проблемы: квантизация и стоимость памяти

Запуск локальных LLM требует огромных объемов ОЗУ. Стандартный путь — квантизация моделей, обученных в FP32, до INT4. Однако полный переход на низкую разрядность (например, INT4) на этапе обучения приводит к нестабильности градиентов и застреванию в локальных минимумах. Поэтому чувствительные параметры (градиенты, состояния оптимизатора Adam) часто оставляют в FP32/BF16, что нивелирует экономию.

Альтернатива — обучение моделей с изначально низкой точностью. Автор статьи исследует переход к тернарной логике (тритам), где веса принимают значения -1, 0, +1, что теоретически снижает требования к памяти и вычислительным ресурсам.

Фундамент: бит, трит и интерпретация данных

Статья подчеркивает, что аппаратно поддерживаются лишь бинарные операции. Все сложные форматы (FP32, INT8) — это надстройки над битами. Информационная емкость измеряется в битах, но количество состояний может быть другим. Например, трит имеет 3 состояния, что соответствует 1.585 бита информации на символ (log₂3).

Важно различать INT2 (интерпретация 2 бит как целого числа) и квадрит (информационная единица с 4 состояниями). Квадрит не привязан к бинарной системе и может представлять любые 4 значения, тогда как INT2 жестко фиксирован (например, -2, -1, 0, 1 в дополнительном коде).

Сравнение форматов данных

Ниже приведена сводная таблица форматов, упомянутых в обзоре, с акцентом на емкость и диапазон значений:

Формат / Система Емкость (бит) Кол-во состояний Примерный диапазон
Binary (Бит) 1 2 0, 1
Ternary (Трит) 1.585 3 −1, 0, +1
Quaternary (Квадрит) 2 4 −2, −1, +1, +2 (условно)
INT2 2 4 −2 … +1 (доп. код)
INT4 4 16 −8 … +7
FP8 E4M3 8 256 ≈ −448 … +448
BF16 16 65 536 ≈ ±3.39×10³⁸
FP32 32 4.29×10⁹ ≈ ±3.403×10³⁸

Почему это важно для C# и локального AI

Реализация тернарной нейросети на C# демонстрирует, что можно создавать эффективные инференс-движки, работающие с нестандартными форматами. Использование тритов (B1.58) позволяет сократить объем весов модели по сравнению с INT4, сохраняя при этом бинарную природу вычислений на уровне битовых операций. Это открывает путь к запуску более сложных моделей на слабом железе без использования тяжелых библиотек квантизации.

Вывод

Переход от FP32 к тернарным весам — это не просто сжатие, а изменение архитектуры обучения. Хотя полная замена FP32 на INT4/INT4 нестабильна, гибридные подходы и использование тритов предлагают новый баланс между размером модели и качеством инференса, что особенно актуально для разработчиков на C#, стремящихся оптимизировать локальный AI.

Источник: Habr ↗