作者丨科技猛獸
編輯丨極市平臺
本文首發(fā)于極市平臺公眾號,轉(zhuǎn)載請獲得授權(quán)并標(biāo)明出處。
本文目錄
1 脈沖神經(jīng)網(wǎng)絡(luò)簡介
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ò)評價(jià)指標(biāo)
1 脈沖神經(jīng)網(wǎng)絡(luò)簡介
脈沖神經(jīng)網(wǎng)絡(luò) (SNN) 屬于第三代神經(jīng)網(wǎng)絡(luò)模型,實(shí)現(xiàn)了更高級的生物神經(jīng)模擬水平。除了神經(jīng)元和突觸狀態(tài)之外,SNN 還將時(shí)間概念納入了其操作之中,是一種模擬大腦神經(jīng)元動力學(xué)的一類很有前途的模型。
那么什么是第一代和第二代神經(jīng)網(wǎng)絡(luò)模型呢?
第一代神經(jīng)網(wǎng)絡(luò)
第一代神經(jīng)網(wǎng)絡(luò)又稱為感知器,在1950年左右被提出來,它的算法只有兩層,輸入層輸出層,主要是線性結(jié)構(gòu)。它不能解決線性不可分的問題,對稍微復(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ù)直接決定了它對現(xiàn)實(shí)的表達(dá)能力,但是隨著層數(shù)的增加,優(yōu)化函數(shù)愈發(fā)容易出現(xiàn)局部最優(yōu)解的現(xiàn)象,由于存在梯度消失的問題,深層網(wǎng)絡(luò)往往難以訓(xùn)練,效果還不如淺層網(wǎng)絡(luò)。
所有對目前機(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)讓我們在很多領(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á)到了某一電位,脈沖就會出現(xiàn),隨后達(dá)到電位的神經(jīng)元會被重置。對此,最常見的模型是 Leaky Integrate-And-Fire (LIF) 模型。此外,SNN 通常是稀疏連接的,并會利用特殊的網(wǎng)絡(luò)拓?fù)洹?/p>
然而,關(guān)于 SNN 作為人工智能和神經(jīng)形態(tài)計(jì)算機(jī)群體中的計(jì)算工具的實(shí)用價(jià)值,長期以來一直存在爭論。尤其是和人工神經(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ù)雜的動力學(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
- 添加獎勵機(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ì)算膜電勢的梯度傳播。
簡而言之,通過上述努力,SNN 在視覺識別任務(wù)中的應(yīng)用精度逐漸接近 ANN。
由于 SNN 缺乏專門的benchmark,許多工作直接使用 ANN 的 benchmark 來驗(yàn)證 SNN 模型。例如,用于 ANN 驗(yàn)證的圖像數(shù)據(jù)集被簡單地轉(zhuǎn)換為 Spike 版本,用于 SNN 訓(xùn)練和測試。 此外,網(wǎng)絡(luò)的準(zhǔn)確性仍然是主要的評估指標(biāo),但眾所周知,我們的大腦在絕對識別準(zhǔn)確性方面,通常比現(xiàn)有的人工智能機(jī)器表現(xiàn)得差。這反映了我們需要更全面和公平的衡量標(biāo)準(zhǔn)來評估和模擬生物大腦工作方式的 SNN。簡而言之,由于不適當(dāng)?shù)脑u估指標(biāo),目前的 SNN 無法擊敗 ANN。因此,出現(xiàn)了1個(gè)開放的問題,即:
如何評估 SNN 是有意義的?
Training spiking deep networks for neuromorphic hardware
這篇文章將預(yù)訓(xùn)練好的 ANN 轉(zhuǎn)化成 SNN,在這個(gè)工作里面作者考慮到了 SNN 網(wǎng)絡(luò)的 Efficiency,而不僅僅是 Accuracy。評價(jià)一個(gè) SNN 時(shí)要從多個(gè)角度考量,比如:application accuracy,memory cost, compute cost 。
在以 ANN 主導(dǎo)的評價(jià)指標(biāo)和任務(wù)中,相同大小的 SNN 無法打敗 ANN。但是在以 SNN 主導(dǎo)的評價(jià)指標(biāo)和任務(wù)中,SNN 的表現(xiàn)會更好。
2 脈沖神經(jīng)網(wǎng)絡(luò)原理
如下圖1所示是ANN 和 SNN 的單個(gè)基本神經(jīng)元。
(a) 圖是典型的單個(gè) ANN 神經(jīng)元,ANN 的計(jì)算方法是:
y = ? ( b + ∑ j x j w j ) (1) y=\phi (b+\sum_j x_jw_j)\tag{1} y=?(b+j∑?xj?wj?)(1)
式中, ? ( ? ) \phi(\cdot) ?(?) 是非線性的激活函數(shù)。
X 0 X_0 X0? 代表上個(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ù)的激活值。
S 0 S_0 S0? 代表上個(gè)神經(jīng)元過來的一個(gè)一個(gè)的脈沖 (Spike),通過突觸 (Synapse) 傳遞到樹突的位置 (Dendrite),并且最終由細(xì)胞體 (Soma) 來處理這些脈沖 (具體處理方法就是2式)。
這個(gè)式子看起來很麻煩,我們先來理解下每個(gè)變量的含義。
式中 t t t 代表時(shí)間步長, τ \tau τ 是常數(shù), u u u 和 s s s 代表膜電位和輸出峰值。
u r 1 u_{r_1} ur1?? 和 u r 2 u_{r_2} ur2?? 分別是靜息電位和重置電位。
w j w_j wj? 是第 j j j 個(gè)輸入突觸的權(quán)重。
t j k t_j^k tjk? 是當(dāng)?shù)? j j j 個(gè)輸入突觸的第 k k k 個(gè)脈沖在 T w T_w Tw? 這個(gè)積分時(shí)間窗口內(nèi)激發(fā)了 (即狀態(tài)為1) 的時(shí)刻。
K ( ? ) K(\cdot) K(?) 是代表延時(shí)效應(yīng)的核函數(shù)。
T w T_w Tw? 是積分時(shí)間窗口。
u t h u_{th} uth? 是個(gè)閾值,代表要不要點(diǎn)火 (Fire) 一次。
接下來我們用人話解釋一下2式是什么意思:
1 當(dāng)膜電位 u ( t ) u(t) u(t) (也就是細(xì)胞體 Soma 這個(gè)隱含電位) 高于閾值 u t h u_{th} uth? 時(shí),脈沖神經(jīng)元看做一次點(diǎn)火,此時(shí)輸出電位 s ( t ) s(t) s(t) 置為1,同時(shí)膜電位 u ( t ) u(t) u(t) 回歸到重置電位 u r 2 u_{r_2} ur2?? 。
2 當(dāng)膜電位 u ( t ) u(t) u(t) (也就是細(xì)胞體 Soma 這個(gè)隱含電位) 低于閾值 u t h u_{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 ) ? u r 1 u(t)-u_{r_1} u(t)?ur1?? 這么大的值,其中 u r 1 u_{r_1} ur1?? 是靜息電位。
5 同時(shí)在每個(gè) time step,膜電位 u ( t ) u(t) u(t) 值應(yīng)上升一個(gè)值,這個(gè)值來的大小與這個(gè)神經(jīng)元的 j j j 個(gè)輸入突觸有關(guān),每個(gè)輸入突觸的權(quán)值是 w j w_j wj? ,這個(gè)突觸對膜電位上升的貢獻(xiàn)值是 ∑ t j k ∈ S j T w K ( t ? t j k ) \sum_{t_j^k\in S_j^{T_w}}K(t-t_j^k) ∑tjk?∈SjTw???K(t?tjk?) ,即在 S j T w S_j^{T_w} SjTw?? 個(gè)脈沖中,如果 t j k t_j^k tjk? 時(shí)刻的輸入脈沖是點(diǎn)火狀態(tài) (即1狀態(tài)),那么計(jì)算一次 K ( t ? t j k ) K(t-t_j^k) K(t?tjk?) 并累積起來。
與 ANN 不同的是,SNN 使用脈沖的序列來傳遞信息,每個(gè)脈沖神經(jīng)元都經(jīng)歷著豐富的動態(tài)行為。 具體而言,除了空間域中的信息傳播外,時(shí)間域中的過去歷史也會對當(dāng)前狀態(tài)產(chǎn)生緊密的影響。 因此,與主要通過空間傳播和連續(xù)激活的神經(jīng)網(wǎng)絡(luò)相比,神經(jīng)網(wǎng)絡(luò)通常具有更多的時(shí)間通用性,但精度較低。 由于只有當(dāng)膜電位超過一個(gè)閾值時(shí)才會激發(fā)尖峰信號,因此整個(gè)尖峰信號通常很稀疏。 此外,由于尖峰值 (Spike) 是二進(jìn)制的,即0或1,如果積分時(shí)間窗口 T w T_w Tw? 調(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,代表使用了動態(tài)視覺傳感器掃描每張 images 得到的 spike 數(shù)據(jù)。它除了具有與 ANN-oriented dataset 相似的空間信息外,還包含更多的動態(tài)時(shí)間信息,而且尖峰事件與神經(jīng)網(wǎng)絡(luò)中的信號格式自然兼容,因此我們稱之為 SNN-oriented dataset。
DVS 產(chǎn)生兩個(gè)通道的脈沖事件,命名為 On 和Off 事件 (分別如圖2中紅色和藍(lán)色所示)。因此,DVS 將每個(gè)圖像轉(zhuǎn)換為 r o w × c o l u m n × 2 × T row\times column\times 2\times T row×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ū)動的脈沖信號。因此,有時(shí)需要將相同的數(shù)據(jù)轉(zhuǎn)換為另一個(gè)域中的不同形式來處理。本文以視覺識別任務(wù)為例,主要介紹了四種信號轉(zhuǎn)換方法,如下圖3所示。
Image to spike pattern
由圖片信號轉(zhuǎn)化為脈沖信號的方法比較直觀。
一種方法是:如圖3 (a) 所示。 在每一個(gè)時(shí)間步驟,采樣的原始像素強(qiáng)度 (pixel intensity) 到一個(gè)二進(jìn)制值 (通常歸一化為[0,1]),其中的這個(gè)強(qiáng)度值就等于發(fā)射一個(gè)脈沖的概率。這個(gè)采樣樣遵循一個(gè)特定的概率分布,例如伯努利分布或泊松分布。
例如,圖3(a) 中的 i 1 i_1 i1? 神經(jīng)元,對應(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) 。這里 T T T 是取樣的時(shí)間窗口。
再例如,圖3(a) 中的 i 2 i_2 i2? 神經(jīng)元,對應(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) 。這里 T T T 是取樣的時(shí)間窗口。
這種方法在取樣的時(shí)間窗口 T T T 比較短時(shí)有一個(gè)較大的精度損失。
另一種方法是: 如圖3 (b) 所示。使用一個(gè)編碼器來產(chǎn)生全局的脈沖信號。這個(gè)編碼器的每個(gè)神經(jīng)元接受圖片多個(gè)像素的強(qiáng)度值intensity 信號作為輸入, 而產(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
由脈沖信號轉(zhuǎn)化為圖片信號的輸出主要有2種:
- binary image with 0/1 pixels。
- intensity image with real-valued pixels。
如圖3(c) 所示,代表把脈沖pattern轉(zhuǎn)化為二值圖片。2D 脈沖 pattern 可以直接看做一個(gè)二值圖像 (每個(gè)脈沖 Event 代表像素強(qiáng)度為1,否則像素強(qiáng)度為0)。 為了轉(zhuǎn)換為強(qiáng)度圖像 (Intensity image),需要在一個(gè)時(shí)間窗 T T T 內(nèi)隨時(shí)間對脈沖時(shí)間的累積。
如圖3(d)所示,代表把脈沖pattern轉(zhuǎn)化為強(qiáng)度圖片。描述了100毫秒內(nèi)脈沖事件的累積過程,累積脈沖數(shù)將被歸一化為具有適當(dāng)強(qiáng)度值的像素。由于 DVS 的相對運(yùn)動和固有噪聲,使得圖像常常模糊,邊緣特征模糊。這種轉(zhuǎn)換只允許一個(gè)強(qiáng)大的假設(shè),每個(gè)脈沖位置不應(yīng)該移動,否則將嚴(yán)重?fù)p害生成的圖像質(zhì)量。
- ANN-oriented workloads
ANN-oriented workloads 的含義是目標(biāo)是識別在 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)是識別在 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 + 1 n+1 n+1 層的第 j j j 個(gè)神經(jīng)元的激活函數(shù)的導(dǎo)數(shù)。 L L L 是損失函數(shù),比如可以是 MSE Loss: L = 1 2 ∣ ∣ Y ? Y label ∣ ∣ 2 2 L=\frac{1}{2}||Y-Y_{\text{label}}||_2^2 L=21?∣∣Y?Ylabel?∣∣22? 。
- SNN 的 STBP (時(shí)空反向傳播) 訓(xùn)練方法
基于的前向模型是2式的 LIF 的 SNN 模型,為了閱讀的方便再把2式寫一遍。
LIF 模型的迭代版本可以用下式表示:
式中, o o o 代表脈沖輸出, t t t 代表 time step, n n n 代表 layer index。 e ? d t τ e^{-\frac{dt}{\tau}} e?τdt? 代表膜電位的延遲效應(yīng)。 f ( ? ) f(\cdot) f(?) 是階躍函數(shù) (step function)。 這種迭代的 LIF 模型包含了原始神經(jīng)元模型中的所有行為,包括集成 (integration),觸發(fā) (fire) 和重置 (reset)。
注意,為了簡單起見,我們在原來的 LIF 模型中設(shè)置了 u r 1 = u r 2 = 0 , T w = 1 , K ( ? ) = 1 u_{r_1}=u_{r_2}=0,T_w=1,K(\cdot)=1 ur1??=ur2??=0,Tw?=1,K(?)=1 。給定迭代 LIF 模型,梯度沿著時(shí)間和空間維度傳播,LIF 模型的迭代版本的參數(shù)更新可以按照如下方式進(jìn)行:
從膜電位 u u u 到輸出 o o o 是個(gè)階躍函數(shù),它是不可導(dǎo)的。為了解決這個(gè)問題,有下面這個(gè)輔助函數(shù)計(jì)算輸出 o o o 到膜電位 u u u 的導(dǎo)數(shù)值:
? o ? u = 1 a sign ( ∣ u ? u t h ∣ < a 2 ) (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ù) a a a 決定了梯度寬度。
L L L 是損失函數(shù),比如可以是 MSE Loss: L = 1 2 ∣ ∣ 1 T ∑ t = 1 T O t , N ? Y label ∣ ∣ 2 2 L=\frac{1}{2}||\frac{1}{T}\sum_{t=1}^{T}{O^{t,N}}-Y_{\text{label}}||_2^2 L=21?∣∣T1?∑t=1T?Ot,N?Ylabel?∣∣22? 。
5 脈沖神經(jīng)網(wǎng)絡(luò)評價(jià)指標(biāo)
眾所周知,基于 SNN 的模型通常無法在絕對識別準(zhǔn)確性方面擊敗當(dāng)前基于 ANN 的 AI 系統(tǒng),而真正的大腦在其他指標(biāo)上表現(xiàn)更好,比如操作效率。然而,在最近的研究中,識別精度仍然是判斷哪個(gè)模型 (ANN 或 SNN) 更好的主流指標(biāo),特別是在算法研究中。這是不公平的,因?yàn)?ANN 和 SNN 有非常不同的特點(diǎn)。例如,數(shù)據(jù)的精度 ANN 比 SNN 更高,這就使得在網(wǎng)絡(luò)大小相同的情況下,ANN 通常比 SNN 更容易獲得更好的識別精度。所有這些都表明模型評估需要更全面的度量。除了通常的精度比較,這里我們進(jìn)一步介紹了內(nèi)存和計(jì)算成本作為互補(bǔ)的評估指標(biāo)。
- 識別精度 (Recognition accuracy)
在 ANN 中,這個(gè)精確度意味著正確識別樣本的百分比。如果標(biāo)簽類別與模型預(yù)測的最大激活值相同,則識別結(jié)果對當(dāng)前樣本是正確的。
在 SNN 中,我們首先計(jì)算每一個(gè)輸出神經(jīng)元的 fire rate,即脈沖率,當(dāng)然是在給定的時(shí)間窗 T T T 內(nèi)。然后取 fire rate 最高的那個(gè)神經(jīng)元作為輸出,寫成公式就是:
C ^ = arg ? max ? i { 1 T ∑ t = 1 T o i t , 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)
式中, o i t , N o_i^{t,N} oit,N? 代表網(wǎng)絡(luò)的第 N N N 層,第 i i i 個(gè)神經(jīng)元在第 t t t 時(shí)刻的輸出。
下面介紹的內(nèi)存花銷和計(jì)算花銷都是指推理過程。原因有2點(diǎn),一方面, spatio-temporal gradient propagation 相對于推理過程來講非常復(fù)雜。另一方面, 大多數(shù)支持 SNN 的神經(jīng)形態(tài)學(xué)設(shè)備只執(zhí)行推理階段 (inference phase)。
- 內(nèi)存花銷 (Memory cost)
通常,在嵌入式設(shè)備上部署模型時(shí),內(nèi)存占用 (Memory cost) 非常重要。
在 ANN 中,存儲器成本包括 權(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)火閾值 u t h u_{th} uth? 和時(shí)間常數(shù) τ \tau τ 等可以忽略,因?yàn)樗鼈兛梢员煌粚踊蛘麄€(gè)神經(jīng)網(wǎng)絡(luò)的所有神經(jīng)元共享。只有當(dāng)脈沖觸發(fā)時(shí),脈沖內(nèi)存 (spike memory) 開銷才會出現(xiàn)。總之,內(nèi)存開銷可以通過下式計(jì)算:
A N N : M = M w + M a S N N : M = M w + M p + M s (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)
式中, M w , M a , M p M_w,M_a,M_p Mw?,Ma?,Mp? 由網(wǎng)絡(luò)結(jié)構(gòu)決定,而 M s M_s Ms? 由每個(gè)時(shí)間戳最大脈沖數(shù)動態(tài)地決定。
- 計(jì)算花銷 (Compute cost)
計(jì)算開銷對于運(yùn)行延遲和能量消耗是至關(guān)重要的。
在 ANN 中,計(jì)算開銷主要由方程中的 MAC 運(yùn)算決定。
在 SNN 中,主要的計(jì)算成本來自脈沖輸入的這個(gè)積分的過程。與 ANN 有兩點(diǎn)不同:
- 代價(jià)高昂的乘法運(yùn)算可以省去,如果假設(shè) T w = 1 , K ( ? ) = 1 T_w=1,K(\cdot)=1 Tw?=1,K(?)=1 。此時(shí)樹突的這個(gè)積分運(yùn)算 (integration,注意看2式) 就變成了 ∑ j w j s j = ∑ j ′ w j ′ \sum_jw_js_j=\sum_{j^{'}}w_j^{'} ∑j?wj?sj?=∑j′?wj′? ,成為了一個(gè)純加法運(yùn)算。
- 積分是事件驅(qū)動的,這意味著如果沒有收到脈沖信號就不會進(jìn)行計(jì)算。
計(jì)算開銷可以通過下式計(jì)算:
A N N : C = C m u l + C a d d S N N : C = C a d d (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ā)活動) 被忽略,這是神經(jīng)網(wǎng)絡(luò)設(shè)備中的一種常見方式。文章來源:http://www.zghlxwxcb.cn/news/detail-472430.html
注意,在 SNN 中, C a d d C_{add} Cadd? 與 Spike 事件的總數(shù)成正比。文章來源地址http://www.zghlxwxcb.cn/news/detail-472430.html
到了這里,關(guān)于如何看待第三代神經(jīng)網(wǎng)絡(luò)SNN?詳解脈沖神經(jīng)網(wǎng)絡(luò)的架構(gòu)原理、數(shù)據(jù)集和訓(xùn)練方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!