參與啟智社區(qū)開(kāi)源項(xiàng)目心得分享——丁健豪

能夠參加開(kāi)源項(xiàng)目是一個(gè)機(jī)緣巧合,當(dāng)時(shí)我正好在做ANN轉(zhuǎn)換SNN的研究。有一次開(kāi)會(huì)的時(shí)候,老師突然說(shuō),要不你把你現(xiàn)在的工程實(shí)踐整理一下,放到師兄們開(kāi)發(fā)的開(kāi)源項(xiàng)目里面。當(dāng)時(shí)我正好在寫相關(guān)的代碼,因?yàn)閷?shí)驗(yàn)不成功,代碼已經(jīng)改版兩次了。所以毫不猶豫地,我就接下了這個(gè)活,因?yàn)槲抑酪亲龊昧诉@個(gè)模塊,就不需要重復(fù)造輪子了。之前其實(shí)也有相關(guān)的ANN轉(zhuǎn)SNN的代碼。在GitHub上有一個(gè)叫做NeuromorphicProcessorProject

/snn_toolbox的項(xiàng)目。但是這個(gè)項(xiàng)目更多地是面向神經(jīng)形態(tài)硬件的,代碼也沒(méi)有PyTorch版本,主框架是拿keras寫的。這就更加給了我開(kāi)發(fā)的動(dòng)力。其次,我覺(jué)得我們作為新一代研究者是有義務(wù)去推廣脈沖神經(jīng)網(wǎng)絡(luò)的。人工神經(jīng)網(wǎng)絡(luò)(ANN)就不用說(shuō)了,大家都很熟悉。而SNN則是脈沖神經(jīng)網(wǎng)絡(luò)(”所謂的第三代神經(jīng)網(wǎng)絡(luò)”),在現(xiàn)在的人工智能語(yǔ)境中其實(shí)沒(méi)有那么受到重視。但是它有很多好的特性沒(méi)有被大家注意到,比如說(shuō)脈沖神經(jīng)網(wǎng)絡(luò)相比于GPU運(yùn)行沒(méi)有那么耗能源,而且在理論上的性能也是能夠等同圖靈機(jī)的。

ANN轉(zhuǎn)換SNN的研究能夠給深度學(xué)習(xí)和脈沖神經(jīng)網(wǎng)絡(luò)架起一座橋梁,我覺(jué)得這是一件特別有意思的東西。在師兄們開(kāi)發(fā)好的框架上,我需要的就是利用現(xiàn)有的神經(jīng)元模型,構(gòu)建SNN,并且完成轉(zhuǎn)換的SNN的仿真工作。SpikingJelly中的神經(jīng)元模型,其實(shí)特別好用,我一直都是用PyTorch的,SpikingJelly的神經(jīng)元定義,就和在PyTorch中定義ReLU一樣,特別順滑。如果需要對(duì)神經(jīng)元進(jìn)行重置,也只需要調(diào)用resnet_net就好,特別方便。

盡管如此,開(kāi)發(fā)過(guò)程中也走了挺多彎路。因?yàn)锳NN-SNN轉(zhuǎn)換需要知道底層的PyTorch拓?fù)洌愃芌esNet這樣的),最重要的就是選擇一個(gè)合適的方式來(lái)處理PyTorch模型中的復(fù)雜拓?fù)洹jP(guān)于處理拓?fù)涞姆桨钙鋵?shí)選擇了很久。最終,選擇了基于另一個(gè)開(kāi)源項(xiàng)目,ONNX。PyTorch中有實(shí)現(xiàn)接口可以無(wú)縫轉(zhuǎn)換到ONNX模型。而且ONNX作為一個(gè)通用公用的模型表示方式可以使得今后其他框架的模型通過(guò)轉(zhuǎn)換為onnx表示之后也可以通過(guò)我們的框架轉(zhuǎn)換。這就使得我們的代碼在未來(lái)可以發(fā)揮更加廣泛的作用。

自從框架開(kāi)源后,我們的貢獻(xiàn)得到了更多人的關(guān)注。我想這就是開(kāi)源的意義所在吧。尤其我們的定位是科研。這意味著更多研究脈沖神經(jīng)網(wǎng)絡(luò)的科研院所可以通過(guò)我們的工作、通過(guò)ANN-SNN轉(zhuǎn)換的工作得到收獲。ANN-SNN轉(zhuǎn)換在SNN今后的研究中,可能更多地是一個(gè)baseline的存在,即便這樣,我想能夠做好這一件事情也是我們的榮幸。

作者:丁健豪

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp

More articles