Spiking Neural Network
Uma rede neural de impulsos (SNN) transmite informações como impulsos temporizados, à semelhança dos neurônios biológicos, para IA neuromórfica de baixo consumo. Aborda neurônios e treinamento.
Uma rede neural de disparos (SNN) é uma rede neural cujos neurônios se comunicam por eventos discretos de tudo ou nada chamados disparos, mais próximos da maneira como os neurônios biológicos transmitem sinais. Cada neurônio acumula os disparos recebidos em um potencial de membrana interno que diminui lentamente, e só emite seu próprio disparo quando esse potencial ultrapassa um limite. A informação está nos neurônios que disparam e no momento em que disparam, então as SNNs processam os dados à medida que chegam e só executam operações quando ocorrem disparos. Essa esparsidade orientada a eventos as torna atraentes para IA de baixo consumo na IA de borda em chips neuromórficos e naturalmente adequadas para câmeras de eventos, que também registram mudanças como eventos assíncronos. Em 1997, Wolfgang Maass descreveu as SNNs como a terceira geração de modelos de redes neurais, depois das unidades de limiar e das redes com ativações contínuas.
Como funcionam os neurônios de disparo#
O modelo mais utilizado é o neurônio de integração e disparo com vazamento (LIF). Em cada etapa temporal, seu potencial de membrana diminui por uma fração fixa, os disparos de entrada ponderados são somados e, se o potencial atingir o limite, o neurônio emite um disparo e reinicia. Um neurônio com entrada fraca nunca atinge o limite, enquanto um com entrada forte dispara com frequência; assim, a frequência de disparos codifica a intensidade da entrada. A simulação abaixo fornece diferentes correntes de entrada constantes a três neurônios 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()}")Ele exibe Spikes in 20 steps: [0.0, 4.0, 10.0]. Com uma entrada de 0.15, o potencial se estabiliza em 0.15 / (1 − 0.8) = 0.75, abaixo do limite, então esse neurônio nunca dispara. Uma entrada de 0.3 produz 4 disparos, e uma entrada de 0.6 ultrapassa o limite a cada duas etapas, gerando 10 disparos. Bibliotecas como snnTorch oferecem camadas LIF como esta em módulos PyTorch que treinam em GPUs.
Codificação de informações em disparos#
Os dados precisam ser convertidos em disparos antes que uma SNN possa usá-los, e a escolha da codificação afeta tanto a precisão quanto a velocidade:
- Codificação por frequência: Um valor se transforma em uma frequência de disparos, como na simulação acima. É robusta, mas exige muitas etapas temporais para representar um valor com precisão.
- Codificação temporal: Um valor se transforma no momento de um disparo, por exemplo, com disparos mais cedo para pixels mais brilhantes, transmitindo informações com pouquíssimos disparos.
- Sensores de eventos: Câmeras de visão neuromórfica emitem um evento semelhante a um disparo sempre que o brilho de um pixel muda, com precisão de microssegundos e sem uma taxa de quadros fixa, permitindo que os dados alimentem diretamente uma SNN.
Treinamento de SNNs#
Um disparo é uma função em degrau cuja derivada é zero em quase todos os pontos, então a retropropagação padrão não consegue propagar gradientes por ela. Três abordagens contornam esse problema. A conversão de ANN para SNN treina uma rede comum com ativações ReLU e converte cada ativação em uma frequência de disparos. O treinamento com gradiente substituto mantém o disparo rígido na passagem direta, mas substitui sua derivada por uma função suave na passagem reversa; em seguida, treina com retropropagação ao longo do tempo, como uma rede neural recorrente (RNN). A plasticidade dependente do tempo de disparo (STDP) é uma regra local inspirada na biologia que fortalece uma sinapse quando o disparo de entrada precede o disparo de saída, e aprende sem rótulos. A maioria das SNNs recentes de alta precisão é treinada diretamente com gradientes substitutos, que exigem muito menos etapas temporais do que as redes convertidas; a conversão continua sendo o caminho mais simples para aproveitar um modelo existente.
Hardware neuromórfico#
As SNNs economizam mais energia em chips projetados para elas. Os processadores neuromórficos colocam memória junto a muitos núcleos pequenos, comunicam-se por mensagens de disparo e só calculam quando os disparos chegam; como os disparos são binários, cada evento sináptico exige uma soma em vez de uma multiplicação. O TrueNorth da IBM (2014) reuniu um milhão de neurônios em um único chip, o SpiNNaker da Universidade de Manchester usa grandes conjuntos de núcleos ARM, e o Loihi 2 da Intel alimenta o Hala Point, um sistema de pesquisa de 2024 com 1.152 processadores Loihi 2 e 1,15 bilhão de neurônios. Em GPUs padrão, projetadas para operações densas com matrizes, as SNNs geralmente são executadas mais lentamente do que redes convencionais equivalentes.
SNNs e redes neurais convencionais#
- Sinais: Redes convencionais, incluindo redes neurais convolucionais (CNNs) e transformers, transmitem valores contínuos por cada neurônio em uma única passagem direta. As SNNs transmitem disparos binários ao longo de muitas etapas temporais, e a maioria dos neurônios permanece inativa a cada instante.
- Precisão: As redes convencionais ainda lideram nos benchmarks padrão de imagens, e as SNNs reduziram a diferença principalmente por meio do treinamento com gradientes substitutos e de arquiteturas adaptadas de modelos convencionais.
- Eficiência: SNNs executadas em hardware neuromórfico consomem muito menos energia com entradas esparsas e orientadas a eventos, como fluxos de câmeras de eventos e áudio sempre ativo.
Aplicações#
- Visão baseada em eventos e robótica: Em um estudo de 2024 publicado na Science Robotics, pesquisadores da TU Delft pilotaram um drone com uma rede totalmente baseada em disparos para visão e controle, executada no Loihi da Intel, mapeando dados brutos de uma câmera de eventos em comandos de movimento a 200 Hz.
- Sensoriamento sempre ativo: A detecção de palavras-chave, o reconhecimento de gestos e a detecção de anomalias em sensores se beneficiam de SNNs que praticamente não consomem energia quando nada muda.
- Detecção de objetos: O SpikeYOLO, detector de disparos da ECCV 2024 criado por Xinhao Luo, Man Yao e colegas, foi desenvolvido com base na base de código da Ultralytics e simplifica a arquitetura Ultralytics YOLOv8 com blocos orientados a disparos, alcançando 48,9% de mAP50-95 no COCO com treinamento de valores inteiros e inferência orientada a disparos.










