1.问题描述:和传统的人工神经网络一样,脉冲神经网络也同样分为三个拓扑结构。 前馈型脉冲神经网络(feed-forwardspikingneuralnetwork )、递归型脉冲神经网络(recurrent spiking neural network )、混合式
学习是人工智能领域的核心问题,对于SNN来说,研究基于脉冲时间层次的学习方法是理论模型对生物神经系统信息处理和学习机制验证的必要条件。 希望通过生物学上可解释的方法建立人工神经系统,科学家可以通过神经科学和行为实验达到预期的目的。 大脑中的学习可以理解为突触连接强度随时间的变化过程,这种能力被称为突触可塑性synaptic plasticity。 脉冲神经网络的学习方式主要有无监督学习(unsupervised learning )、监督学习(supervised learning )、强化学习(reinforcement learning )等。
1. 无监督学习算法
无监督学习算法在人与动物的学习中占主导地位,人们可以通过观察发现世界的内在结构,而不是被告知客观事物的名称。 人工神经网络无监督学习算法的设计主要是对无标记数据集的训练,要求应用无监督学习规则自适应调整神经网络中的连接权重和结构。 也就是说,神经网络必须在无“教师”信号的监控下,从输入数据中自行发现规律性(统计特征、相关性、类别等),通过输出实现分类和决策。 一般来说,无监督学习只有在输入数据集有冗馀时才有意义。 否则,无监督学习就不能很好地发现输入数据中的任何模式或特征。 这意味着冗馀提供了知识。
脉冲神经网络的非监督学习算法大多借鉴了传统的人工神经网络的非监督学习算法,并根据Hebb学习规则的不同变体提出。 神经科学研究成果表明,生物神经系统的脉冲序列不仅能引起神经突触的持续改变,而且满足脉冲时间相关可塑性(spike timing-dependent plasticity,STDP )机制。 在决定性时间窗内,基于突触前神经元和突触后神经元释放的脉冲序列的相对时序关系,应用STDP学习规则可以在无监督的情况下调整突触权重。
2. 脉冲神经网络的监督学习
脉冲网络的监视学习是寻找脉冲神经网络的适当的突触权重矩阵,使得与神经元的输出脉冲序列对应的目标脉冲序列尽量接近给定的多个输入脉冲序列和多个目标脉冲序列即,两者的误差评价函数最小。 对于脉冲神经网络来说,神经信息以脉冲序列的形式表示,神经元内部的状态变量和误差函数不再满足连续可微的性质,建立有效的脉冲神经网络监控学习算法十分困难,同时也是该领域重要的
根据监督学习中采用的基本思想,可以将现有的监督学习算法分为三类:
基于梯度下降的监控学习算法的基本思路是利用神经元目标输出与实际输出之间的误差以及误差的反向传播过程,获得梯度下降计算结果作为突触权值调整的参考量,最终减小这一误差。 基于梯度下降的监督学习算法是一种数学分析方法,在学习规则的推导过程中,神经元模型的状态变量必须是解析表达式,主要依赖于脉冲响应模型(spike response model )和积分与积分基于突触可塑性的监控学习算法的基本思想是,利用由神经元发出脉冲序列的时间相关性引起的突触可塑性机制,设计神经元突触权重调整的学习规则,这是一种生物可解释的监控学习。 基于脉冲序列卷积的监督学习算法根据脉冲序列内积的不同构造脉冲神经网络的监督学习算法,突触权值的调整依赖于特定核函数的卷积计算,可以进行脉冲序列时空模式的学习。3. 脉冲神经网络的强化学习
强化学习是为了使主体的行为从环境中获得的累积报酬值最大化,从环境状态到行为图的学习。 基于生物启发的学习机制,人工神经网络强化学习的研究侧重于探索智能体的自适应优化策略,是近年来神经网络和智能控制领域的主要方法之一。 强化学习关注主体如何在环境中采取一系列行为,通过强化学习,一个主体应该知道在什么状态下采取什么行为。 可见,强化学习与监督学习的区别主要有以下两点。
强化学习是一种尝试错误学习,由于没有直接的“教师”指导信息,主体需要不断地与环境对话,通过尝试错误获得最优策略的延迟回报,往往只能在强化学习的指导信息较少,而且往往只能在事后(最后状态)给出,为正的四、脉冲神经网络的进化方法进化算法(evolutionary algorithm )是一种模拟生物进化过程的计算模型,是基于自然选择和遗传变异等生物进化机制的全局概率搜索算法, 这些算法(主要包括遗传算法)和进化规划(evolutiong )在实现上存在一些差异,但具有利用生物进化的思想和原理解决实际问题的共同特征。
>将进化算法与脉冲神经网络有机结合起来,研究者开辟了进化脉冲神经网络(evolutionary spiking neural network)的研究领域,以提高对复杂问题的求解能力。进化脉冲神经网络可以作为自适应系统的一种一般性框架,在没有人为干预的情况下系统自适应调整神经元的参数、连接权值、网络结构和学习规则。 2.部分程序:rand('seed',1);
% spnet.m: Spiking network with axonal conduction delays and STDP
% Created by 冷静的柜子 M.Izhikevich. February 3, 2004
% Modified to allow arbitrary delay distributions. April 16,2008
M=100; % number of synapses per neuron
D=20; % maximal conduction delay
% excitatory neurons % inhibitory neurons % total number
Ne=800; Ni=200; N=Ne+Ni;
a=[0.02*ones(Ne,1); 0.1*ones(Ni,1)];
d=[ 8*ones(Ne,1); 2*ones(Ni,1)];
sm=10; % maximal synaptic strength
% post=ceil([N*rand(Ne,M);Ne*rand(Ni,M)]);
% Take special care not to have multiple connections between neurons
delays = cell(N,D);
for i=1:Ne
p=randperm(N);
post(i,:)=p(1:M);
for j=1:M
delays{i, ceil(D*rand)}(end+1) = j; % Assign random exc delays
end;
end;
for i=Ne+1:N
p=randperm(Ne);
post(i,:)=p(1:M);
delays{i,1}=1:M; % all inh delays are 1 ms.
end;
s=[6*ones(Ne,M);-5*ones(Ni,M)]; % synaptic weights
sd=zeros(N,M); % their derivatives
% Make links at postsynaptic targets to the presynaptic weights
pre = cell(N,1);
aux = cell(N,1);
for i=1:Ne
for j=1:D
for k=1:length(delays{i,j})
pre{post(i, delays{i, j}(k))}(end+1) = N*(delays{i, j}(k)-1)+i;
aux{post(i, delays{i, j}(k))}(end+1) = N*(D-1-j)+i; % takes into account delay
end;
end;
end;
STDP = zeros(N,1001+D);
v = -65*ones(N,1); % initial values
u = 0.2.*v; % initial values
firings=[-D 0]; % spike timings
for sec=1:60*60*24 % simulation of 1 day
for t=1:1000 % simulation of 1 sec
I=zeros(N,1);
I(ceil(N*rand))=20; % random thalamic input
fired = find(v>=30); % indices of fired neurons
v(fired)=-65;
u(fired)=u(fired)+d(fired);
STDP(fired,t+D)=0.1;
for k=1:length(fired)
sd(pre{fired(k)})=sd(pre{fired(k)})+STDP(N*t+aux{fired(k)});
end;
firings=[firings;t*ones(length(fired),1),fired];
k=size(firings,1);
while firings(k,1)>t-D
del=delays{firings(k,2),t-firings(k,1)+1};
ind = post(firings(k,2),del);
I(ind)=I(ind)+s(firings(k,2), del)';
sd(firings(k,2),del)=sd(firings(k,2),del)-1.2*STDP(ind,t+D)';
k=k-1;
end;
v=v+0.5*((0.04*v+5).*v+140-u+I); % for numerical
v=v+0.5*((0.04*v+5).*v+140-u+I); % stability time
u=u+a.*(0.2*v-u); % step is 0.5 ms
STDP(:,t+D+1)=0.95*STDP(:,t+D); % tau = 20 ms
end;
plot(firings(:,1),firings(:,2),'.');
axis([0 1000 0 N]); drawnow;
STDP(:,1:D+1)=STDP(:,1001:1001+D);
ind = find(firings(:,1) > 1001-D);
firings=[-D 0;firings(ind,1)-1000,firings(ind,2)];
s(1:Ne,:)=max(0,min(sm,0.01+s(1:Ne,:)+sd(1:Ne,:)));
sd=0.9*sd;
end;
D96