Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試

論文提出Spiking-YOLO,是脈衝神經網絡在目標檢測領域的首次成功嘗試,實現了與卷積神經網絡相當的性能,而能源消耗極低。論文內容新穎,比較前沿,推薦給大家閱讀  


論文: Spiking-YOLO: Spiking Neural Network for Energy-Efficient Object Detection

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  • 論文地址:https://arxiv.org/abs/1903.06530

Introduction


  脈衝神經網絡(Spiking neural network, SNN)將脈衝神經元作為計算單元,能夠模仿人類大腦的信息編碼和處理過程。不同於CNN使用具體的值(continuous)進行信息傳遞,SNN通過脈衝序列(discrete)中每個脈衝發射時間(temporal)進行信息的傳遞,能夠提供稀疏但強大的計算能力。脈衝神經元將輸入累積到膜電壓,當達到具體閾值時進行脈衝發射,能夠進行事件驅動式計算。由於脈衝事件的稀疏性以及事件驅動的計算形式,SNN能提供卓越的能源利用效率,是神經形態結構的首選神經網絡   儘管SNN有很多好處,但目前僅能處理相對簡單的任務,由於神經元複雜的動態性以及不可導的操作,暫時沒有一個可擴展的訓練方法。DNN-to-SNN是近期廣泛的SNN訓練方法,該方法將目標DNN轉化成SNN的中間DNN網絡進行訓練,然後轉成SNN並複用其訓練的參數,在小數據集分類上能達到不錯的性能,但是在大數據集上分類結果不太理想   論文打算使用DNN-to-SNN轉化方法將SNN應用到更復雜的目標檢測領域中,圖片分類只需要選擇分類就好,而目標檢測則需要神經網絡進行高度準確的數字預測,難很多。在深入分析後,論文實現YOLO的轉換主要面臨以下兩個問題:

  • 常用的SNN歸一化方法過於低效,導致脈衝發射頻率過低。由於SNN需要設定閾值進行脈衝發射,所以要對權值進行歸一化,這樣有利於閾值的設定,而常用的SNN歸一化方法在目標檢測中顯得過於低效,後面會詳細闡述
  • 在SNN領域,沒有高效leaky-ReLU的實現,因為要將YOLO轉換為SNN,YOLO中包含大量leaky-ReLU,這是很重要的結構,但目前還沒有高效的轉換方法

  為此,論文使用channel-wise歸一化(Channel-wise normalization)和閾值不平衡的有符號神經元(signed neuron with imbalanced threshold)來分別解決以上問題,搭建了基於SNN的目標檢測模型Spiking-YOLO,論文的貢獻總結如下:

  • 深度SNN在目標檢測領域的第一次嘗試
  • channel-wise歸一化,深度SNN的細粒度歸一化方法,使得多個神經元更高但仍然合適的頻率發射脈衝,進而讓SNN信息傳遞更快且更準確
  • 閾值不平衡的有符號神經元,提出leaky-ReLU在SNN領域的高效實現,在神經芯片上也能夠輕量級集成

SNN神經元簡述


Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  SNN使用脈衝序列進行神經元間的信息傳遞,IF(integrate-and-fire)神經元累積輸入到膜電壓

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  第層的第個神經元的膜電壓計算如公式1,為脈衝,為臨界電壓,為神經元的輸入

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  由多個輸入累加,和為權重和偏置

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  當膜電壓大於臨界電壓時產生脈衝,為單位階躍函數(unit step function),滿足輸出1,不滿足則輸出0。由於SNN是事件驅動的,能源利用率相當高,但難以訓練是SNN在所有應用上的主要障礙

Methods


  論文直接使用DNN-to-SNN轉換方法將SNN應用到目標檢測中,發現性能下降得十分嚴重,在分析性能下降原因後,得出兩個主要原因:a) 大量神經元的脈衝發射頻率過低 b) SNN缺少leaky-ReLU的高效實現

Channel-wise data-based normalization

  • Conventional normalization methods

  在SNN中,根據輸入的幅度產生脈衝序列進行無損的內容傳遞是極為重要的。但在固定時間,激活過度或激活不足的神經元內將可能導致內容損失,這和臨界電壓的設置有關。設置過高,神經元需要累積很長時間的電壓才能發射脈衝,相反則會過多地發射脈衝。發射頻率通常定義為,為個timestep的脈衝發射總數,最大的發射率為100%,即每個timestep都發射脈衝

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  為了防止神經元的激活過度和激活不足,權值和臨界電壓都需要精心地選擇。為此,很多研究提出了歸一化的方法,比如常用的Layer-wise normalization(layer-norm)。該方法通過該層的最大化激活值來歸一化層的權值,如公式4,和為權重,為輸出特徵圖最大值。經過歸一化後,神經元的輸出就歸一到,方便設定臨界電壓。由於最大激活值從訓練集得到的,所以測試集和訓練集需要有相同的分佈,但論文實驗發現這種常規的歸一化方法在目標檢測任務上會導致明顯的性能下降

  • Analysis of layer-norm limitation
Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  圖1展示了通過layer-norm後的各層每個channel的最大激活值,藍色和紅色的線分別為每層的平均激活值和最小激活值。可以看到每層的歸一化後的激活值偏差較大,總體而言,layer-norm使得神經元的channel偏向激活不足,這在僅需選擇分類的圖片分類任務是不被察覺的,但對於需要預測準確值的檢測任務的迴歸則不一樣。比如傳遞0.7,則需要在10個timestep脈衝7次,0.007則需要在1000timestep脈衝7次。當tempstep本身就很少時,過低的發射率可能會因發射不到足夠的脈衝而導致信息丟失

  • Proposed normalization method

  論文提出更細力度的歸一化方法,channel-wise normalization(channel-norm),該方法在每層的channel維度上,使用最大激活值對權值進行歸一化

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  channel-wise歸一化方法如公式5,和為維度下標,層權值通過在每個channel使用最大激活值進行歸一化,該值依然是從訓練集計算的。對於非首層中,歸一化的激活值必須乘上來將輸入還原為上一層歸一化前的值,再進行本層的歸一化,不然傳遞的信息會越來越小

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  具體的邏輯如圖2和算法1,channel-wise的歸一化方法能夠消除激活值特別小的問題,即得到更高但合適的發射頻率,在短時間內也能準確地傳遞信息

  • Analysis of the improved firing rate
Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  如圖3所示,對於channel-norm,大多數的神經元能接近80%的發射率,而對於layer-norm,大多數的神經元的發射率在0到3.5%之間,這明顯表明channel-norm避免了過小的激活值使得更多神經發射頻率更高且合適

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  另外從圖4可以看出,channel-norm在大多數的channel上能產生更高的發射頻率,特別在channel 2

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  圖5則隨機採樣了20個神經元,記錄其脈衝活動,使用channel-norm使得大多數神經元能夠更有規律地發射脈衝   從上面的分析可以看出,channle-norm能夠避免過小的歸一化激活值,從而保持較高的脈衝發射頻率,使得神經元能夠在短時間內準確地傳遞信息,是深度SNN在解決更高級的機器學習問題的一種可行解決方案

Signed neuron featuring imbalanced threshold

  • Limitation of leaky-ReLU implementation in SNNs

  ReLU是最常用的激活函數,保留正值而去掉所有的負值,目前的DNN-to-SNN方法都專注於IF神經元與ReLU間的轉換,忽略了激活函數中的負值,而在Tiny-YOLO中,負值激活佔了51%。leaky-ReLU是目前最常用的激活,通過leakage項來保留負值,一般為0.01,但目前還沒有準確且高效的SNN實現方法。此前有研究提出負臨界電壓(-1),使得可以存在正負激活,然後在這基礎乘以來轉換leaky-ReLU,但這違背了生物學(脈衝是離散信號),而在神經芯片上也需額外的模塊進行浮點運算

  • The notion of imbalanced threshold
Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  論文提出閾值不平衡的有符號神經元(IBT),在負值區域使用臨界電壓,不僅可以傳遞正負激活值,保持離散型,還可以高效和準確地仿照leaky-ReLU的leakage項

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  如圖6所示,假設,在時,,膜電壓需要積累多10倍來發射負激活,類似於leaky-ReLU

Evaluation


Spiking-YOLO detection results

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  實驗的目的是無損地將Tiny-YOLO的轉移為SNN,結果如圖7所示,使用channel-norm和IBT能有效地提升性能,且使用的timestep更少

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  論文嘗試了不同的解碼方式,分別為膜電壓和脈衝數,由於脈衝數的餘數要捨棄,這會帶來誤差和信息損失,所以基於膜電壓進行解壓會更準確

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

Spiking-YOLO energy efficiency

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  DNN主要使用相乘累積(multiply-accumulate , MAC)操作,而SNN則主要是累積操作(accumulate, AC),因為脈衝是二值的(1或-1),當接受到脈衝時,不用實時乘權重就可以知道結果。32-bit浮點型MAC和AC分別需要3.6pJ和0.9pJ,而32-bit整數型MAC和AC分別為3.2pJ和0.1pJ。如圖9所示,不管使用哪種歸一化方法,Spiking-YOLO的計算耗能僅為Tiny-YOLO的1/2000倍,能源利用十分高效

Spiking-YOLO : 脈衝神經網絡在目標檢測的首次嘗試 | AAAI 2020

  論文在實際設備上對比了Spiking-YOLO(TrueNorth chip)和Tiny-YOLO(Titan V100),因為channel-norm的發射率較高且合適,所以使用了更少的timestep,能源消耗最少

Conclusion


  論文提出Spiking-YOLO,是脈衝神經網絡在目標檢測領域的首次成功嘗試,實現了與卷積神經網絡相當的性能,而能源消耗極低。論文內容新穎,比較前沿,推薦給大家閱讀

參考內容

  • Towards spike-based machine intelligence with neuromorphic computing (https://www.nature.com/articles/s41586-019-1677-2)
  • Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition (https://link.springer.com/article/10.1007/s11263-014-0788-3)

     

如果本文對你有幫助,麻煩點個贊或在看唄~ 更多內容請關注 微信公眾號【曉飛的算法工程筆記】


分享到:


相關文章: