核心内容摘要
99久久视频:探索视听盛宴的无限可能
文章目录
先搞懂SNN为啥比传统神经网络“像脑子”
核心原理不用背3个关键点讲透
实战代码100行实现简易SNN附注释
聊点干货SNN和“悟空”的未来潜力最近科技圈炸锅了——咱们国产类脑计算机“悟空”公开亮相20亿神经元规模直接对标人脑还能用脉冲神经网络SNN模拟生物大脑信号传递这可不是噱头以后AI搞推理、做决策可能真就跟咱们“思考”一样高效连功耗都能降一大截不过说起SNN很多小伙伴可能会犯怵“这不就是深度学习的升级版听着就复杂”其实真不用怕今天咱们用大白话拆解SNN还附Python实战代码新手也能快速上手看完你就懂“悟空”的核心逻辑有多牛
先搞懂SNN为啥比传统神经网络“像脑子”咱们平时聊的CNN、Transformer本质是“数值流”——数据像水流一样在网络里算来算去但SNN不一样它学的是生物大脑的“脉冲流”举个生活例子你摸热水杯会立马缩手是因为神经细胞会“放电”传递信号没刺激时就安静待着。
SNN里的“神经元”也是这样平时处于“静息状态”只有输入信号累积到一定阈值比如摸热水够烫才会“发放脉冲”相当于神经放电脉冲传递完还会有“ refractory period不应期”就像你刚被烫过短时间内对热不敏感避免信号乱传最关键的是低功耗传统神经网络不管有没有有效信息都在计算SNN没脉冲时几乎不耗能——这也是“悟空”能装20亿神经元的关键
核心原理不用背3个关键点讲透神经元模型LIF模型最常用不用记复杂公式你就理解成“装水的杯子”输入信号是“加水”阈值是“杯子容量”水满了就“溢出来”发放脉冲溢完后杯子会“清空一部分”不应期继续等下一轮加水。
突触传递权重信号“影响力”SNN里的“突触”就是神经元之间的连接权重越大一个神经元对另一个的“影响力”越强。
比如“热水”信号对应的突触权重肯定比“温水”大能更快让下游神经元达到阈值。
学习规则STDP比BP更像“大脑学习”传统神经网络靠反向传播BP调权重SNN用的是“ Spike-Timing-Dependent PlasticitySTDP脉冲时序依赖可塑性”——简单说就是“先放电的神经元会加强对后放电神经元的连接”跟咱们学东西“先理解再记忆”的逻辑超像
实战代码100行实现简易SNN附注释光说不练假把式咱们用Python的numpy库搭一个1输入层1隐藏层1输出层的SNN模拟“识别热水/温水”的简单任务。
代码里每一步都标了注释复制粘贴就能跑importnumpyasnp#
定义LIF神经元类核心组件classLIFNeuron:def__init__(self,threshold
0,tau_ref2,tau_m
:self.thresholdthreshold# 脉冲发放阈值杯子容量self.tau_reftau_ref# 不应期时长放电后“冷却”时间self.tau_mtau_m# 膜电位衰减常数水慢慢蒸发self.membrane_potential
0# 当前膜电位杯子里的水量self.refractory_timer0# 不应期计时器冷却倒计时self.spikeFalse# 是否发放脉冲水有没有溢出# 更新神经元状态每一步时间戳调用defupdate(self,input_current):self.spikeFalse# 重置脉冲状态#
先处理不应期没冷却完就不干活ifself.refractory_timer0:self.refractory_timer-1self.membrane_potential
0# 不应期内膜电位归零return#
计算膜电位输入电流充电 自然衰减self.membrane_potentialinput_current self.membrane_potential*np.exp(-1/self.tau_m)# 指数衰减模拟水蒸发#
检查是否达到阈值够了就放电ifself.membrane_potentialself.threshold:self.spikeTrue# 发放脉冲self.membrane_potential
0# 放电后电位归零self.refractory_timerself.tau_ref# 启动不应期#
定义SNN网络1输入2隐藏1输出classSimpleSNN:def__init__(self):# 初始化神经元1个输入神经元检测温度、2个隐藏神经元、1个输出神经元判断是否烫self.input_neuronLIFNeuron()self.hidden_neurons[LIFNeuron(),LIFNeuron()]self.output_neuronLIFNeuron()# 初始化突触权重输入→隐藏隐藏→输出self.w_input_hiddennp.array([[
6,
3]])# 输入对隐藏1权重
6对隐藏2权重
3self.w_hidden_outputnp.array([[
8],[
5]])# 隐藏1对输出
8隐藏2对输出
5# 网络前向传播处理一次输入defforward(self,input_current,time_steps
:output_spikes[]# 记录输出神经元的脉冲序列fortinrange(time_steps):#
输入神经元处理信号self.input_neuron.update(input_current)input_spike
0ifself.input_neuron.spikeelse
0# 脉冲用1表示无脉冲用0#
隐藏神经元接收输入输入脉冲 × 权重hidden_currentsnp.dot(input_spike,self.w_input_hidden)fori,neuroninenumerate(self.hidden_neurons):neuron.update(hidden_currents[i])hidden_spikesnp.array([
0ifn.spikeelse
0forninself.hidden_neurons])#
输出神经元接收隐藏层信号output_currentnp.dot(hidden_spikes,self.w_hidden_output)[0]self.output_neuron.update(output_current)output_spikes.append(self.output_neuron.spike)# 打印每一步状态方便观察print(f时间步{t1}: 输入脉冲{input_spike}, 隐藏层脉冲{hidden_spikes}, 输出脉冲{self.output_neuron.spike})returnoutput_spikes#
测试模拟“温水”和“热水”输入if__name____main__:snnSimpleSNN()print( 测试1输入温水电流
4不足以频繁触发脉冲)snn.forward(input_current
0.
# 输出几乎无脉冲判断“不烫”print(\n 测试2输入热水电流
8频繁触发脉冲)snn.forward(input_current
0.
# 输出多次脉冲判断“烫”跑起来你会发现输入“温水”电流
4时输出神经元几乎不发脉冲输入“热水”电流
8时输出脉冲明显变多——这就是SNN模拟“感知刺激”的核心逻辑
聊点干货SNN和“悟空”的未来潜力现在“悟空”已经能用20亿神经元跑SNN以后在这几个场景绝对要爆发低功耗设备比如智能手表、传感器用SNN能大幅延长续航实时推理自动驾驶、机器人反应要快SNN的“脉冲响应”比传统AI更及时脑机接口以后瘫痪病人用意念控制设备SNN就是“人脑和机器的翻译官”不过想入门SNN还是得先打好深度学习基础——目前国内还是很缺AI人才的希望更多人能真正加入到AI行业共同促进行业进步。
想要系统学习AI知识的朋友可以看看我的教程http://blog.csdn.net/jiangjunshow教程通俗易懂风趣幽默从深度学习基础原理到各领域实战应用都有讲解。
最后说句实在的AI这波浪潮里类脑计算绝对是下一个风口。
现在跟着练代码、学原理以后不管是找工作还是搞副业都能占个好位置 评论区说说你觉得SNN还能用到哪些场景咱们一起交流