Interference NDK: манифест к обновлению 2.0
В конце прошлого года состоялся релиз Interference NDK версии 2.0. Этот релиз важен по нескольким причинам. Во-первых, он содержит в себе большое количество изменений, улучшений и доработок по сравнению с предыдущей версией, во-вторых — цель проекта стала более сформированной и целостной. Проект обзавёлся приставкой NDK (Neural Development Kit), это означает, что он теперь включает в себя не только саму библиотеку, но и другие инструменты, позволяющие вывести разработку и отладку нейронных сетей модели Interference на новый уровень.
Библиотека Interference
Библиотека Interference является инструментом для обучения и применения (инференса) нейронных сетей модели Interference (интерференционная модель). Наше видение того, какими характеристиками должны обладать нейросетевые технологии, постепенно формируется в некий стандарт, который может быть применим для современных и будущих нейросетевых систем. В рамках проекта Interference мы стремимся реализовать такие характеристики:
- Высокая производительность. Библиотека написана на C++, не имеет внешних зависимостей и рассчитана на применение в том числе во встраиваемых системах. Она поддерживает различные процессорные архитектуры и технологии распараллеливания вычислений. В версии 2.0 появилась гибкая система вычислительных бэкендов (compute backend), позволяющих переносить вычислительную нагрузку на любые специализированные устройства (графические процессоры, FPGA, различные сопроцессоры и др.). Сейчас «из коробки», помимо стандартного однопоточного режима, доступен режим многопоточной обработки на CPU и поддержка стандарта OpenCL. Для добавления поддержки дополнительного вычислительного устройства не обязательно адаптировать под него весь код библиотеки, достаточно реализовать только то, что относится к математическому аппарату.
- Нейродинамичность. Мы убеждены, что одним из важнейших элементов, без которого не смогут полноценно существовать и развиваться будущие системы, использующие технологии ИИ, это возможность этих систем динамически изменять свою структуру и дообучаться в процессе работы. Здесь имеется в виду не распространённая «донастройка» модели, и именно обучение на совершенно новых данных, причём без переобучения всей модели заново. Только это сможет гарантировать истинную адаптивность системы, позволяя учиться решать задачи, которые она распознаёт впервые. Таким образом, в общем случае, вопреки устоявшимся парадигмам, мы не разделяем процессы обучения и инференса, они могут происходить итеративно на одном и том же устройстве. В новой версии Interference уделено особое внимание нейродинамике, добавлены новые методы, позволяющие создавать (производить репликацию), связывать и обучать отдельные нейроны или группы нейронов непосредственно в процессе работы модели.
- Предсказуемость, объяснимость и проверяемость результатов. Одной из серьёзнейших проблем современных нейросетевых систем является сложность анализа процесса их работы. Это приводит к тому, что оказывается трудно или даже невозможно отследить цепочку выводов при принятии системой того или иного решения, а это, в свою очередь, делает невозможным подтверждение корректности результата, а также затрудняет отладку. Большинство нейросетевых моделей работает по принципу чёрного ящика. Модель Interference решает и эту проблему, так как у каждого компонента сети есть осмысленная и чётко заданная роль. В новой версии библиотеки уделено большое внимание возможностям отладки нейросетевых структур. Это большой шаг в сторону Explainable AI — парадигмы, нацеленной на повышение объяснимости (интерпретируемости) процессов, происходящих внутри нейросети, что позволяет корректно оценить результаты её работы.
- Осмысленность обучения. Обычно, для того, чтобы нейросетевая система начала функционировать, её сначала необходимо обучить на достаточно большом объёме подготовленных данных (зависит от задачи). Нам кажется такой подход неэффективным. Мы делаем выбор в пользу более точечного подхода к обучению. Благодаря своим характеристикам, модель Interference позволяет выполнять распознавание после обучения даже на небольшом количестве данных. Например, чтобы начать отличать картинки друг от друга, достаточно предъявить нейросети хотя бы одну картинку на класс распознавания. Это значительно снижает стоимость и время обучения нейросетей модели Interference, а также повышает гибкость их работы, что делает их функционирование более схожим с тем, как работает человеческий мозг.
- Универсальность. Поддержка обработки различных типов данных необходима для построения мультимодальных систем. В модели Interference не имеет значения, какие данные будут обработаны — текст, изображения, аудио или различные мета-данные. Элементы нейронной сети могут быть гибко настроены под любой тип данных.
- Профилирование. В обновлении 2.0 были добавлены инструменты профилирования нейронных сетей. Они помогут производить отладку и оценивать её производительность на конечном устройстве. Это особенно важно при построении таких систем для функционирования на не очень производительных платформах.
- Открытость. Библиотека Interference, как и прежде, распространяется свободно, а её исходный код открыт (под лицензией MIT). Мы приветствуем участие в проекте единомышленников и специалистов со всего мира с целью проведения исследований и улучшения модели.
Interference Architect
Помимо изменений в самой библиотеке, с обновлением 2.0 в Interference NDK стал доступен инструмент для визуальной разработки и отладки нейронных сетей — Interference Architect. Он позволяет создавать нейронные сети Interference под конкретные задачи в графическом режиме. Удобный редактор позволяет с нуля создать свою архитектуру на базе модели Interference, а также настроить её параметры.
Встроенный отладчик Interlink позволяет выполнять удалённую отладку нейросети, которая работает на конечном устройстве или локально. Легко интегрировать синхронизацию состояния нейросети в код runtime-приложения и следить за её работой прямо в интерфейсе Interfernce Architect. Это значительно упрощает проведение исследований и тестирование созданной архитектуры.
Также стал доступен импорт и экспорт нейросетевых архитектур в формате JSON. Спроектированную нейросеть после экспорта в JSON файл можно открыть с помощью специальных методов библиотеки в своём коде, а затем использовать и модифицировать.
Interference Architect для коммерческого применения распространяется по подписке, а для академического использования и исследователей доступен совершенно бесплатно.
Примеры использования и практическое применение
В официальном репозитории теперь также доступны примеры решения различных практических задач в исходных кодах: пример системы распознавания изображений, пример мультимодальной обработки (текст+изображения), пример построения языковой модели (NLP). Постепенно этот список будет дополняться. Мы приветствуем применение Interference для решения новых практических задач.
Получить Interference NDK можно на странице проекта: nickware.group/products/indk/. Следите за новостями!