????????歡迎來到本博客????????
??博主優(yōu)勢:??????博客內容盡量做到思維縝密,邏輯清晰,為了方便讀者。
??座右銘:行百里者,半于九十。
??????本文目錄如下:??????
目錄
??1 概述
1.1第一代神經(jīng)網(wǎng)絡
1.2?第二代神經(jīng)網(wǎng)絡:BP 神經(jīng)網(wǎng)絡
1.3?第三代神經(jīng)網(wǎng)絡:脈沖神經(jīng)網(wǎng)絡
??2 運行結果
??3?參考文獻
?????4 Matlab代碼實現(xiàn)
??1 概述
脈沖神經(jīng)網(wǎng)絡簡介:
脈沖神經(jīng)網(wǎng)絡 (SNN)?屬于第三代神經(jīng)網(wǎng)絡模型,實現(xiàn)了更高級的生物神經(jīng)模擬水平。除了神經(jīng)元和突觸狀態(tài)之外,SNN 還將時間概念納入了其操作之中,是一種模擬大腦神經(jīng)元動力學的一類很有前途的模型。
那么什么是第一代和第二代神經(jīng)網(wǎng)絡模型呢?
1.1第一代神經(jīng)網(wǎng)絡
第一代神經(jīng)網(wǎng)絡又稱為感知器,在1950年左右被提出來,它的算法只有兩層,輸入層輸出層,主要是線性結構。它不能解決線性不可分的問題,對稍微復雜一些的函數(shù)都無能為力,如異或操作。
1.2?第二代神經(jīng)網(wǎng)絡:BP 神經(jīng)網(wǎng)絡
為了解決第一代神經(jīng)網(wǎng)絡的缺陷,在1980年左右 Rumelhart、Williams 等人提出第二代神經(jīng)網(wǎng)絡多層感知器 (MLP)。和第一代神經(jīng)網(wǎng)絡相比,第二代在輸入層之間有多個隱含層的感知機,可以引入一些非線性的結構,解決了之前無法模擬異或邏輯的缺陷。
第二代神經(jīng)網(wǎng)絡讓科學家們發(fā)現(xiàn)神經(jīng)網(wǎng)絡的層數(shù)直接決定了它對現(xiàn)實的表達能力,但是隨著層數(shù)的增加,優(yōu)化函數(shù)愈發(fā)容易出現(xiàn)局部最優(yōu)解的現(xiàn)象,由于存在梯度消失的問題,深層網(wǎng)絡往往難以訓練,效果還不如淺層網(wǎng)絡。
所有對目前機器學習有所了解的人都聽說過這樣一個事實:目前的人工神經(jīng)網(wǎng)絡是第二代神經(jīng)網(wǎng)絡。它們通常是全連接的,接收連續(xù)的值,輸出連續(xù)的值。盡管當代神經(jīng)網(wǎng)絡已經(jīng)讓我們在很多領域中實現(xiàn)了突破,但它們在生物學上是不精確的,其實并不能模仿生物大腦神經(jīng)元的運作機制。
1.3?第三代神經(jīng)網(wǎng)絡:脈沖神經(jīng)網(wǎng)絡
第三代神經(jīng)網(wǎng)絡,脈沖神經(jīng)網(wǎng)絡 (Spiking Neural Network,SNN) ,旨在彌合神經(jīng)科學和機器學習之間的差距,使用最擬合生物神經(jīng)元機制的模型來進行計算,更接近生物神經(jīng)元機制。脈沖神經(jīng)網(wǎng)絡與目前流行的神經(jīng)網(wǎng)絡和機器學習方法有著根本上的不同。SNN 使用脈沖——這是一種發(fā)生在時間點上的離散事件——而非常見的連續(xù)值。每個峰值由代表生物過程的微分方程表示出來,其中最重要的是神經(jīng)元的膜電位。本質上,一旦神經(jīng)元達到了某一電位,脈沖就會出現(xiàn),隨后達到電位的神經(jīng)元會被重置。對此,最常見的模型是 Leaky Integrate-And-Fire (LIF) 模型。此外,SNN 通常是稀疏連接的,并會利用特殊的網(wǎng)絡拓撲。
??2 運行結果
主函數(shù)部分代碼:
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?參考文獻
部分理論來源于網(wǎng)絡,如有侵權請聯(lián)系刪除。文章來源:http://www.zghlxwxcb.cn/news/detail-425565.html
?[1]李連江. 基于GPU的脈沖神經(jīng)網(wǎng)絡學習研究[D].華中科技大學,2015.文章來源地址http://www.zghlxwxcb.cn/news/detail-425565.html
?????4 Matlab代碼實現(xiàn)
到了這里,關于使用FORCE訓練的脈沖神經(jīng)網(wǎng)絡中的監(jiān)督學習(Matlab代碼實現(xiàn))的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!