作為開源脈沖神經網絡框架驚蟄(SpikingJelly)的開發者之一,我有幸參加了12月初在北京舉辦的2020年OpenI開發者大會,并獲獎成為首批啟智社區優秀開源開發者。借此機會,我想分享一下我的開源經歷和感悟。
參與開發
第三代人工神經網絡脈沖神經網絡(Spiking Neural Network, SNN)具有事件驅動、低功耗、高仿生的特點,一直是神經科學領域的研究熱點。近年來機器學習方法逐漸應用于SNN并取得了突破性的性能提升,使用SNN進行深度學習成為新的前沿交叉研究熱點。我對于這一新興的研究方向充滿興趣,但在研究中發現:
傳統的深度學習框架并不直接支持SNN,因此許多研究者不得不從零開始實現所需的SNN模塊,造成了大量的重復勞動
SNN從生物神經元簡化而來,不同開發者對SNN的實現方式不同,造成了定義的混亂,代碼難以復用
絕大多數代碼都沒有配套的文檔,給學習和使用帶來了麻煩
這些問題是包括我在內的所有SNN深度學習的研究者面臨的難題。目前這個領域還沒有一個成熟的框架,如果有一個類似于ANN中Caffe、PyTorch那樣的深度學習框架則可以解決上述問題。為了我們自己研究的有序進行、實驗的順利開展,以及方便其他研究者的使用,避免重復勞動,實驗室的老師和博士生們討論后決定,自行開發一款全新的開源SNN深度學習框架,即驚蜇(SpikingJelly)。
我個人參與驚蜇的開發,主要原因是:
研究方向與框架的應用背景完全契合,在學習該領域的前沿知識時,可以同時在框架中進行代碼實現,理論和實際實驗可以順利結合,互為補充
一個完善的框架有助于我順利進行各種實驗、與他人分享我的研究成果,并確保我的研究成果的可復現性
希望能夠繼續為開源社區做出更多貢獻,減少開發者的重復勞動,提升科研效率
驚蟄框架的開發,在2019年11月正式開始,早期主要是由包括我在內的北京大學的幾位博士生,在老師們指導下進行開發。開發之初,我們就將此框架完全開源在GitHub上,希望能夠吸引其他感興趣的開發者參與貢獻、共同推進。
社區支持
驚蟄框架在開發過程中逐漸受到脈沖神經網絡領域研究者的關注,并得到了許多開發者和開源社區的支持,主要包括:
一些用戶通過issue的方式提供建議
開發者報告bug,或提交pull request來修復bug
鵬城實驗室的開發者提供了CUDA性能優化的建議、補充CUDA代碼、補充文檔教程翻譯
OpenI社區提供了鏡像服務器,在國內擁有更快的訪問速度;提供了無限存儲空間的公網存儲服務器,驚蟄框架據此建立了部分數據集的下載鏡像
鵬城云腦提供了強大的算力支持,驚蟄框架在云腦上進行了大量性能實驗和代碼調試
最后,驚蟄項目還成功申請成為首批啟智社區優秀開源項目,作為開發者之一,我也很榮幸地參加了2020年OpenI開發者大會,獲益匪淺。
開源心得
在開源社區的支持下,經過一年的開發,驚蟄框架已經頗具規模,開發者可以通過使用驚蟄框架迅速搭建起高性能脈沖神經網絡并進行深度學習。回顧這一年的開源經歷,我的總結如下:
積極擁抱開源。眾人拾柴火焰高,個人的能力終究有限,而開源社區的力量是無窮的。開源的項目可以吸引廣大開發者參與貢獻,共同開發;開源的代碼接受所有用戶的審查,有助于敦促開發者提升代碼質量;好的項目還能成為新項目的基石,衍生出更為豐富的功能
注重教程和文檔的編寫。好的開源項目要吸引用戶的使用和開發者的參與,就必須注重易用性,不能有太高的上手和開發門檻,因此需要注重教程和文檔的編寫。條理清晰、通俗易懂的教程和文檔是對用戶和開發者的尊重,只有真心尊重用戶和開發者,他們才會樂于使用并為項目做出貢獻