反光鏡
反光鏡

文章收藏箱,一個寫文章不以營利而以教學為目的的奉獻者

SNN初探(2)──SNN架構

因為某些原因,本系列為斷尾文章,請自行斟酌內容的正確性。期望有人能從中獲得啟發

上一篇我們提到SNN的編碼與解碼方式,但卻沒怎麼提到SNN的架構。事實上,SNN的架構示意圖跟encode/decode的說明一樣難找。我不了解這是一種什麼樣的現象,導致學者只願意放誤差隨時間下降、準確率隨時間上升這種大家都看到煩的圖,然後架構圖都不願意放。大概是不希望有人實作出來然後被打臉吧,看看最近reddit上發明PNN然後被發現誇大準確率的那位中國學生。

以下我說明的SNN架構,只是眾多模型中的其中一種。如前篇所述,這是一個新的領域,沒有人知道怎麼做會最好,因此想出了各種千奇百怪的架構來解決neuron不發spike=沒輸出訊號的問題。

首先,SNN是一種為仿生而生的網路,意思就是它的結構比起ANN,會更具有一些生物神經連接上的特性。所有可能有些SNN網路上的架構,聽起來不是這麼的容易理解為何要這樣做,因為它就是為了模擬神經訊號真正的傳遞方式,所以難免會不夠直觀。

其次,SNN跟ANN其實很像(其實所有類神經網路的大整體外觀都是一樣的)。對ANN有基礎的人來說,ANN就像是一堆神經元互相連接,訊號由輸入層向輸出層傳遞(況且不論同層互相影響互相抑制的,這又可以是另一種SNN的結構,我們稱為winner-take-all架構)。即使是全連接層(fully-connected layer),前後層兩個neuron間也只會有一條線連接(就是前後兩個neuron之間只會有一種權重)。

SNN就不太一樣了,前後兩個神經元之間可以有很多權重連接,這樣的設定來自於觀察生物體神經傳導的現象,兩個神經元之間可以有很多突觸連接、每個突觸各自傳遞不同的時間delay。這是SNN跟一般ANN不太一樣的地方,因為它多了更多的delay延遲選項。甚至,在通過neuron時也可以設定延遲。


生物體的神經訊號傳導

下圖出自上一篇曾提到的論文。我主要會以該篇做講解。

下圖展示的是在生物體中,神經元是如何傳遞訊息的架構。這張圖並不難,你可以想像現在有個脈衝序列訊號(spike train)從圖左上角的dendrites(樹突)進來、通過神經元、然後從右下角樹枝狀傳出去。

整個訊號的傳遞順序:樹突→Presynaptic neuron(前突觸神經元)→Axon(軸突)→Synapses(突觸)→Postsynaptic neuron(後突觸神經元)。一般的ANN就是被這種架構所啟發,但由於普通NN(MLP)不包含時間延遲資訊,因此兩個neuron之間也就不需要這麼多突觸連接。

在上一篇我們提到,SNN吃的是spike train,可以把spike train想像成是一個只有0和1的時間序列訊號。1出現的時候就是spike放電的時候。當一般ANN的訊號通過neuron時,不會有延遲。但SNN是時間訊號,一個spike train包含了許多spike發生的時間點,這些spike會按指定的時間通過多個synapse,spike的發生時間會加上synapse上的延遲,然後傳遞到下顆neuron。

作個統整:

  • ANN:兩個neuron之間只用一個突觸(一條線)連接,只有一個權重。沒有延遲。
  • SNN:兩個neuron之間有多個突觸(多條線)連接,有多個權重。每個突觸上有各自的時間delay、也有各自的權重大小。

只考慮前一層2顆neuron連接到下一層1顆neuron,我們可以畫個ANN與SNN架構的比較圖。從下圖就可輕易看出SNN擁有多時間延遲的特性。而且多個synapses不只影響延遲,還能藉由權重影響spike電壓的大小、進而控制下顆neuron的spike觸發的時間。


比較生物神經結構與SNN

很可能看了上圖還是覺得似懂非懂,這很正常,之後回過頭來看時會比較容易理解。我之後的解說如果一直在強調某些觀念、重複某些字句,表示希望讀者看這個概念看久了就能記起來。

我們要再次強調,spike train其實只是一個簡化的二值化時間序列,能讓我們方便看出spike發生的初始時間點。實際上神經訊號是以隨時間變化的電壓的形式傳輸,而非單純的數位0與1。我們稱這些電壓訊號為動作電位AP(action potential)。spike發生的時間點,就是電壓訊號AP隨時間開始傳遞的初始點。

還記得我們說過的訊號傳遞順序,我們可以把生物體的神經結構與SNN做個比較:

是不是有一種結構很相似的感覺?spike train造成的AP(動作電位)通過多個synapses、造成不同的延遲後,產生後突觸電位PSP(post-synaptic potential)。將這些PSP隨時間的變化相加起來,表現的是神經元內電位隨時間變化的內部狀態(internal state)。當內部電壓達到一定的threshold時,後面這層神經元就會fire、放出新的spike、將訊號向下一層神經元傳播。

PSP有分EPSP(excitatory postsynaptic potential,興奮型後突觸電位),讓internal state電壓上升而促進神經元提早fire。還有電壓是負值的IPSP(inhibitory postsynaptic potential,抑制型後突觸電位),讓internal state電壓下降而抑制或延遲神經元fire。我們其實可以將IPSP視為是EPSP乘上負號的結果。

而internal state就像一般ANN的激勵函數(或稱活化函數: activation function,像是sigmoid)。但請注意ANN的活化函數是連續可微分的,因此在倒傳遞上沒有任何問題,但用sigmoid這種數學上定義的式子明顯不夠仿生。而SNN的internal state則是不可微的(因為只有在到達threshold才會fire,其他時間函數都是不被觸發的),卻是最接近生物體放出spike的方式(有或全無)。之後會提到的SpikeProp就用了一個特殊的方法去近似微分。

下圖解釋了AP與PSP的關係。我們發現AP其實就像一個impulse function、幾乎只在那一個時間點有值,因此做這樣的近似也是合理的。AP經過不同的突觸,會形成不同型態的PSP。

A是AP造成的無延遲PSP隨時間的電壓變化。

B中的虛線代表AP和PSP起始的時間有延遲(因為synapse會造成不同的時間延遲)。

C是乘上了不同權重、有不同最大電壓大小的EPSP與IPSP。

D是時間常數變長的EPSP(稍後會提到EPSP的模型中,可以調整時間常數tau讓訊號時間延長)。

你可能仍對於AP(之後我們都稱為spike)與PSP的關係感到疑惑,請先記住這段解釋:

前一層neuron放出的spike,經過突觸後,產生了隨時間變化的電壓,稱為PSP。

許多PSP進入後一層neuron內疊加,一但到達threshold,neuron就放出spike,向下傳遞。

spike產生PSP,PSP產生spike (周而復始)

PSP在生理與數學上的模型

PSP後突觸電位開始於前一層neuron觸發spike之時,並向後一層傳遞,電壓值在後突觸neuron內進行疊加運算,當internal state超過threshold時就會觸發spike。由於目前實驗上觀察到的PSP型態各不相同,大家對於PSP的外型跟算式也沒有一個共識,因此會有各種數學模型去近似PSP。模擬的模型很多,包括LIF(leaky integrate-and-fire)、SRM(spike response model)、 Tempotron等等。選哪種PSP模型都取決於你。

我們在這篇中舉例的是一個被稱為alpha function的PSP模型。他的時間常數tau是可以被更改的,所以訓練效果好壞可能也跟tau有關。tau越大,電壓衰減的時間越長。

說明了PSP的電壓模型,接下來我們必須了解PSP是如何影響後突觸neuron的internal state。下面展示了兩種不同的spike train、對於後突觸電位發出spike時間點的效果。可以發現,當兩個neuron都向同一個後突觸neuron傳送spike時,由於在相鄰的時間內多了幾個spike,因此會讓後突觸neuron發spike的時間提早。我們也可以發現不同的spike間是會互相影響後續fire的時間點,圖C中,後突觸neuron因為internal state到達threshold而發了兩個spike輸出,且這兩個輸出spike與原本各自輸入spike train觸發的時間差,都有些微的改變。

在這裡必須強調PSP與spike數學模型的不同:

當PSP造成的internal state還沒達到threshold時,電壓在後突觸neuron內隨時間的變化就等於好幾個PSP的疊加。

但只要PSP造成的internal state一達到threshold,該時間點後的電壓模型就會轉換為接下來會提到的spike數學模型。


spike在生理與數學上的模型

當許多PSP接二連三抵達後突觸neuron,使得internal state的電壓到達threshold時,neuron產生了放電反應,造成電壓在短時間內急遽上升、又急遽下降,我們稱這段變化很大的電壓區間為spike。

spike的模型其實包含了去極化(depolarization)、再極化(repolarization)、過極化(hyperpolarization)等過程。在這裡我們必須定義靜止膜電位(resting membrane potential),由於在生物體中觀察到,假設細胞外的電壓是0 V,則在無接受刺激時內部電壓是-70mV左右。在這邊為了運算方便,我們一律將resting potential設為0,但電壓隨時間變化的特性是一樣的。resting potential代表了不管中間膜電壓怎麼改變、最後都會回到這個電壓基準點。

由於細胞內靜止時的電位<0 V,我們稱這種電荷分離的現象叫極化(電荷分開在膜內膜外兩邊形成電容)。

去極化表示細胞受外界刺激、造成膜內外的電壓差逐漸上升接近0、甚至高於0。

再極化代表細胞膜電位再次下降、將要回到原本極化的狀態。

過極化則表示當電壓回到resting potential的過程時,會有段時間低於resting potential(我們可以稱這種現象叫overshoot,電壓的變化就像來不及煞車衝過頭一樣),低於resting potential表示要觸發下一個spike的話,可能要再等一段時間。我們稱這段期間為不反應期(refractory period)。有點像LOL的技能冷卻時間。

不反應期又分為絕對不反應與相對不反應期,有興趣可以去查查,觀念都很簡單,在此略過。加不加這個特性取決於你想要SNN仿生到甚麼程度。

另一種比喻:可以想像細胞膜就像一個平時都在通著電的電磁鐵,電磁鐵會因為通電而被極化,表示兩端各擁有了N與S極;沒通電則失去極性、失去磁性。
一個平時都在通著電的電磁鐵是被極化的狀態,突然某位調皮的藍同學轉了電源供應器的電壓旋鈕,造成磁鐵的外接電壓逐漸減為0(去極化)。此時某位梁同學見義勇為把電壓再次慢慢的調回來(再極化),但因為太氣藍同學而不小心調得太過頭了(過極化)。幸好及時發現而進行修正,因此電磁鐵最終得以回到一開始的resting potential。
我比喻的不好我去面壁

下面這張圖是當PSP到達threshold時,spike的電壓隨時間的變化,也很清楚的展示了何謂不反應期。最下方的圖則是嘗試用數學去近似上面這個模型。可以發現,其實我們在模擬spike的時候,只考慮去極化、還有過極化區間的電壓變化。

不反應期的數學模型如下。可以直接用程式實現。然後tau值也是可以變的。


SNN架構

聽完了spike與PSP的模型後,相信大家已經頭昏腦脹了。我們離訓練網路只差最後一步:SNN的架構。但其實只需要一張圖就解決了。

為何筆者要先講解spike跟PSP的模型?筆者認為先丟出SNN的架構、再逐一解釋spike與PSP,可能會讓人產生一種:跟一般的NN很像、輸入跟傳遞的方式又不太一樣,而有似懂非懂的感覺。筆者習慣從最初的定義下手,因為spike跟PSP是建立SNN model前需要被事先定義的函數。寫程式語言也是如此,把輸入輸出訊號定義好、再談架構,純屬個人習慣。

其實,我們在談spike跟PSP的過程中,已經描繪出SNN的雛形了。如果讀者有認真看spike跟PSP的說明,下圖SNN的結構可能會覺得只是上面的延伸而已。

這張圖涵蓋了之前講的所有概念:

1.SNN跟ANN長的超級像,差別在於兩個neuron中間,其實有多條線連接

2.兩個neuron中間有多個突觸(多條線),每個突觸會造成不同的delay、不同的權重會讓PSP的電壓最大值改變

3.從不同neuron、不同突觸產生的PSP,疊加起來達到threshold,則會觸發下一層neuron在特定時間放出spike

4.突觸上星星狀的圖示代表權重大小,可發現權重越大,產生的PSP最大電壓越高

5.從presynaptic neuron到權重間這條長度的線、和從權重到postsynaptic neuron間的長度是一樣的,線代表時間軸,我們稱這條時間軸為模擬時間(simulation time),所有編碼解碼都在這條時間軸上進行。我們曾經提到不同的突觸會有不同的時間delay,所以spike在不同的突觸時間軸上會有相對應的時間位移、產生了PSP也有相對應的移動。所以這個圖這樣畫是有道理的、而非隨意找個位置放上spike。

下一章將會進到針對SNN的監督式學習:SpikeProp與其延伸的演算法。同時也會嘗試去探討,如果要用程式實現,參數該如何設置與其困難點。


參考資料

Improved spiking neural networks for EEG classification and epilepsy and seizure
 detection(2007)

A new supervised learning algorithm for multiple spiking neural networks with
 application in epilepsy and seizure detection(2009)

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论