Тернарные нейронные сети на C#: модель размером 17 KB
Автор реализовал аналог Microsoft Bitnet 1.58 на C# с поддержкой тритовой логики, весит всего 17 KB. Обзор форматов от FP32 до FP4 и перспективы тернарных моделей.
В статье на Habr AI рассматривается растущий интерес к тернарным (тритовым) нейронным сетям, которые используют три уровня сигнала вместо привычных двух (0/1) или 32‑битных чисел с плавающей точкой. Автор отмечает, что популярность квантизации в виде 8‑битных и 4‑битных моделей уже начинает «выдыхаться», и в ближайшем будущем может появиться новый виток — модели, обученные на тернарной логике.
Для иллюстрации идеи представлена реализация модели Microsoft Bitnet 1.58 на C#. Стандартный вариант занимает 29 KB, а в «экстремальном» режиме — лишь 17,1 KB. При этом сохраняется совместимость с базовыми задачами классификации текста, демонстрируя, что даже при столь небольшом объёме памяти можно достичь адекватных результатов.
В статье подробно описываются форматы представления весов: от FP32 (32‑битное плавающее) через FP16, BF16, INT8, INT4 до FP4 и FP3 (тернарный). Приводятся примеры, как переход к более компактным представлениям влияет на точность и скорость вывода, а также обсуждаются инструменты, позволяющие конвертировать существующие модели в тернарный формат.
Автор делится кодом, доступным в публичном репозитории, и показывает, как собрать проект в .NET 8, использовать SIMD‑инструкции для ускорения вычислений и минимизировать размер бинарника за счёт linker‑strip и ReadyToRun.
В заключении делается вывод, что тернарные сети могут стать «золотой серединой» между точностью и ресурсными ограничениями, особенно для edge‑устройств и IoT‑решений, где каждый килобайт на счёт.
Тернарные сети открывают путь к микросервисам AI на микроконтроллерах и мобильных устройствах без облака. Для разработчиков это шанс экспериментировать с ultra‑light моделями, но потребуется переобучать сети под тритовую логику, что пока не автоматизировано. Студенты могут использовать готовый репозиторий как учебный пример оптимизации под .NET.


