在科學研究中,從方法論上來講,都應“先見森林,再見樹木”。當前,人工智慧學術研究方興未艾,技術迅猛發展,可謂萬木爭榮,日新月異。對於AI從業者來說,在廣袤的知識森林中,系統梳理脈絡,才能更好地把握趨勢。為此,我們精選國內外優秀的綜述文章,開闢“綜述專欄”,敬請關注。
01
Spiking Neural Network簡述
傳統神經網路包括現存的各種以perceptron為基本單元的拓撲變種, 比如卷積神經網路系列(CNNs), 迴圈神經網路系列(RNNs), 生成對抗網路(GANs), 自編碼器(Autoencoders) 等等。因為反向傳播演算法的存在和各類數學最佳化器的發展, 使得第二代神經網路在各項任務上有著出色的表現。
Spiking Neural Network(SNN) 被公認為繼現有的MLP為基礎的第二代神經網路(ANN)之後發展的第三代神經網路。雖然傳統神經網路已然在各項任務上取得了優異的成績, 但它們的原理和運算過程仍然和真正的人腦資訊處理過程依然相差甚遠。主要的差異可以總結為以下幾點:
1. 傳統神經網路演算法仍然依據於使用高精度的浮點數進行運算, 然而人腦並不會使用浮點數進行運算。在人的感測系統和大腦中, 資訊會以動作電壓或稱之為電脈衝(electric spike)的形式傳遞,接受,和處理。2. ANN的訓練過程對反向傳播演算法(梯度下降)的依賴程度非常之高, 然而在真實的人腦學習過程中,科學家們還沒有觀察到這種學習型別。更多的, 人腦的記憶和學習依賴於突觸後細胞受到刺激後所產生的突觸可塑性。詳見:Hebbian learning3. ANN通常需要大量的標籤資料集來驅動網路的擬合。這與我們平時經理的有所不同。我們在很多情況下的感知和學習過程都是非監督式的。並且, 人腦通常不需要如此大量反覆的資料來學習同一件事情。
綜上所述, 為了使神經網路更加接近於人腦, SNN隨而誕生了。發現它的靈感,就來自於生物大腦處理資訊的方式—spikes。讀到這裡,就應該已經明白SNN並不是一個像CNN,RNN這樣的網路結構, 而是一個新型的,更加接近人腦的一種神經網路演算法的統稱。
02
SNN和ANN的區別
那麼, SNN和傳統方法的區別在哪裡呢?
1,資訊載體(information carrier)
首先, 最基本的區別是SNN和ANN的資訊載體不一樣。ANN 使用的是高精度浮點數而SNN使用的是spikes 或可以理解為1和0,這就大大增加了資訊在網路中的稀疏性。這些spike在網路中有相同的幅度和duration.
圖1左:傳統神經網路結構。右:SNN結構
那麼,在SNN中, 資訊是如何用spike來表達的呢?這就涉及到脈衝編碼的知識了。這裡做簡單介紹,之後我會再詳細解釋它。在SNN中, 很重要的一點是引入了時序(temporal)相關的處理形式。資訊是被編碼在脈衝序列的時間序列(spike train)中的。例如:高頻率的一組脈衝序列可以代表一個較高的值而低頻率的脈衝則代表低值。又例如:在一個固定的時間窗中, 單個脈衝出現的位置也可以代表相應的值/資訊。
2,神經元
圖2左:傳統神經元。右:spiking neuron
既然資訊的載體不一樣, 那麼神經網路中的基本單元–神經元肯定也是不一樣的。對ANN有了解的同學們都知道, 基本神經元perceptron 是一個簡單的 加乘運算器用來整合輸入該神經元的值 而後接著一個非線性的啟用方程(Non-linear activation function)。然而這種針對確切數值的運算並不適用於二進位制脈衝的處理。在SNN中, 基本的運算單元為以生物突觸結構為基礎構建的脈衝神經元(spiking neuron)。想象有兩個spiking neuron 其中一個為突觸前神經元(pre-synaptic neuron)作為spiking的發出者, 一個為突觸後神經元(post-synaptic neuron) 作為spike的接受者。spiking neuron所進行的處理是接受由突觸傳遞而來的脈衝, 依據突觸權重透過spiking function產生突觸後膜電壓(post synaptic potential (PSP))
圖2 spiking neuron的示例。PSP代表post synaptic potential.
那麼PSP是什麼呢?簡單的解釋就是神經元上的膜電壓變化。例如圖三就是一個神經元接受到spike後膜電壓u(t)隨著時間t的變化。在生物學中, 這種電脈衝的幅值和時間常數是在特定範圍內的, 例如圖三中, 膜電壓在接受到脈衝輸入前會一直保持在-70mV的地方, 這個值通常叫做靜止值(resting value)。當接受到刺激後, 會產生電壓變化的幅值。在變化結束後, 膜電壓會歸位回起始的靜止值。在實際操作中這種波形要怎樣產生呢?科學家們對生物神經元進行實驗分析後, 給出了許多神經元的差分方程(differential equation)模型:
例如:IF neuron(integrated and fire)
可以看出來式子為電容定律的時間導數,Q = CV。當施加輸入電流時,膜電壓會隨時間增加,直到達到恆定閾值Vth,此時將出現增量函式尖峰,並且電壓會重置為其靜止電位,此後模型將繼續執行。
除此之外Hodgkin–Huxley 模型, LIF模型, SRM模型等等。但Neuron model在SNN中的作用主要還是作為脈衝序列的處理單元, 其真正的生物學模擬特性我個人認為在SNN的實際應用過程中不必要求過於苛刻的接近於實際生物學的膜電壓波形。
圖3 單個spike產生的膜電壓變化。
那麼像圖4一樣, 當一個突觸後神經元接受到多個channel的脈衝序列輸入膜電壓會發生什麼樣的變化呢?
圖4 單個spiking neuron接受多個spike輸入。
圖5 膜電壓變化模擬。
如圖5所示。突觸後神經元會首先按照接受到的時間整合脈衝, 將他們變為膜電壓的變化的疊加。當膜電壓超過預先設定好的閾值(\vartheta)時,突觸後neuron被認定為收到了足夠的刺激從而發出一個脈衝(spike)。在發出脈衝後, 膜電壓會被重置並且突觸後神經元會在一段時間內無法處理接收到的脈衝, 這段時間稱為神經元的refractory period。在refractory period之後, 膜電壓會恢復到靜止值從而可以準備下一次脈衝的產生。這就是脈衝神經元一次完整的spike generation過程。
3,學習方法/使用方法
傳統ANN主要依賴於基於梯度下降的反向傳播演算法。但在SNN中, 因為spiking neuron的function通常為不可導的差分方程, 在SNN中實現反向傳播就顯得異常的困難。那麼如何訓練SNN呢?在實際應用N中, SNN implementation主流的方式大概有三種, 這裡做簡要的方法敘述:
1. 將傳統ANN轉換為SNN
既然SNN不可以使用BP來訓練那麼將傳統的神經網路訓練好轉換為SNN是有可能的嗎?答案是肯定的。這種方法的優點是不用考慮任何SNN的特性, 但要將訓練好的網路在輸入,運算和輸出上全面轉換為以二進位制spike為處理載體的網路。在輸入上,要將輸入訊號編碼為脈衝序列。所有神經元要用相應的spiking neuron來替換, 訓練所得得權重要進行量化。
2. 反向傳播
欸,作者。你不是剛剛提到SNN得spike function是無法進行反向傳播得嘛?那為啥這裡又說它可以了?沒錯, 脈衝神經元得spike function的確無法直接求導做差計算出梯度。但研究人員想出了很多聰明得方法來預估網路中得變化引數得梯度從而進行反向傳播。這樣得演算法雖然還存在爭論但它確實在某種程度上降低了SNN得訓練複雜度, 這樣得演算法比如有 spikeprop, Slayer 等等
3. 突觸可塑性
這個相比前兩種方法就更加接近於生物學得學習了。利用生物學得原理研究人員將spike time dependent plasticity (脈衝時間相關可塑性)引入了SNN得訓練。然而這種訓練方法雖然novel, 但訓練過程非常繁瑣, 而且是一種純非監督式學習, 非常考驗設計者對神經科學和神經網路得理解, 我會後續繼續寫出相關得部落格來介紹並使用它。
03
ANN VS SNN
總結, SNN目前仍在快速發展中, 其優勢展現在於相比ANN具有更大的移動裝置應用潛能。這主要歸於它的處理方式可以結合新型的類腦晶片(neuromorphic chips)實現高速低功耗的大規模網路運算。