参与启智社区开源项目心得分享——丁健豪

能够参加开源项目是一个机缘巧合,当时我正好在做ANN转换SNN的研究。有一次开会的时候,老师突然说,要不你把你现在的工程实践整理一下,放到师兄们开发的开源项目里面。当时我正好在写相关的代码,因为实验不成功,代码已经改版两次了。所以毫不犹豫地,我就接下了这个活,因为我知道要是做好了这个模块,就不需要重复造轮子了。之前其实也有相关的ANN转SNN的代码。在GitHub上有一个叫做NeuromorphicProcessorProject

/snn_toolbox的项目。但是这个项目更多地是面向神经形态硬件的,代码也没有PyTorch版本,主框架是拿keras写的。这就更加给了我开发的动力。其次,我觉得我们作为新一代研究者是有义务去推广脉冲神经网络的。人工神经网络(ANN)就不用说了,大家都很熟悉。而SNN则是脉冲神经网络(”所谓的第三代神经网络”),在现在的人工智能语境中其实没有那么受到重视。但是它有很多好的特性没有被大家注意到,比如说脉冲神经网络相比于GPU运行没有那么耗能源,而且在理论上的性能也是能够等同图灵机的。

ANN转换SNN的研究能够给深度学习和脉冲神经网络架起一座桥梁,我觉得这是一件特别有意思的东西。在师兄们开发好的框架上,我需要的就是利用现有的神经元模型,构建SNN,并且完成转换的SNN的仿真工作。SpikingJelly中的神经元模型,其实特别好用,我一直都是用PyTorch的,SpikingJelly的神经元定义,就和在PyTorch中定义ReLU一样,特别顺滑。如果需要对神经元进行重置,也只需要调用resnet_net就好,特别方便。

尽管如此,开发过程中也走了挺多弯路。因为ANN-SNN转换需要知道底层的PyTorch拓扑(类似ResNet这样的),最重要的就是选择一个合适的方式来处理PyTorch模型中的复杂拓扑。关于处理拓扑的方案其实选择了很久。最终,选择了基于另一个开源项目,ONNX。PyTorch中有实现接口可以无缝转换到ONNX模型。而且ONNX作为一个通用公用的模型表示方式可以使得今后其他框架的模型通过转换为onnx表示之后也可以通过我们的框架转换。这就使得我们的代码在未来可以发挥更加广泛的作用。

自从框架开源后,我们的贡献得到了更多人的关注。我想这就是开源的意义所在吧。尤其我们的定位是科研。这意味着更多研究脉冲神经网络的科研院所可以通过我们的工作、通过ANN-SNN转换的工作得到收获。ANN-SNN转换在SNN今后的研究中,可能更多地是一个baseline的存在,即便这样,我想能够做好这一件事情也是我们的荣幸。

作者:丁健豪

上一篇:参与启智社区开源项目心得分享——陈彦骐
下一篇:参与启智社区开源项目心得分享——方维