Spiking Neural Network
스파이킹 신경망(SNN)은 생물학적 뉴런처럼 시간 정보가 포함된 스파이크로 정보를 전달해 저전력 뉴로모픽 AI를 구현합니다. 뉴런과 학습을 다룹니다.
스파이킹 신경망(SNN)은 뉴런이 스파이크라고 부르는 이산적인 전부 아니면 전무 방식의 이벤트로 소통하는 신경망이며, 생물학적 뉴런의 신호 전달 방식과 더 유사합니다. 각 뉴런은 내부 막전위에 입력 스파이크를 축적하고, 막전위는 서서히 감소합니다. 막전위가 임계값을 넘을 때만 자체 스파이크를 발생시킵니다. 정보는 어떤 뉴런이 언제 발화하는지에 담기므로, SNN은 데이터가 시간에 따라 들어오는 대로 처리하며 스파이크가 발생할 때만 연산합니다. 이벤트 기반 희소성 덕분에 SNN은 뉴로모픽 칩의 저전력 엣지 AI에 적합하며, 비동기 이벤트 형태로 변화량을 보고하는 이벤트 카메라와도 자연스럽게 잘 맞습니다. Wolfgang Maass는 1997년에 SNN을 임계값 유닛과 연속 활성화 네트워크에 이어 신경망 모델의 제3세대로 설명했습니다.
스파이킹 뉴런의 작동 방식#
가장 널리 사용되는 모델은 누설 적분 발화(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 계층을 GPU에서 학습할 수 있는 PyTorch 모듈로 제공합니다.
스파이크로 정보를 인코딩하기#
SNN에서 사용하려면 데이터를 스파이크로 변환해야 하며, 인코딩 방식은 정확도와 속도 모두에 영향을 줍니다.
- 발화율 인코딩: 위 시뮬레이션처럼 값을 발화 빈도로 변환합니다. 견고하지만 값을 정밀하게 표현하려면 많은 시간 단계가 필요합니다.
- 시간 인코딩: 밝은 픽셀일수록 더 일찍 스파이크를 발생시키는 것처럼 값을 스파이크 발생 시점으로 표현하여, 매우 적은 스파이크로 정보를 전달합니다.
- 이벤트 센서: 뉴로모픽 비전 카메라는 픽셀의 밝기가 변할 때마다 마이크로초 단위의 타이밍과 고정된 프레임 레이트 없이 스파이크와 유사한 이벤트를 출력하므로, 데이터를 SNN에 직접 입력할 수 있습니다.
SNN 학습#
스파이크는 거의 모든 곳에서 도함수가 0인 계단 함수이므로, 표준 역전파는 이를 통과해 그래디언트를 전달할 수 없습니다. 이를 해결하는 세 가지 방법이 있습니다. ANN-SNN 변환은 ReLU 활성화를 사용하는 일반 네트워크를 학습한 뒤 각 활성화를 발화율로 변환합니다. 대리 그래디언트 학습은 순방향 패스에서는 하드 스파이크를 유지하되 역방향 패스에서는 부드러운 함수의 도함수를 대신 사용하고, 순환 신경망(RNN)처럼 시간에 따른 역전파로 학습합니다. 스파이크 타이밍 의존 가소성(STDP)은 입력 스파이크가 출력 스파이크보다 먼저 발생할 때 시냅스를 강화하는 생물학적 영감의 국소 규칙이며, 레이블 없이 학습합니다. 최근의 고정확도 SNN 대부분은 대리 그래디언트를 사용해 직접 학습하며, 변환된 네트워크보다 훨씬 적은 시간 단계가 필요합니다. 기존 모델에서 출발할 때는 변환이 가장 간단한 방법입니다.
뉴로모픽 하드웨어#
SNN은 전용으로 설계된 칩에서 에너지를 가장 많이 절약합니다. 뉴로모픽 프로세서는 메모리를 다수의 소형 코어 옆에 배치하고, 스파이크 메시지로 통신하며 스파이크가 도착할 때만 연산합니다. 스파이크는 이진 값이므로 시냅스 이벤트마다 곱셈 대신 덧셈이 필요합니다. IBM의 TrueNorth(2014)는 단일 칩에 뉴런 100만 개를 집적했고, 맨체스터 대학교의 SpiNNaker는 대규모 ARM 코어 어레이를 사용합니다. Intel의 Loihi 2는 Loihi 2 프로세서 1,152개와 뉴런 11억 5천만 개를 탑재한 2024년 연구 시스템 Hala Point의 기반입니다. 밀집 행렬 연산에 맞춰 제작된 표준 GPU에서는 SNN이 일반적으로 동등한 기존 네트워크보다 느리게 실행됩니다.
SNN과 기존 신경망 비교#
- 신호: 합성곱 신경망(CNN)과 트랜스포머를 포함한 기존 네트워크는 한 번의 순방향 패스에서 모든 뉴런에 연속값을 전달합니다. SNN은 여러 시간 단계에 걸쳐 이진 스파이크를 전달하며, 대부분의 뉴런은 각 시점에 비활성 상태입니다.
- 정확도: 기존 네트워크는 표준 이미지 벤치마크에서 여전히 앞서고 있습니다. SNN은 주로 대리 그래디언트 학습과 기존 모델에서 차용한 아키텍처를 통해 격차를 좁혀 왔습니다.
- 효율성: 뉴로모픽 하드웨어에서 실행되는 SNN은 이벤트 카메라 스트림이나 상시 작동 오디오처럼 희소하고 이벤트 기반인 입력에서 에너지를 훨씬 적게 사용합니다.
응용 분야#
- 이벤트 기반 비전 및 로보틱스: 2024년 Science Robotics 연구에서 TU Delft 연구진은 Intel의 Loihi에서 완전한 스파이킹 비전 및 제어 네트워크를 탑재한 드론을 비행시켰습니다. 이 네트워크는 원시 이벤트 카메라 데이터를 초당 200회로 동작 명령에 매핑했습니다.
- 상시 센싱: 키워드 감지, 제스처 인식, 센서 이상 감지는 아무 변화가 없을 때 전력을 거의 소비하지 않는 SNN의 이점을 얻습니다.
- 객체 감지: Xinhao Luo, Man Yao와 동료들이 개발한 ECCV 2024 스파이킹 감지기 SpikeYOLO는 Ultralytics 코드베이스를 기반으로 하며 스파이크 기반 블록으로 Ultralytics YOLOv8 아키텍처를 단순화합니다. 정수값 학습과 스파이크 기반 추론으로 COCO에서 mAP50-95 48.9%를 달성했습니다.










