Spiking Neural Network
Импульсная нейронная сеть (SNN) передаёт информацию в виде импульсов с временными метками, подобно биологическим нейронам, обеспечивая энергоэффективный нейроморфный ИИ. Рассматриваются нейроны и обучение.
Спайковая нейронная сеть (SNN) — это нейронная сеть, в которой нейроны обмениваются дискретными сигналами по принципу «всё или ничего», называемыми спайками; такой способ ближе к передаче сигналов биологическими нейронами. Каждый нейрон накапливает входящие спайки во внутреннем мембранном потенциале, который постепенно затухает, и генерирует собственный спайк, только когда потенциал пересекает порог. Информация содержится в том, какие нейроны срабатывают и когда, поэтому SNN обрабатывают данные по мере их поступления и выполняют вычисления только при появлении спайков. Благодаря такой разреженности, обусловленной событийной обработкой, эти сети привлекательны для энергоэффективного периферийного ИИ на нейроморфных чипах и хорошо подходят для событийных камер, которые также передают изменения в виде асинхронных событий. В 1997 году Вольфганг Маасс описал SNN как третье поколение моделей нейронных сетей — после пороговых элементов и сетей с непрерывными функциями активации.
Как работают спайковые нейроны#
Наиболее широко используется модель нейрона с утечкой и интегрированием до порога (LIF). На каждом шаге по времени мембранный потенциал уменьшается на фиксированную долю, к нему добавляются взвешенные входные спайки, и, если потенциал достигает порога, нейрон выдаёт спайк и сбрасывает потенциал. Нейрон со слабым входом никогда не достигает порога, а нейрон с сильным входом часто срабатывает, поэтому частота срабатывания кодирует силу входного сигнала. В приведённой ниже симуляции на три нейрона LIF подаются разные постоянные входные токи:
import torch
# Three leaky integrate-and-fire neurons, each driven by a constant input current
current = torch.tensor([0.15, 0.3, 0.6])
decay, threshold = 0.8, 1.0 # fraction of potential kept per step, firing threshold
potential = torch.zeros(3)
spike_counts = torch.zeros(3)
for step in range(20):
potential = decay * potential + current # leak, then integrate the input
spikes = (potential >= threshold).float() # fire where the threshold is crossed
potential = potential * (1 - spikes) # reset neurons that fired
spike_counts += spikes
print(f"Spikes in 20 steps: {spike_counts.tolist()}")Выводится Spikes in 20 steps: [0.0, 4.0, 10.0]. При входном значении 0.15 потенциал стабилизируется на уровне 0.15 / (1 − 0.8) = 0.75, ниже порога, поэтому нейрон никогда не срабатывает. Входное значение 0.3 вызывает 4 спайка, а значение 0.6 пересекает порог через каждый шаг, что даёт 10 спайков. Такие библиотеки, как snnTorch, предоставляют подобные слои LIF в виде модулей PyTorch, которые обучаются на GPU.
Кодирование информации в спайках#
Прежде чем SNN сможет использовать данные, их нужно преобразовать в спайки; выбранный способ кодирования влияет и на точность, и на скорость:
- Частотное кодирование: Значение преобразуется в частоту срабатывания, как в симуляции выше. Этот способ надёжен, но для точного представления значения требуется много шагов по времени.
- Временное кодирование: Значение преобразуется во время возникновения спайка; например, более яркие пиксели вызывают более ранние спайки, что позволяет передать информацию всего несколькими спайками.
- Событийные датчики: Камеры для нейроморфного зрения выдают событие, похожее на спайк, при каждом изменении яркости пикселя; временное разрешение составляет микросекунды, а фиксированной частоты кадров нет, поэтому такие данные можно напрямую подавать в SNN.
Обучение SNN#
Спайк — это ступенчатая функция, производная которой почти везде равна нулю, поэтому стандартный обратный проход не может передавать через неё градиенты. Эту проблему решают тремя способами. При преобразовании ANN в SNN обычную сеть обучают с функциями активации ReLU, а затем преобразуют каждую активацию в частоту срабатывания. При обучении с помощью суррогатного градиента жёсткий спайк сохраняется на прямом проходе, но на обратном проходе вместо его производной используется производная гладкой функции; затем сеть обучают методом обратного распространения во времени, как рекуррентную нейронную сеть (RNN). Пластичность, зависящая от времени спайков (STDP), — это локальное правило, вдохновлённое биологией: оно усиливает синапс, когда входной спайк предшествует выходному, и позволяет обучаться без меток. Большинство современных SNN с высокой точностью обучают напрямую с помощью суррогатных градиентов; для них нужно намного меньше шагов по времени, чем для преобразованных сетей, а преобразование остаётся самым простым способом перенести существующую модель.
Нейроморфное оборудование#
SNN экономят больше всего энергии на чипах, специально разработанных для них. В нейроморфных процессорах память размещена рядом с множеством небольших ядер, обмен данными идёт с помощью сообщений о спайках, а вычисления выполняются только при поступлении спайков; кроме того, поскольку спайки бинарны, для каждого синаптического события требуется сложение, а не умножение. TrueNorth от IBM (2014) разместил миллион нейронов на одном чипе, SpiNNaker Манчестерского университета использует большие массивы ядер ARM, а Loihi 2 от Intel лежит в основе Hala Point — исследовательской системы 2024 года с 1 152 процессорами Loihi 2 и 1,15 миллиарда нейронов. На стандартных GPU, предназначенных для плотных матричных вычислений, SNN обычно работают медленнее эквивалентных обычных сетей.
SNN и обычные нейронные сети#
- Сигналы: Обычные сети, включая свёрточные нейронные сети (CNN) и трансформеры, передают непрерывные значения через каждый нейрон за один прямой проход. SNN передают бинарные спайки на протяжении многих шагов по времени, и в любой момент большинство нейронов остаются неактивными.
- Точность: Обычные сети по-прежнему лидируют на стандартных тестах для изображений, а SNN в основном сократили разрыв благодаря обучению с суррогатным градиентом и архитектурам, заимствованным у обычных моделей.
- Эффективность: SNN на нейроморфном оборудовании потребляют гораздо меньше энергии при разреженных событийных входных данных, например потоках событийных камер и непрерывно работающих аудиодатчиках.
Применение#
- Событийное зрение и робототехника: В исследовании Science Robotics 2024 года учёные из TU Delft управляли дроном с полностью спайковой сетью зрения и управления на Intel Loihi, преобразующей исходные данные событийной камеры в команды движения с частотой 200 Гц.
- Непрерывный мониторинг: Распознавание ключевых слов, жестов и аномалий в показаниях датчиков выигрывает от использования SNN, почти не потребляющих энергию, пока ничего не меняется.
- Обнаружение объектов: SpikeYOLO — импульсный детектор, представленный Синьхао Ло, Ман Яо и их коллегами на ECCV 2024. Он основан на кодовой базе Ultralytics и упрощает архитектуру Ultralytics YOLOv8 с помощью блоков, управляемых импульсами. Модель достигла mAP50-95 48,9% на COCO, используя обучение с целочисленными значениями и инференс, управляемый импульсами.










