天天看點

使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)

👨‍🎓個人首頁:研學社的部落格 

💥💥💞💞歡迎來到本部落格❤️❤️💥💥

🏆部落客優勢:🌞🌞🌞部落格内容盡量做到思維缜密,邏輯清晰,為了友善讀者。

⛳️座右銘:行百裡者,半于九十。

📋📋📋本文目錄如下:🎁🎁🎁

目錄

💥1 概述

1.1第一代神經網絡

1.2 第二代神經網絡:BP 神經網絡

1.3 第三代神經網絡:脈沖神經網絡

📚2 運作結果

🎉3 參考文獻

👨‍💻4 Matlab代碼實作

使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)

💥1 概述

脈沖神經網絡簡介:

脈沖神經網絡 (SNN) 屬于第三代神經網絡模型,實作了更進階的生物神經模拟水準。除了神經元和突觸狀态之外,SNN 還将時間概念納入了其操作之中,是一種模拟大腦神經元動力學的一類很有前途的模型。

那麼什麼是第一代和第二代神經網絡模型呢?

1.1第一代神經網絡

第一代神經網絡又稱為感覺器,在1950年左右被提出來,它的算法隻有兩層,輸入層輸出層,主要是線性結構。它不能解決線性不可分的問題,對稍微複雜一些的函數都無能為力,如異或操作。

1.2 第二代神經網絡:BP 神經網絡

為了解決第一代神經網絡的缺陷,在1980年左右 Rumelhart、Williams 等人提出第二代神經網絡多層感覺器 (MLP)。和第一代神經網絡相比,第二代在輸入層之間有多個隐含層的感覺機,可以引入一些非線性的結構,解決了之前無法模拟異或邏輯的缺陷。

第二代神經網絡讓科學家們發現神經網絡的層數直接決定了它對現實的表達能力,但是随着層數的增加,優化函數愈發容易出現局部最優解的現象,由于存在梯度消失的問題,深層網絡往往難以訓練,效果還不如淺層網絡。

所有對目前機器學習有所了解的人都聽說過這樣一個事實:目前的人工神經網絡是第二代神經網絡。它們通常是全連接配接的,接收連續的值,輸出連續的值。盡管當代神經網絡已經讓我們在很多領域中實作了突破,但它們在生物學上是不精确的,其實并不能模仿生物大腦神經元的運作機制。

1.3 第三代神經網絡:脈沖神經網絡

第三代神經網絡,脈沖神經網絡 (Spiking Neural Network,SNN) ,旨在彌合神經科學和機器學習之間的差距,使用最拟合生物神經元機制的模型來進行計算,更接近生物神經元機制。脈沖神經網絡與目前流行的神經網絡和機器學習方法有着根本上的不同。SNN 使用脈沖——這是一種發生在時間點上的離散事件——而非常見的連續值。每個峰值由代表生物過程的微分方程表示出來,其中最重要的是神經元的膜電位。本質上,一旦神經元達到了某一電位,脈沖就會出現,随後達到電位的神經元會被重置。對此,最常見的模型是 Leaky Integrate-And-Fire (LIF) 模型。此外,SNN 通常是稀疏連接配接的,并會利用特殊的網絡拓撲。

📚2 運作結果

使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)
使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)
使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)
使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)
使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)
使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)
使用FORCE訓練的脈沖神經網絡中的監督學習(Matlab代碼實作)

主函數部分代碼:

clear all              ​              close all              ​              clc              ​              ​              ​              %% Fixed parameters across all simulations              ​              dt = 0.00001; %time step               ​              N = 2000; %Network Size              ​              td = 0.02; %decay time               ​              tr = 0.002; %Rise time               ​              %%               ​              T = 15; tmin = 5; tcrit = 10; nt = round(T/dt); tx = (1:1:nt)*dt;  xz = sin(2*tx*pi*5)'; G = 10; Q = 10^4;               ​              ​              ​              %%               ​              m = min(size(xz)); %dimensionality of teacher               ​              E = Q*(2*rand(N,m)-1); %encoders              ​              BPhi = zeros(N,m);  %Decoders              ​              %% Compute Neuronal Intercepts and Tuning Curves               ​              initial = 0;              ​              p = 0.1; %Sparse Coupling               ​              OMEGA = G*randn(N,N).*(rand(N,N)<p)/(sqrt(N)*p); %Random initial weight matrix               ​              ​              ​              %Set the sample row mean of the weight matrix to be 0 to strictly enforce              ​              %balance.                ​              for i = 1:1:N               ​              QS = find(abs(OMEGA(i,:))>0);              ​              OMEGA(i,QS) = OMEGA(i,QS) - sum(OMEGA(i,QS))/length(QS);              ​              end              ​              ​              ​              %% Storage Matrices and Initialization               ​              store = 10; %don't store every time step, saves time.                ​              current = zeros(nt,m);  %storage variable for output current               ​              IPSC = zeros(N,1); %post synaptic current               ​              h = zeros(N,1); r = zeros(N,1); hr = zeros(N,1);               ​              JD = 0*IPSC;              ​              ​              ​              vpeak = pi; %peak and reset              ​              vreset = -pi;               ​              v = vreset + (vpeak-vreset)*rand(N,1); %initialze voltage               ​              v_ = v; %temporary storage variable for integration               ​              ​              ​              j = 1;              ​              time = zeros(round(nt/store),1);              ​              RECB = zeros(5,round(2*round(nt/store)));              ​              REC = zeros(10,round(nt/store));              ​              tspike = zeros(8*nt,2);              ​              ns = 0;              ​              tic              ​              SD = 0;               ​              BPhi = zeros(N,m);              ​              z = zeros(m,1);              plot(tx(1:1:i),xz(1:1:i,:),'k','LineWidth',2), hold on              ​              plot(time(1:1:j),current(1:1:j,:),'b--','LineWidth',2), hold off              ​              xlim([dt*i-1,dt*i])              ​              xlabel('Time')              ​              ylabel('x(t)')               ​              figure(2)              ​              plot(time(1:1:j),RECB(1:5,1:1:j),'.')               ​              xlabel('Time')              ​              ylabel('\phi_j')               ​              ​              ​              figure(3)              ​              plot(tspike(1:1:ns,2), tspike(1:1:ns,1),'k.')              ​              ylim([0,100])              ​              xlabel('Time')              ​              ylabel('Neuron Index')              ​              end
           

🎉3 參考文獻

部分理論來源于網絡,如有侵權請聯系删除。

​[1]李連江. 基于GPU的脈沖神經網絡學習研究[D].華中科技大學,2015.

👨‍💻4 Matlab代碼實作

繼續閱讀