当前位置: 首页 > news >正文

浅谈脉冲神经网络

1、基本概念

脉冲神经网络(Spiking Neural Network, SNN)是第三代神经网络,最接近人脑的工作方式,和我们常用的 卷积神经网络CNN和循环神经网络RNN(第二代)有本质区别。脉冲神经网络:模仿人脑神经元不连续放电,只在电位累积到阈值时,发出一个脉冲(0/1 信号),所以平时不耗电。

脉冲神经网络就是用来类脑计算的,人脑相对GPU卡来说,具有算力高、功耗低(相当于耗电功率20W)和计算快的特点。神经元是大脑的基本功能单位,人脑中大约有860亿个神经元。突触是神经元之间的连接桥梁,人脑中的突触数量大概有100亿个。

SNN的基本计算单元是脉冲神经元,其活动以离散的脉冲形式进行。不同于传统神经元的连续激活值,脉冲神经元通过发放脉冲来传递信息,模拟生物神经元的行为。经过多年发展,已建立了多种脉冲神经元模型,如H-H模型、LIF模型、Izhikevich 模型和脉冲响应模型(SRM)等

1)脉冲神经网络三要素:
膜电位:神经元内部的电压,随输入累积
阈值:电压超过阈值,神经元发放脉冲(spike=1)
重置:发放后电压归零,等待下一次累积

2)SNN 最大特点:
事件驱动:只有发放脉冲时才计算,超低功耗
带时间信息:天然处理时序信号(语音、雷达、视觉动态)
仿生:最接近生物大脑的神经网络

2、简单举例

SNN 最常用、最简单的神经元模型LIF:Leaky Integrate-and-Fire(漏电流整合 - 发放)
规则:
1)输入电流 → 膜电位慢慢上升
2)膜电位 超过阈值 → 发出一个脉冲
3)发出脉冲后 → 膜电位重置为 0
没输入时 → 膜电位会慢慢泄漏(衰减)

实现代码如下:

import numpy as np import matplotlib.pyplot as plt # ====================== 1. 定义 LIF 神经元类 ====================== class LIFNeuron: def __init__(self, threshold=1.0, reset_potential=0.0, leak=0.1): # 神经元参数 self.threshold = threshold # 放电阈值 self.reset_potential = reset_potential # 放电后重置电位 self.leak = leak # 漏电系数(电位衰减) # 神经元状态 self.membrane_potential = 0.0 # 膜电位(初始为0) def forward(self, input_current): """ 一步更新:输入电流 → 更新膜电位 → 判断是否放电 返回:是否发放脉冲(True/False) """ # 1. 漏电:膜电位衰减 self.membrane_potential *= (1 - self.leak) # 2. 整合:加入输入电流 self.membrane_potential += input_current # 3. 判断是否放电 if self.membrane_potential >= self.threshold: # 发放脉冲 spike = 1 # 放电后重置电位 self.membrane_potential = self.reset_potential else: # 不放电 spike = 0 return spike # ====================== 2. 模拟信号与运行 ====================== if __name__ == "__main__": # 创建神经元 neuron = LIFNeuron(threshold=1.0, leak=0.1) # 模拟时间步(20步) time_steps = 20 # 输入电流:前10步给0.2,后10步给0(测试累积放电) input_currents = [0.2] * 10 + [0.0] * 10 # 记录数据 potentials = [] # 膜电位记录 spikes = [] # 脉冲记录 # 逐时间步运行 for current in input_currents: spike = neuron.forward(current) spikes.append(spike) potentials.append(neuron.membrane_potential) # ====================== 3. 绘图可视化 ====================== plt.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(10, 6)) # 子图1:输入电流 plt.subplot(3,1,1) plt.plot(input_currents, 'b-', label='输入电流') plt.ylabel('电流') plt.legend() plt.grid(True) # 子图2:膜电位 plt.subplot(3,1,2) plt.plot(potentials, 'r-', label='膜电位') plt.axhline(y=1.0, color='k', linestyle='--', label='放电阈值') plt.ylabel('电位') plt.legend() plt.grid(True) # 子图3:脉冲输出 plt.subplot(3,1,3) plt.stem(spikes, 'g-', label='输出脉冲', basefmt=" ") plt.xlabel('时间步') plt.ylabel('脉冲') plt.legend() plt.grid(True) plt.tight_layout() plt.show()

该程序包含:1 个输入、1 个 LIF 神经元、模拟时间序列信号和观察神经元膜电位变化 + 脉冲发放。

,运行结果如下:

由上图可看出:

第1张图表示输入电流:前 10 步有电流,后 10 步无

第2张图表示膜电位:慢慢累积,超过阈值立刻放电并归零

第3张图表示输出脉冲:只有放电时输出 1,其余为 0

3、总结

SNN = 第三代神经网络,模仿人脑神经元放电机制。核心:膜电位累积 → 超过阈值 → 发放脉冲 → 重置。最简单模型:LIF 神经元(漏电 + 整合 + 发放),上面的代码是 SNN 最小可用实现,能直观看到脉冲生成。

http://www.jsqmd.com/news/698686/

相关文章:

  • 3步搞定明日方舟全日常!MAA助手终极自动化攻略指南
  • 保姆级教程:用Python和CodeFormer修复模糊老照片,从环境搭建到实战调参
  • 猫抓cat-catch深度解析:构建专业级浏览器资源捕获工作流的终极指南
  • 呼市知名的床垫制造厂
  • EndNote X9/20/21 中文文献引用终极优化:手把手教你将‘and/etal’精准替换为‘和/等’
  • Halcon描述符匹配实战:用harris_binomial检测器搞定旋转缩放场景下的纹理识别
  • MarkDownload 终极指南:从网页剪辑到知识管理的深度探索
  • 终极指南:用MAA助手3步实现明日方舟全自动刷图,告别重复劳动
  • C语言基础(一)
  • UI-TARS桌面版完整指南:3分钟快速上手智能GUI自动化操作
  • CVPR2022 Oral解读:3D检测新SOTA,FocalsConv的PyTorch实现与调参避坑指南
  • FPGA做FFT,选流水线还是突发I/O?Xilinx IP核四种架构的实战选择指南
  • 如何从图表图像中智能提取数据?WebPlotDigitizer给你答案
  • APKMirror安卓客户端:安全高效的APK下载与管理终极指南
  • python csv
  • ESP-IDF离线安装包+Python虚拟环境:打造Windows上最稳定的ESP32开发环境(避坑网络问题)
  • 如何通过Perseus开源补丁解锁《碧蓝航线》全皮肤功能:技术原理与实战指南
  • 告别龟速下载!RedHat 9/CentOS Stream 9 一键切换阿里云、清华等国内Yum源(2024最新)
  • C++26合约迁移紧急预案:Legacy代码零修改接入方案,已验证于千万行金融交易系统(附ASAN+Contract双监控POC)
  • 滴哦小精灵:轻松搞定桌面备忘与快捷启动
  • 布隆过滤器(BloomFilter)
  • ROS导航包老是定位飘?可能是你的tf树没搞对(诊断与修复指南)
  • 避坑指南:在Qt和VS2022中正确引用Halcon C++库,解决‘未定义标识符’和链接错误
  • python sqlite3
  • 2026年专业的食品饮料动态膜再生系统有哪些 - 品牌排行榜
  • 5个核心技巧:用Pixel-Composer节点式编辑打造专业像素艺术特效
  • BilibiliDown:3步解决B站视频下载难题的高效方案
  • 京东e卡回收前的重点!线上线下哪里靠谱? - 圆圆收
  • AlphaPlayer架构深度解析:跨平台透明视频动画引擎的设计哲学与实践
  • Excel文件打不开别慌!手把手教你用Stellar Repair for Excel 6.0.X救回数据(附详细操作步骤)