首页 / 资讯中心 / 文章详情

突触仿真驱动认知:CogniBrain类脑计算系统架构与实践

突触仿真驱动认知:CogniBrain类脑计算系统架构与实践 ★ FEATURED ARTICLE
1. 为什么是突触从大模型的“答题机器”说起过去几年我在做认知计算相关的项目一个越来越明显的感触是我们手里那些动辄千亿参数的大模型本质上还是一个概率统计模型。它能把一句话接得行云流水能写诗、能编程、能做数学题但你让它做一件稍微需要“举一反三”的事情——比如从两个不同的例子中归纳出一条规律再迁移到一个全新场景里——它立刻就露馅了。这不是调参、加数据量能解决的问题是架构层面的天花板。2023年末我开始重新翻神经科学的老文献越看越觉得人脑处理信息的方式和大模型有本质差异。大模型靠的是海量参数和暴力计算把“预测下一个词”做到极致而人脑的算力基础只有大约860亿个神经元却能在极低的功耗下完成识别、推理、决策、情感判断这些复杂任务。差异的核心在哪里就在突触。单个神经元做的事情极其简单接收输入、累积电位、超过阈值就放电。真正复杂的、承载记忆和学习能力的是神经元之间的连接——突触。人脑里大约有百万亿个突触每个突触的权重都在动态变化有短期可塑性有长期增强和抑制还有神经调质在全局调控。CogniBrain这个系统的出发点就是不在“神经元数量”上做文章而是把重心放在突触层面的仿真上尝试构造一个真正具备“认知”基础的思考系统。先说结论CogniBrain不是一个用来刷榜的深度学习框架它的目标是验证一条路径——能不能通过突触动力学的仿真让机器自发地涌现出类似人类的认知行为。本文会从突触的核心机制讲起拆开系统架构、信息处理路径、工程实现中踩过的坑最后聊一聊这套方案现在的边界面在哪里。2. 突触到底仿真什么CogniBrain的微观核心机制要理解CogniBrain得先忘掉Transformer回到神经科学的基本事实。突触不是一个静态的连接点它有一套非常完整的工作机制。仿真突触本质上是在仿真以下五个层面的动力学过程。2.1 突触传递不只是“加权求和”传统人工神经网络里一个连接就是一个权重w前向计算就是乘一下再加起来。但真实突触的传递过程复杂得多。动作电位到达突触前末梢触发神经递质释放递给突触后膜上的受体产生突触后电位。这个过程不是瞬时的它有一个时间常数。CogniBrain在实现时把每个突触建模为带有短时程动力学模块的传递单元——递质释放概率、释放后的衰减速度、受体的脱敏状态都被纳入计算。具体来说当一个突触收到脉冲信号时系统会更新三个内部状态变量可用递质池的比例、释放效率、受体敏感度。这直接决定了这个突触在接下来几毫秒内的传递效率。这样做的一个直接好处是系统天然支持基于时间的编码而不是仅仅基于频率或平均发放率。曾经有同行问我直接用一个低通滤波器模拟突触后电位不行吗行但那就丢掉了短时程增强STP这个重要的时间信息源。2.2 突触可塑性认知的物理载体突触能学习和记忆靠的是可塑性机制。CogniBrain主要实现了三类Spike-Timing-Dependent PlasticitySTDP如果突触前神经元先放电、突触后神经元随后放电突触就会增强反过来如果突触后先放电、突触前才放电突触就会减弱。STDP是目前公认的、在生物体上被广泛验证的学习规则。稳态可塑性Homeostatic Plasticity神经元不能无限兴奋下去系统需要一个负反馈机制来维持电活动稳定。CogniBrain每过一段时间就会检查神经元的平均发放率如果过高就整体下调它所有突触的权重如果过低则上调。调质调制Neuromodulation多巴胺、乙酰胆碱这类神经调质并不直接传递信息而是改变整个脑区的可塑性强度。这是“注意力”和“奖赏”机制的重要基础。系统引入一个全局调制信号在训练时动态调整STDP的学习率。2.3 突触的物理结构仿真树突计算真实神经元不是只有一个求和点。树突上存在大量的离子通道不同区段的输入可以局部整合甚至产生树突本身的电位事件。CogniBrain在做突触仿真时给每个神经元分配了若干“树突分支”每个分支有自己的局部电位和阈值。远端的突触输入和近端的突触输入对胞体的影响程度是不同的——远端信号衰减得更厉害。这个设计很关键因为它打破了“所有输入平等求和”的传统假设让不同空间位置的输入带上了空间语义。比如在一个模式识别任务里来自不同模态视觉、听觉的输入被投射到同一神经元的不同树突分支上。如果两个分支在时间上靠近胞体更容易达到阈值放电如果只有一个分支激活则要困难得多。这在效果上类似于“多模态联合触发”但不是靠人工设计的注意力机制实现的而是从神经元物理特性中涌现出来的。3. CogniBrain系统架构从突触到认知的逐层组织这套系统的最简可运行版本用C和CUDA实现Python负责实验编排。整个架构分五层每一层解决一个具体的问题。层级名称核心职责典型规模L1突触动力学引擎模拟递质释放、受体动力学、STP和STDP更新千万级突触/GPU卡L2神经元池整合树突分支信号管理阈下电位与发放事件百万级神经元L3脑区结构组织神经元池为功能区域定义区域间长程投射几十个脑区L4认知模块在工作记忆、注意力调制、决策评估等层面提供接口依据任务定义L5任务交互层接收外部传感器的流式输入输出行为或决策与API接口绑定3.1 事件驱动打破逐帧同步的算力魔咒如果按时间步长逐帧更新所有神经元百万神经元网络很快就跑不动了。CogniBrain用的是事件驱动机制——只有产生发放事件spike的神经元才会触发计算其他神经元保持空闲。一个神经元的一次发放只触发与它相连的突触集合进行传递更新。在稀疏性比较高的大脑类网络中这种方式能把无效计算量直接砍掉九成以上。实现上使用了一个全局事件队列每个事件包含时间戳、源神经元ID、目标突触列表。GPU端按事件批次处理突触更新CPU端负责调度和シミュレーション控制。这个设计让我想起游戏引擎里的渲染管线——CPU准备数据GPU批量执行事件提交按批次对齐。3.2 脑区的长程连接设计全脑连接全是稠密的这在百万神经元规模下不可能做到。CogniBrain采用“局部稠密、全局稀疏”的布线策略。脑区内部神经元之间按高斯概率建立连接相邻神经元之间的连接概率更高脑区之间则由一个有向矩阵定义投射关系表示“前额叶区域接收来自视觉皮层区域的输入但反过来不成立”。布线这一步看起来不起眼但几乎是整个系统认知能力的地基。我调试中发现如果连接密度过高整个网络会陷入癫痫式的同步振荡连接密度过低信号又传不动。最后靠经验确定了一个范围局部连接概率取0.05到0.15之间长程投射用1比100到1比1000的缩放系数。不同任务类型对这些参数极为敏感后面专门说调试方法。4. 认知是怎么从突触“长”出来的信息处理路径拆解系统的宏观目标不是模拟单个神经元而是让“认知”从突触层的运转中自然涌现。这里拆解一条典型的信息处理路径看你给CogniBrain一个任务时内部发生了什么。4.1 工作记忆不需要显式存储嵌套循环考虑一个序列预测任务给系统一串数字1, 2, 3, ..., 让它在看到第8个数字时预测下一个。传统神经网络会用LSTM或者Transformer的位置编码来建模序列关系。但CogniBrain的工作记忆实现完全不同——它利用神经元群体的持续放电persistent firing来暂存信息。系统设置了一组“工作记忆神经元池”当输入数字“3”到来时对应的神经元群被激活数字“4”到来时另一群被激活同时对“3”的神经元群施加一个抑制信号以避免覆盖。这个过程不需要在任何地方显式写一个循环计数器但突触的延迟和抑制连接让系统能够天然地维持一个“当前状态”的表示。刚开始我根本不相信这套机制能跑通序列任务。实验结果打脸了——它不仅跑通了还表现出一个很有意思的特性对时间间隔很敏感。如果两个输入之间的间隔被拉长到训练时的三倍系统的预测准确率会明显下降。这恰恰是生物大脑的特点工作记忆是有容量的也是会衰退的而传统深度学习模型不会有这种“生理性”的限制。这个特点反而成为优势——在处理长尾分布数据时系统不会在无关的历史输入上花费大量记忆资源。4.2 注意力选择的突触实现注意力机制在Transformer里是一个显式计算模块长度、位置、查询键值三件套。而CogniBrain的注意力是基于神经调质系统的。系统里设计了一个“注意调控单元AU”它根据当前任务的紧迫度和外部输入的新颖度计算出两种调质信号一种增强目标相关脑区的突触增益另一种抑制背景噪音区域的增益。这个信号再作用到全脑所有突触的传递系数上——目标区域的突触传递效率提高约20%背景区域的降低约30%。这个设计的妙处在于注意力不是一个单独的计算步骤而是一个持续施加的全局状态。“是否被注意”直接影响了突触的STDP更新强度——被注意的信息学得快不被注意的信息几乎不学。任务结束后想“复习”也可以重复呈现刺激时系统的学习效果会远好于一次呈现。这和人脑的学习规律非常接近。4.3 决策与评估没有反向传播如何知道好坏这是CogniBrain和深度学习框架分歧最大的地方。深度神经网络靠损失函数和反向传播来调整权重CogniBrain用的是基于调质的强化学习式可塑性——三因子学习规则three-factor learning rule。每次行为结果产生“好”或“坏”的评估信号由全局调质系统广播到所有突触。如果某个突触的活动在决策前与最终结果存在时间上的因果关联并且结果反馈为“好”那么这个突触的权重就被加强结果反馈为“坏”权重被削弱。这里有一个技术细节STDP是两因子的而三因子规则引入了一个额外的全局信号参与权重更新。实现的时候就是计算局部STDP窗口内的突触前/突触后活动相关性再乘以全局调质浓度。如果相关性为正且调质浓度为正权重增加相关性为正但调质浓度为负权重减少。用这套机制训练一个简单的导航任务让一个智能体学会走向目标点大约需要300步的随机探索才能看到明显进步。比Q-learning慢但它学到的突触模式非常鲁棒换一个新的地图环境迁移衰减远小于传统强化学习。我个人的推测是突触层面的分布式表示比集中式的价值网络更抗环境扰动。5. 工程现实规模、精度与仿真速度的三难取舍纸上谈兵的架构说完了实际工程实现里全是坑。这一节聊我在搭建CogniBrain过程中遇到的几个关键工程问题和取舍其中有三个坑最有代表性。5.1 仿真时间步长毫秒精度与计算成本的对赌生物突触的时间常数在1到100毫秒跨度内如果想保留STDP的时间精度仿真步长理想情况下应该小于1毫秒。但步长越短每一秒仿真需要计算的时间步就越多CPU调度打点成本也急剧上升。初期我把步长设为0.5毫秒仿真1秒脑活动需要大约4千多个时间步训练一个小任务就要跑几天。后来改成1毫秒步长STDP的时间窗口做近似补偿。准确率损失不到2%但仿真速度快了接近一倍。这个取舍是值得的。更激进的做法是自适应步长——根据事件密度动态调整精度低活动时段用2毫秒步长高活动时段回到1毫秒。5.2 随机性与可复现性的斗争生物系统自带大量噪声源比如递质释放的随机性、膜电位涨落。这些噪声对探索和学习很重要但它在算法调试阶段是噩梦。同一个实验跑两次结果可能差20%。我的做法是把随机数发生器加上一个实验级种子每次实验开始时重置但种子不只一个——每个神经元池分配一个独立子生成器。复盘实验时只要种子序列一致结果就可复现。实验做完发布的时候公布主种子和最核心的几个子系统种子其他部分用不同的偏移来自动生成。这个方案经历了三个月调试期后稳定下来后续论文的数据回放全靠它。5.3 多GPU训练的同步冲突当突触数量超过单卡承载后必须要走多卡并行。但事件驱动模型天然不适合像深度学习那样按层切分。CogniBrain选择的是按脑区划分视觉脑区放GPU0前额叶-运动规划区放GPU1。跨GPU的突触投射通过NVLink异步传输。这个方案第一次跑就遇到严重的“幽灵事件”问题——GPU0上的神经元发出了发放事件但GPU1上的目标突触更新延迟了整整一个时间步窗口。原本毫秒级的信号传递变成了几百毫秒的延迟整个网络的时序关系全部错乱。我的解决办法是引入“时间戳补偿”每个跨卡事件打包时带上源时间戳接收端在更新突触时不是直接按键值查入而是按时间戳重新对齐到对应的时间窗口。这相当于给整个网络加了一层“时钟同步”。效果立竿见影同步误差从毫秒级降到微秒级。提示如果你也想实现类似的分布式突触仿真建议先在单机多卡上把跨节点通信的延迟基准测出来再决定是否需要时间戳补偿。不同厂商的互联延迟差异很大不要直接抄别人的同步参数。6. 调试一个仿真大脑验证链路与参数盲区传统深度学习调试起来相对直接loss下降了吗ACC涨了吗而CogniBrain这类系统最难的地方在于——你不知道哪里错了因为没有一个单一的数字能告诉你“大脑工作正常”。6.1 观测“神经状态”而不是只看任务指标我做了一套诊断工具链包括三件套发放率热力图raster plot全局所有神经元的发放时间点一眼能看出是否出现异常同步振荡。突触权重分布演化图定期取全脑突触权重做成直方图。健康的网络权重分布会向两端增强/抑制分化如果权重全部挤在中间位置说明网络没有学到任何东西。区域间信息流互信息矩阵计算每两个脑区的发放序列之间的互信息用来观察信号有没有在预期的时间窗口内传递到预期区域。这套工具链最关键的是一个判断准则任务做得差不一定代表系统坏了可能是参数设定让网络陷入某种病理状态比如超同步振荡或全脑静默。先看神经前言活动状态再去看任务表现逻辑顺序不能反。6.2 最折磨人的三个参数盲区调试半年下来有三个参数调一次折磨一次突触后电位幅度EPSP amplitude如果设得太小信号传几层就衰减没了设得太大小小扰动就触发连锁发放学东西学过头不用的记忆也强化了。经验值一般从神经元阈值电位的5%开始调然后上下扫。基准设对了网络基本能保持在一个有信噪比的状态。STDP时间窗口宽度窗口太窄要精确的毫秒级对齐才能触发学习窗口太宽所有时序关联都变成正相关学不出选择性。我的建议是从τ20ms起步配合仿真步长一起对调。稳态可塑性的检查周期检查太频繁网络刚形成强连接就被重置了学习永远走不远检查太稀疏神经元过度兴奋权重爆炸。目前用的是每仿真10秒检查一次这也是在多次实验后选出来的折中值。6.3 什么才算“认知出现了”这个问题困扰了我很久。如果你训练一个深度强化学习模型看它的reward曲线就能判断有没有学但CogniBrain不是用奖励函数驱动的即使任务表现上去了你怎么确定它不是通过某种捷径比如单纯放大输出层的偏置达成的我最终定下三个严格判据全部满足才认为系统出现了“认知行为”多任务迁移在任务A上学到的突触模式在任务B上不做任何微调也能带来性能提升而且提升幅度大于随机初始化模型。表征重用度计算两组神经元的表征相似度矩阵。如果学到的突触模式里同一脑区有超过40%的神经元在应对相似输入时发放模式重合说明系统在形成抽象表征而不是死记硬背。扰动鲁棒性故意删掉一波神经元模拟脑损伤系统性能应平缓下降而不是突然崩溃。我试过随机删掉20%的神经元任务准确率从0.9掉到0.57左右但依然远高于随机水平。拿这三个判据去测CogniBrain在“视觉-运动映射”任务上的表现前两条都过了第三条勉强过线。这说明系统确实形成了一定的分布式表征而不是靠少数几个关键神经元硬扛。7. 现在的局限与下一步这条路还长说了一大堆成效必须坦白这套方案现在的短板否则就是对读者不负责。第一规模上限。目前跑通的规模是大约500万神经元、27亿突触在多卡服务器上训练一个中等复杂度任务需要一周以上。想逼近人脑百万亿突触的规模还需要数量级上的硬件突破。英伟达的最新一代加速卡在突触矩阵运算上做了面向稀疏化事件的优化但距离“人人可跑”的普及阶段还有距离。第二缺乏可解释的存取接口。传统深度学习可以导出注意力权重、特征图可视化很成熟。CogniBrain的认知表征分散在数百万突触权重的细微变化中想抽取出一个可解释的“概念”还很难。目前只能靠中心性分析和子图匹配来近似的识别精度有限。第三任务谱系还很窄。现在系统能胜任的包括序列预测、简单导航、多模态模式识别、基本的工作记忆任务但在语言理解和复杂推理层面的能力几乎为零。有人可能觉得这是缺陷但我更愿意把它理解为这套框架的独特性所在——它不需要在语言上堆参数也能具备一些认知行为真正的测试在于未来能不能支持“具身智能”——让系统接入真实传感器在和物理世界的持续交互中发展出更复杂的认知能力。下一步我计划把工作重心放在两个方向一个是在突触动力学中引入更多真实生物细节比如突触和树突棘的体积可塑性变化另一个是将CogniBrain的认知模块接入一个机器人仿真环境让系统真正在“感知-行动”闭环中学习。如果这个闭环能跑通CogniBrain就不再仅是一个脑仿真器而是一个可落地的认知架构。这条路肯定还很长但从突触起步做认知系统目前来看是值得继续走下去的方向。
阅读完成 · 觉得有帮助?
咨询建站