Пакет ANN2SNN
Пакет ANN2SNN предназначен для создания нейронных сетей, которые можно преобразовать в импульсные нейронные сети и разместить для их исполнения на нейроморфном процессоре Алтай-2. Пакет ANN2SNN реализован на языке программирования Python.
Для создания нейронных сетей необходимо использовать специальные тернарные слои, в которых учитываются ограничения, характерные для нейроморфного процессора Алтай-2. Тернарные слои, используемые для создания нейронной сети, соответствуют слоям библиотеки Keras, со следующими основными отличиями:
- Входными и выходными данными каждого из слоев нейронной сети являются бинарные тензоры соответствующей размерности.
- Все веса слоев нейронной сети находятся в диапазоне
{-1,0,1}. - Значение смещения в слое нейронной сети находится в диапазоне от
-16 384до16 383.
При обучении нейронной сети, созданной с помощью тернарных слоев, стоит учитывать следующие особенности:
- В случае наличия небинаризованных данных для обучения и/или валидации необходимо сначала их привести к бинарному виду. Для это можно использовать алгоритмы кодирования и декодирования или создать нейросетевые обучаемые блоки, кодирующие и декодирующие данные.
- При обучении моделей бинарной классификации методом градиентного спуска для дифференцируемости функции потерь необходимо указать сигмоидную функцию (англ. sigmoid function) в качестве функции активации выходного слоя. После проведения обучения нужно заменить сигмоидноую активацию выходного слоя на активацию с функцией Хевисайда (англ. Heaviside function).
- При обучении моделей многоклассовой классификации методом градиентного спуска для дифференцируемости функции потерь необходимо указать многомерную логистическую функцию (англ. softmax function) в качестве функции активации выходного слоя. При размещении такой нейронной сети выходной вектор будет автоматически преобразован к бинарному виду, реализующему индикатор максимальной компоненты значения выходного вектора.
Сериализация и десериализация нейронных сетей проводится стандартными методами, предоставляемыми библиотекой Keras, с указанием параметра custom_objects в виде словаря тернарных слоев и функции активации heaviside.
Во время размещения нейронная сеть проверяется на соответствие ограничениям процессора. Проверка нейронной сети производится относительно параметров конфигурации нейроморфного процессора, указанных в YAML-файле. В результате размещения выдается информация о количестве ядер, необходимых для запуска нейронной сети на нейроморфном процессоре Алтай-2. Нейронная сеть переводится в формат, поддерживаемый процессором для ее дальнейшего запуска на аппаратном процессоре или его программном эмуляторе. Если нейронную сеть невозможно исполнить на нейроморфном процессоре из-за превышения допустимого количества ядер, выдается соответствующая ошибка.
В нейроморфном процессоре Алтай-2 предусмотрена возможность масштабирования за счет увеличения количества СБИС. По вопросам масштабирования вам нужно обратиться к специалистам "Лаборатории Касперского".
Вы можете провести примерную оценку количества ядер, необходимых для исполнения нейронной сети, по формуле, представленной на рисунке ниже, где:
- x соответствует необходимому количеству ядер. После расчета количества ядер по формуле округлите результат в большую сторону.
- i соответствует порядковому номеру слоя нейронной сети.
- n соответствует количеству слоев нейронной сети.
- w соответствует первой размерности тензора слоя нейронной сети.
- h соответствует второй размерности тензора слоя нейронной сети.
- c соответствует третьей размерности тензора слоя нейронной сети.

Формула оценки количества ядер
Количество ядер, необходимых для размещения полносвязного слоя TernaryDense, зависит от количества входных нейронов в слое. Если количество входных нейронов не больше 512, то вы можете рассчитать необходимое количество ядер по формуле, представленной ниже, где:
- x соответствует необходимому количеству ядер. После расчета количества ядер по формуле округлите результат в большую сторону.
- i соответствует порядковому номеру слоя нейронной сети.
- n соответствует количеству полносвязных слоев нейронной сети.
- U соответствует количеству целевых нейронов.

Формула оценки количества ядер для слоя TernaryDense
Если количество входных нейронов больше 512, то вы можете рассчитать необходимое количество ядер по формуле, представленной ниже, где:
- x соответствует необходимому количеству ядер. После расчета количества ядер по формуле округлите результат в большую сторону.
- i соответствует порядковому номеру слоя нейронной сети.
- n соответствует количеству полносвязных слоев нейронной сети.
- U соответствует количеству целевых нейронов.
- N соответствует количеству входных нейронов для слоя.

Формула оценки количества ядер для слоя TernaryDense
Для нейронных сетей, созданных на базе пакета ANN2SNN, возможны следующие варианты инференса:
- Инференс за количество тиков, равное количеству слоев в нейронной сети. При этом варианте инференса за тик исполнения нейронной сети вычисляется только один слой нейронной сети, а обработанные данные передаются в последующий слой. Время инференса прямо пропорционально количеству слоев нейронной сети.
- Инференс за один тик. При этом варианте инференса каждый слой нейронной сети получает данные от предыдущего слоя и обрабатывает их. Время инференса составляет около 1,5 мс.
