如何看待第三代神经网络SNN?详解脉冲神经网络的架构原理、数据集和训练方法 原创
作者丨科技猛獸
編輯丨極市平臺(tái)
本文首發(fā)于極市平臺(tái)公眾號(hào),轉(zhuǎn)載請(qǐng)獲得授權(quán)并標(biāo)明出處。
本文目錄
1 脈沖神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介
2 脈沖神經(jīng)網(wǎng)絡(luò)原理
3 脈沖神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集
4 脈沖神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法
5 脈沖神經(jīng)網(wǎng)絡(luò)評(píng)價(jià)指標(biāo)
1 脈沖神經(jīng)網(wǎng)絡(luò)簡(jiǎn)介
脈沖神經(jīng)網(wǎng)絡(luò) (SNN) 屬于第三代神經(jīng)網(wǎng)絡(luò)模型,實(shí)現(xiàn)了更高級(jí)的生物神經(jīng)模擬水平。除了神經(jīng)元和突觸狀態(tài)之外,SNN 還將時(shí)間概念納入了其操作之中,是一種模擬大腦神經(jīng)元?jiǎng)恿W(xué)的一類很有前途的模型。
那么什么是第一代和第二代神經(jīng)網(wǎng)絡(luò)模型呢?
第一代神經(jīng)網(wǎng)絡(luò)
第一代神經(jīng)網(wǎng)絡(luò)又稱為感知器,在1950年左右被提出來,它的算法只有兩層,輸入層輸出層,主要是線性結(jié)構(gòu)。它不能解決線性不可分的問題,對(duì)稍微復(fù)雜一些的函數(shù)都無能為力,如異或操作。
第二代神經(jīng)網(wǎng)絡(luò):BP 神經(jīng)網(wǎng)絡(luò)
為了解決第一代神經(jīng)網(wǎng)絡(luò)的缺陷,在1980年左右 Rumelhart、Williams 等人提出第二代神經(jīng)網(wǎng)絡(luò)多層感知器 (MLP)。和第一代神經(jīng)網(wǎng)絡(luò)相比,第二代在輸入層之間有多個(gè)隱含層的感知機(jī),可以引入一些非線性的結(jié)構(gòu),解決了之前無法模擬異或邏輯的缺陷。
第二代神經(jīng)網(wǎng)絡(luò)讓科學(xué)家們發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)的層數(shù)直接決定了它對(duì)現(xiàn)實(shí)的表達(dá)能力,但是隨著層數(shù)的增加,優(yōu)化函數(shù)愈發(fā)容易出現(xiàn)局部最優(yōu)解的現(xiàn)象,由于存在梯度消失的問題,深層網(wǎng)絡(luò)往往難以訓(xùn)練,效果還不如淺層網(wǎng)絡(luò)。
所有對(duì)目前機(jī)器學(xué)習(xí)有所了解的人都聽說過這樣一個(gè)事實(shí):目前的人工神經(jīng)網(wǎng)絡(luò)是第二代神經(jīng)網(wǎng)絡(luò)。它們通常是全連接的,接收連續(xù)的值,輸出連續(xù)的值。盡管當(dāng)代神經(jīng)網(wǎng)絡(luò)已經(jīng)讓我們?cè)诤芏囝I(lǐng)域中實(shí)現(xiàn)了突破,但它們在生物學(xué)上是不精確的,其實(shí)并不能模仿生物大腦神經(jīng)元的運(yùn)作機(jī)制。
第三代神經(jīng)網(wǎng)絡(luò):脈沖神經(jīng)網(wǎng)絡(luò)
第三代神經(jīng)網(wǎng)絡(luò),脈沖神經(jīng)網(wǎng)絡(luò) (Spiking Neural Network,SNN) ,旨在彌合神經(jīng)科學(xué)和機(jī)器學(xué)習(xí)之間的差距,**使用最擬合生物神經(jīng)元機(jī)制的模型來進(jìn)行計(jì)算,更接近生物神經(jīng)元機(jī)制。**脈沖神經(jīng)網(wǎng)絡(luò)與目前流行的神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)方法有著根本上的不同。SNN 使用脈沖——這是一種發(fā)生在時(shí)間點(diǎn)上的離散事件——而非常見的連續(xù)值。每個(gè)峰值由代表生物過程的微分方程表示出來,其中最重要的是神經(jīng)元的膜電位。本質(zhì)上,一旦神經(jīng)元達(dá)到了某一電位,脈沖就會(huì)出現(xiàn),隨后達(dá)到電位的神經(jīng)元會(huì)被重置。對(duì)此,最常見的模型是 Leaky Integrate-And-Fire (LIF) 模型。此外,SNN 通常是稀疏連接的,并會(huì)利用特殊的網(wǎng)絡(luò)拓?fù)洹?/p>
然而,關(guān)于 SNN 作為人工智能和神經(jīng)形態(tài)計(jì)算機(jī)群體中的計(jì)算工具的實(shí)用價(jià)值,長(zhǎng)期以來一直存在爭(zhēng)論。尤其是和人工神經(jīng)網(wǎng)絡(luò) (ANN) 相比。在過去的幾年里,這些懷疑減緩了神經(jīng)形態(tài)計(jì)算 (neuromorphic computing ) 的發(fā)展,而隨著深度學(xué)習(xí)的快速進(jìn)步,研究人員試圖從根本上緩解這個(gè)問題,人們想要通過加強(qiáng) SNN 的手段,如改善訓(xùn)練算法,來緩解這個(gè)問題。
與成熟有效的人工神經(jīng)網(wǎng)絡(luò) (ANN) 訓(xùn)練算法:誤差反向傳播算法 (Back Propagation) 不同,神經(jīng)網(wǎng)絡(luò)研究中最困難的問題之一是由于復(fù)雜的動(dòng)力學(xué)和脈沖的不可微性質(zhì)導(dǎo)致的訓(xùn)練困難。
為了提升脈沖神經(jīng)網(wǎng)絡(luò)的精度,已有一些前人的工作做出了探索,如:
- Spike timing dependent plasticity (STDP) :無監(jiān)督學(xué)習(xí)方法
1 Unsupervised learning of digit recognition using spike-timing-dependent plasticity
- 添加獎(jiǎng)勵(lì)機(jī)制
2 Combining stdp and reward-modulated stdp in deep convolutional spiking neural networks for digit recognition
- 把預(yù)訓(xùn)練好的 ANN 轉(zhuǎn)化為 SNN
3 Spiking deep convolutional neural networks for energy-efficient object recognition
4 Spiking deep residual network
5 Fast-classifying, high-accuracy spiking deep networks through weight and threshold balancing
6 Training spiking deep networks for neuromorphic hardware
7 Conversion of continuous-valued deep networks to efficient event-driven networks for image classification
為了提升 ANN 與 SNN 的兼容性,通常把 bias 去掉,使用 ReLU 激活函數(shù),把 max-pool 換成 average-pool 等。把 ANN 轉(zhuǎn)化成 SNN 時(shí),通常包括 weight/activation normalization,threshold tuning, sampling error compensation 等操作以維持精度。
- 脈沖神經(jīng)網(wǎng)絡(luò)使用 BP 算法訓(xùn)練
8 Hybrid macro/micro level backpropagation for training deep spiking neural networks
9 Training deep spiking neural networks using backpropagation
10 Spatio-temporal backpropagation for training high-performance spiking neural networks
11 Direct training for spiking neural networks: Faster, larger, better
在執(zhí)行反向傳播時(shí),梯度可以沿著空間維度通過聚合脈沖傳播,也可以沿著時(shí)間和空間2個(gè)維度通過計(jì)算膜電勢(shì)的梯度傳播。
簡(jiǎn)而言之,通過上述努力,SNN 在視覺識(shí)別任務(wù)中的應(yīng)用精度逐漸接近 ANN。
由于 SNN 缺乏專門的benchmark,許多工作直接使用 ANN 的 benchmark 來驗(yàn)證 SNN 模型。例如,用于 ANN 驗(yàn)證的圖像數(shù)據(jù)集被簡(jiǎn)單地轉(zhuǎn)換為 Spike 版本,用于 SNN 訓(xùn)練和測(cè)試。 此外,網(wǎng)絡(luò)的準(zhǔn)確性仍然是主要的評(píng)估指標(biāo),但眾所周知,我們的大腦在絕對(duì)識(shí)別準(zhǔn)確性方面,通常比現(xiàn)有的人工智能機(jī)器表現(xiàn)得差。這反映了我們需要更全面和公平的衡量標(biāo)準(zhǔn)來評(píng)估和模擬生物大腦工作方式的 SNN。簡(jiǎn)而言之,由于不適當(dāng)?shù)脑u(píng)估指標(biāo),目前的 SNN 無法擊敗 ANN。因此,出現(xiàn)了1個(gè)開放的問題,即:
如何評(píng)估 SNN 是有意義的?
Training spiking deep networks for neuromorphic hardware
這篇文章將預(yù)訓(xùn)練好的 ANN 轉(zhuǎn)化成 SNN,在這個(gè)工作里面作者考慮到了 SNN 網(wǎng)絡(luò)的 Efficiency,而不僅僅是 Accuracy。評(píng)價(jià)一個(gè) SNN 時(shí)要從多個(gè)角度考量,比如:application accuracy,memory cost, compute cost 。
在以 ANN 主導(dǎo)的評(píng)價(jià)指標(biāo)和任務(wù)中,相同大小的 SNN 無法打敗 ANN。但是在以 SNN 主導(dǎo)的評(píng)價(jià)指標(biāo)和任務(wù)中,SNN 的表現(xiàn)會(huì)更好。
2 脈沖神經(jīng)網(wǎng)絡(luò)原理
如下圖1所示是ANN 和 SNN 的單個(gè)基本神經(jīng)元。
(a) 圖是典型的單個(gè) ANN 神經(jīng)元,ANN 的計(jì)算方法是:
y=?(b+∑jxjwj)(1)y=\phi (b+\sum_j x_jw_j)\tag{1} y=?(b+j∑?xj?wj?)(1)
式中, ?(?)\phi(\cdot)?(?) 是非線性的激活函數(shù)。
X0X_0X0? 代表上個(gè)神經(jīng)元過來的連續(xù)的激活值 (Pre-activation),通過突觸 (Synapse) 傳遞到樹突的位置 (Dendrite),并且最終由細(xì)胞體 (Soma) 來處理這個(gè)激活值 (具體處理方法就是1式)。
ANN 中的神經(jīng)元使用高精度和連續(xù)值編碼的激活值進(jìn)行相互通信,并且只在空間域 (spatial domain,即 layer by layer) 傳播信息。從上述方程可以看出,輸入和權(quán)重的相乘和累加 (MAC) 是網(wǎng)絡(luò)的主要操作。
**(b) 圖是典型的單個(gè) SNN 神經(jīng)元,**它的結(jié)構(gòu)與 ANN 神經(jīng)元相似,但行為不同。脈沖神經(jīng)元之間的交流通過 binary 的 events,而不是連續(xù)的激活值。
S0S_0S0? 代表上個(gè)神經(jīng)元過來的一個(gè)一個(gè)的脈沖 (Spike),通過突觸 (Synapse) 傳遞到樹突的位置 (Dendrite),并且最終由細(xì)胞體 (Soma) 來處理這些脈沖 (具體處理方法就是2式)。
這個(gè)式子看起來很麻煩,我們先來理解下每個(gè)變量的含義。
式中 ttt 代表時(shí)間步長(zhǎng), τ\tauτ 是常數(shù), uuu 和 sss 代表膜電位和輸出峰值。
ur1u_{r_1}ur1?? 和 ur2u_{r_2}ur2?? 分別是靜息電位和重置電位。
wjw_jwj? 是第 jjj 個(gè)輸入突觸的權(quán)重。
tjkt_j^ktjk? 是當(dāng)?shù)?jjj 個(gè)輸入突觸的第 kkk 個(gè)脈沖在 TwT_wTw? 這個(gè)積分時(shí)間窗口內(nèi)激發(fā)了 (即狀態(tài)為1) 的時(shí)刻。
K(?)K(\cdot)K(?) 是代表延時(shí)效應(yīng)的核函數(shù)。
TwT_wTw? 是積分時(shí)間窗口。
uthu_{th}uth? 是個(gè)閾值,代表要不要點(diǎn)火 (Fire) 一次。
接下來我們用人話解釋一下2式是什么意思:
1 當(dāng)膜電位 u(t)u(t)u(t) (也就是細(xì)胞體 Soma 這個(gè)隱含電位) 高于閾值 uthu_{th}uth? 時(shí),脈沖神經(jīng)元看做一次點(diǎn)火,此時(shí)輸出電位 s(t)s(t)s(t) 置為1,同時(shí)膜電位 u(t)u(t)u(t) 回歸到重置電位 ur2u_{r_2}ur2?? 。
2 當(dāng)膜電位 u(t)u(t)u(t) (也就是細(xì)胞體 Soma 這個(gè)隱含電位) 低于閾值 uthu_{th}uth? 時(shí),不點(diǎn)火,此時(shí)輸出電位 s(t)s(t)s(t) 保持為0。
3 在每個(gè) time step,膜電位 u(t)u(t)u(t) 的更新過程滿足一個(gè)微分方程,即2.1式。
4 在每個(gè) time step,膜電位 u(t)u(t)u(t) 值應(yīng)下降 u(t)?ur1u(t)-u_{r_1}u(t)?ur1?? 這么大的值,其中 ur1u_{r_1}ur1?? 是靜息電位。
5 同時(shí)在每個(gè) time step,膜電位 u(t)u(t)u(t) 值應(yīng)上升一個(gè)值,這個(gè)值來的大小與這個(gè)神經(jīng)元的 jjj 個(gè)輸入突觸有關(guān),每個(gè)輸入突觸的權(quán)值是 wjw_jwj? ,這個(gè)突觸對(duì)膜電位上升的貢獻(xiàn)值是 ∑tjk∈SjTwK(t?tjk)\sum_{t_j^k\in S_j^{T_w}}K(t-t_j^k)∑tjk?∈SjTw???K(t?tjk?) ,即在 SjTwS_j^{T_w}SjTw?? 個(gè)脈沖中,如果 tjkt_j^ktjk? 時(shí)刻的輸入脈沖是點(diǎn)火狀態(tài) (即1狀態(tài)),那么計(jì)算一次 K(t?tjk)K(t-t_j^k)K(t?tjk?) 并累積起來。
與 ANN 不同的是,SNN 使用脈沖的序列來傳遞信息,每個(gè)脈沖神經(jīng)元都經(jīng)歷著豐富的動(dòng)態(tài)行為。 具體而言,除了空間域中的信息傳播外,時(shí)間域中的過去歷史也會(huì)對(duì)當(dāng)前狀態(tài)產(chǎn)生緊密的影響。 因此,與主要通過空間傳播和連續(xù)激活的神經(jīng)網(wǎng)絡(luò)相比,神經(jīng)網(wǎng)絡(luò)通常具有更多的時(shí)間通用性,但精度較低。 由于只有當(dāng)膜電位超過一個(gè)閾值時(shí)才會(huì)激發(fā)尖峰信號(hào),因此整個(gè)尖峰信號(hào)通常很稀疏。 此外,由于尖峰值 (Spike) 是二進(jìn)制的,即0或1,如果積分時(shí)間窗口 TwT_wTw? 調(diào)整為1,輸入和權(quán)重之間的乘法運(yùn)算就可以消除。由于上述原因,與計(jì)算量較大的 ANN 網(wǎng)絡(luò)相比,SNN 網(wǎng)絡(luò)通常可以獲得較低的功耗。
3 脈沖神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集
這一節(jié)介紹下脈沖神經(jīng)網(wǎng)絡(luò)的基本數(shù)據(jù)集。
像 MNIST,CIFAR10 這類基于幀的靜態(tài)圖像,廣泛應(yīng)用于 ANN 中,我們稱之為 ANN-oriented dataset,如下圖2的前2行所示。
**CIFAR-10:**32×32×3 RGB image,Training set:50000,Testing set:10000
**MNIST:**28×28×1 grayscale image,Training set:60000,Testing set:10000
圖2的后2行 N-MNIST 和 DVS-CIFAR10 叫做 SNN-oriented dataset。這里的 DVS 叫做 dynamic vision sensor,代表使用了動(dòng)態(tài)視覺傳感器掃描每張 images 得到的 spike 數(shù)據(jù)。它除了具有與 ANN-oriented dataset 相似的空間信息外,還包含更多的動(dòng)態(tài)時(shí)間信息,而且尖峰事件與神經(jīng)網(wǎng)絡(luò)中的信號(hào)格式自然兼容,因此我們稱之為 SNN-oriented dataset。
DVS 產(chǎn)生兩個(gè)通道的脈沖事件,命名為 On 和Off 事件 (分別如圖2中紅色和藍(lán)色所示)。因此,DVS 將每個(gè)圖像轉(zhuǎn)換為 row×column×2×Trow\times column\times 2\times Trow×column×2×T 的脈沖模式。
**N-MNIST:**34×34×2×T spatio-temporal spike pattern,Training set:60000,Testing set:10000
**DVS-CIFAR-10:**128×128×2×T spatio-temporal spike pattern,Training set:9000,Testing set:1000
一般來說,ANN 接收幀為基礎(chǔ)的圖像,而 SNN 接收事件驅(qū)動(dòng)的脈沖信號(hào)。因此,有時(shí)需要將相同的數(shù)據(jù)轉(zhuǎn)換為另一個(gè)域中的不同形式來處理。本文以視覺識(shí)別任務(wù)為例,主要介紹了四種信號(hào)轉(zhuǎn)換方法,如下圖3所示。
Image to spike pattern
由圖片信號(hào)轉(zhuǎn)化為脈沖信號(hào)的方法比較直觀。
一種方法是:如圖3 (a) 所示。 在每一個(gè)時(shí)間步驟,采樣的原始像素強(qiáng)度 (pixel intensity) 到一個(gè)二進(jìn)制值 (通常歸一化為[0,1]),其中的這個(gè)強(qiáng)度值就等于發(fā)射一個(gè)脈沖的概率。這個(gè)采樣樣遵循一個(gè)特定的概率分布,例如伯努利分布或泊松分布。
例如,圖3(a) 中的 i1i_1i1? 神經(jīng)元,對(duì)應(yīng)于標(biāo)準(zhǔn)化強(qiáng)度為 0.8 的 intensity,產(chǎn)生一個(gè)二進(jìn)制尖峰序列,跟隨著伯努利分布 B(0.8,T)B(0.8,T)B(0.8,T) 。這里 TTT 是取樣的時(shí)間窗口。
再例如,圖3(a) 中的 i2i_2i2? 神經(jīng)元,對(duì)應(yīng)于標(biāo)準(zhǔn)化強(qiáng)度為 0.1 的 intensity,產(chǎn)生一個(gè)二進(jìn)制尖峰序列,跟隨著伯努利分布 B(0.1,T)B(0.1,T)B(0.1,T) 。這里 TTT 是取樣的時(shí)間窗口。
這種方法在取樣的時(shí)間窗口 TTT 比較短時(shí)有一個(gè)較大的精度損失。
另一種方法是: 如圖3 (b) 所示。使用一個(gè)編碼器來產(chǎn)生全局的脈沖信號(hào)。這個(gè)編碼器的每個(gè)神經(jīng)元接受圖片多個(gè)像素的強(qiáng)度值intensity 信號(hào)作為輸入, 而產(chǎn)生脈沖作為輸出。 雖然編碼層是 ANN-SNN 混合層,而不是像網(wǎng)絡(luò)中的其他層那樣的完整 SNN 層,但它的權(quán)重是可訓(xùn)練的,因?yàn)槲覀兊挠?xùn)練方法也是 BP 兼容的。由于神經(jīng)元的數(shù)量可以靈活定制,參數(shù)也可以調(diào)整,因此它可以適應(yīng)整體最佳化問題,從而獲得更高的精確度。
Spike pattern to image
由脈沖信號(hào)轉(zhuǎn)化為圖片信號(hào)的輸出主要有2種:
如圖3(c) 所示,代表把脈沖pattern轉(zhuǎn)化為二值圖片。2D 脈沖 pattern 可以直接看做一個(gè)二值圖像 (每個(gè)脈沖 Event 代表像素強(qiáng)度為1,否則像素強(qiáng)度為0)。 為了轉(zhuǎn)換為強(qiáng)度圖像 (Intensity image),需要在一個(gè)時(shí)間窗 TTT 內(nèi)隨時(shí)間對(duì)脈沖時(shí)間的累積。
如圖3(d)所示,代表把脈沖pattern轉(zhuǎn)化為強(qiáng)度圖片。描述了100毫秒內(nèi)脈沖事件的累積過程,累積脈沖數(shù)將被歸一化為具有適當(dāng)強(qiáng)度值的像素。由于 DVS 的相對(duì)運(yùn)動(dòng)和固有噪聲,使得圖像常常模糊,邊緣特征模糊。這種轉(zhuǎn)換只允許一個(gè)強(qiáng)大的假設(shè),每個(gè)脈沖位置不應(yīng)該移動(dòng),否則將嚴(yán)重?fù)p害生成的圖像質(zhì)量。
- ANN-oriented workloads
ANN-oriented workloads 的含義是目標(biāo)是識(shí)別在 ANN 中經(jīng)常使用的基于幀的數(shù)據(jù)集 (如 MNIST 和 CIFAR10)。有3種基準(zhǔn)模型:
1 如下圖4(a) 所示,最直接的解決辦法是 ANN 訓(xùn)練 + ANN 推理。
2 如下圖4(b) 所示,這種方案是先在 ANN 數(shù)據(jù)集上使用 BP 算法訓(xùn)練一個(gè) ANN,再把這個(gè)訓(xùn)練好的 ANN 轉(zhuǎn)化成 SNN。這個(gè) SNN 與 ANN 擁有相同的結(jié)構(gòu),但是不同的神經(jīng)元。這個(gè) SNN 在推理時(shí)使用的是 ANN 數(shù)據(jù)集轉(zhuǎn)化得到的 SNN-oriented dataset。
3 如下圖4(c) 所示,這種方案是直接使用 SNN-oriented dataset 訓(xùn)練一個(gè) SNN,訓(xùn)練方法是 BP-inspired Training。在每個(gè)時(shí)刻和位置的梯度直接由 spatio-temporal backpropagation (STBP) 方法得到。
- SNN-oriented workloads
SNN-oriented workloads 的含義是目標(biāo)是識(shí)別在 SNN 中經(jīng)常使用的脈沖數(shù)據(jù)集 (如 N-MNIST 和 DVS-CIFAR10)。有2種基準(zhǔn)模型:
1 如下圖5(a) 所示,把脈沖數(shù)據(jù)集轉(zhuǎn)化成圖片,即 ANN-oriented dataset,然后使用 BP 算法訓(xùn)練 ANN 并推理。脈沖數(shù)據(jù)集轉(zhuǎn)化成圖片的方法就是圖3的 (c)(d) 所示。
2 如下圖5(b) 所示,這種方案是直接使用 SNN-oriented dataset 訓(xùn)練一個(gè) SNN,訓(xùn)練方法是 BP-inspired Training。在每個(gè)時(shí)刻和位置的梯度直接由 spatio-temporal backpropagation (STBP) 方法得到。
4 脈沖神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法
- ANN 的 BP 訓(xùn)練方法
可以用下式表示:
式中, φj′n+1\varphi_j^{'n+1}φj′n+1? 是 n+1n+1n+1 層的第 jjj 個(gè)神經(jīng)元的激活函數(shù)的導(dǎo)數(shù)。 LLL 是損失函數(shù),比如可以是 MSE Loss: L=12∣∣Y?Ylabel∣∣22L=\frac{1}{2}||Y-Y_{\text{label}}||_2^2L=21?∣∣Y?Ylabel?∣∣22? 。
- SNN 的 STBP (時(shí)空反向傳播) 訓(xùn)練方法
基于的前向模型是2式的 LIF 的 SNN 模型,為了閱讀的方便再把2式寫一遍。
LIF 模型的迭代版本可以用下式表示:
式中, ooo 代表脈沖輸出, ttt 代表 time step, nnn 代表 layer index。 e?dtτe^{-\frac{dt}{\tau}}e?τdt? 代表膜電位的延遲效應(yīng)。 f(?)f(\cdot)f(?) 是階躍函數(shù) (step function)。 這種迭代的 LIF 模型包含了原始神經(jīng)元模型中的所有行為,包括集成 (integration),觸發(fā) (fire) 和重置 (reset)。
注意,為了簡(jiǎn)單起見,我們?cè)谠瓉淼?LIF 模型中設(shè)置了 ur1=ur2=0,Tw=1,K(?)=1u_{r_1}=u_{r_2}=0,T_w=1,K(\cdot)=1ur1??=ur2??=0,Tw?=1,K(?)=1 。給定迭代 LIF 模型,梯度沿著時(shí)間和空間維度傳播,LIF 模型的迭代版本的參數(shù)更新可以按照如下方式進(jìn)行:
從膜電位 uuu 到輸出 ooo 是個(gè)階躍函數(shù),它是不可導(dǎo)的。為了解決這個(gè)問題,有下面這個(gè)輔助函數(shù)計(jì)算輸出 ooo 到膜電位 uuu 的導(dǎo)數(shù)值:
?o?u=1asign(∣u?uth∣<a2)(4)\frac{\partial o}{\partial u}=\frac{1}{a}\text{sign}(|u-u_{th}|<\frac{a}{2})\tag{4} ?u?o?=a1?sign(∣u?uth?∣<2a?)(4)
式中,參數(shù) aaa 決定了梯度寬度。
LLL 是損失函數(shù),比如可以是 MSE Loss: L=12∣∣1T∑t=1TOt,N?Ylabel∣∣22L=\frac{1}{2}||\frac{1}{T}\sum_{t=1}^{T}{O^{t,N}}-Y_{\text{label}}||_2^2L=21?∣∣T1?∑t=1T?Ot,N?Ylabel?∣∣22? 。
5 脈沖神經(jīng)網(wǎng)絡(luò)評(píng)價(jià)指標(biāo)
眾所周知,基于 SNN 的模型通常無法在絕對(duì)識(shí)別準(zhǔn)確性方面擊敗當(dāng)前基于 ANN 的 AI 系統(tǒng),而真正的大腦在其他指標(biāo)上表現(xiàn)更好,比如操作效率。然而,在最近的研究中,識(shí)別精度仍然是判斷哪個(gè)模型 (ANN 或 SNN) 更好的主流指標(biāo),特別是在算法研究中。這是不公平的,因?yàn)?ANN 和 SNN 有非常不同的特點(diǎn)。例如,數(shù)據(jù)的精度 ANN 比 SNN 更高,這就使得在網(wǎng)絡(luò)大小相同的情況下,ANN 通常比 SNN 更容易獲得更好的識(shí)別精度。所有這些都表明模型評(píng)估需要更全面的度量。除了通常的精度比較,這里我們進(jìn)一步介紹了內(nèi)存和計(jì)算成本作為互補(bǔ)的評(píng)估指標(biāo)。
- 識(shí)別精度 (Recognition accuracy)
在 ANN 中,這個(gè)精確度意味著正確識(shí)別樣本的百分比。如果標(biāo)簽類別與模型預(yù)測(cè)的最大激活值相同,則識(shí)別結(jié)果對(duì)當(dāng)前樣本是正確的。
在 SNN 中,我們首先計(jì)算每一個(gè)輸出神經(jīng)元的 fire rate,即脈沖率,當(dāng)然是在給定的時(shí)間窗 TTT 內(nèi)。然后取 fire rate 最高的那個(gè)神經(jīng)元作為輸出,寫成公式就是:
C^=arg?max?i{1T∑t=1Toit,N}(5)\hat C=\arg\max_i \left\{ \frac{1}{T}\sum_{t=1}^{T}{o_i^{t,N}} \right\}\tag{5} C^=argimax?{T1?t=1∑T?oit,N?}(5)
式中, oit,No_i^{t,N}oit,N? 代表網(wǎng)絡(luò)的第 NNN 層,第 iii 個(gè)神經(jīng)元在第 ttt 時(shí)刻的輸出。
下面介紹的內(nèi)存花銷和計(jì)算花銷都是指推理過程。原因有2點(diǎn),一方面, spatio-temporal gradient propagation 相對(duì)于推理過程來講非常復(fù)雜。另一方面, 大多數(shù)支持 SNN 的神經(jīng)形態(tài)學(xué)設(shè)備只執(zhí)行推理階段 (inference phase)。
- 內(nèi)存花銷 (Memory cost)
通常,在嵌入式設(shè)備上部署模型時(shí),內(nèi)存占用 (Memory cost) 非常重要。
在 ANN 中,存儲(chǔ)器成本包括 權(quán)重內(nèi)存 (weight memory) 和激活值內(nèi)存 (activation memory)。activation memory 的開銷被忽略,但是如果使用查找表來實(shí)現(xiàn)的話應(yīng)該被計(jì)算在內(nèi)。
在 SNN 中,內(nèi)存成本包括 權(quán)重內(nèi)存 (weight memory),膜電位內(nèi)存 (membrane potential memory) 和脈沖內(nèi)存 (spike memory)。其他參數(shù)如點(diǎn)火閾值 uthu_{th}uth? 和時(shí)間常數(shù) τ\tauτ 等可以忽略,因?yàn)樗鼈兛梢员煌粚踊蛘麄€(gè)神經(jīng)網(wǎng)絡(luò)的所有神經(jīng)元共享。只有當(dāng)脈沖觸發(fā)時(shí),脈沖內(nèi)存 (spike memory) 開銷才會(huì)出現(xiàn)。總之,內(nèi)存開銷可以通過下式計(jì)算:
ANN:M=Mw+MaSNN:M=Mw+Mp+Ms(6)\begin{aligned} &A N N: M=M_{w}+M_{a} \\ &S N N: M=M_{w}+M_{p}+M_{s} \end{aligned} \tag{6}?ANN:M=Mw?+Ma?SNN:M=Mw?+Mp?+Ms??(6)
式中, Mw,Ma,MpM_w,M_a,M_pMw?,Ma?,Mp? 由網(wǎng)絡(luò)結(jié)構(gòu)決定,而 MsM_sMs? 由每個(gè)時(shí)間戳最大脈沖數(shù)動(dòng)態(tài)地決定。
- 計(jì)算花銷 (Compute cost)
計(jì)算開銷對(duì)于運(yùn)行延遲和能量消耗是至關(guān)重要的。
在 ANN 中,計(jì)算開銷主要由方程中的 MAC 運(yùn)算決定。
在 SNN 中,主要的計(jì)算成本來自脈沖輸入的這個(gè)積分的過程。與 ANN 有兩點(diǎn)不同:
計(jì)算開銷可以通過下式計(jì)算:
ANN:C=Cmul+CaddSNN:C=Cadd(7)\begin{aligned} &A N N: C=C_{m u l}+C_{a d d} \\ &S N N: C=C_{a d d} \end{aligned} \tag{7}?ANN:C=Cmul?+Cadd?SNN:C=Cadd??(7)
在細(xì)胞體中的計(jì)算開銷 (例如 ANN 中的激活函數(shù)和 SNN 中的膜電位更新和觸發(fā)活動(dòng)) 被忽略,這是神經(jīng)網(wǎng)絡(luò)設(shè)備中的一種常見方式。
注意,在 SNN 中, CaddC_{add}Cadd? 與 Spike 事件的總數(shù)成正比。
總結(jié)
以上是生活随笔為你收集整理的如何看待第三代神经网络SNN?详解脉冲神经网络的架构原理、数据集和训练方法 原创的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文看尽 CVPR2022 最新 22
- 下一篇: 2018到2008,10年CVPR/NI