1. 误差修正学习
神经元k的输出信号yk(n)表示,
dk(n)表示的是期望响应或目标
输出比较。由此产生ek(n)表示的误差信号,有
ek(n)dk(n)yk(n) 这一目标通过最小化代价函数或性能指标
(n)来实现。定义如下
(n)12e2k(n) 也就是说(n)是误差能量的瞬时值。这种对神经元k的突触权值步步逼近的调节将持续下去,直到系统达到稳定状态。这时,学习过程停止。根据增量规则,在第n时间步作用于突触权值的调节量wkj(n)定义如下:
wkj(n)ek(n)xj(n)
2. 基于记忆的学习
在一个简单而有效的称作最近邻规则的基于记忆的学习类型中,
局部邻域被定义为测试向量Xtest的直接邻域的训练实例,特别,向量 X'NX1,X2,,XN
被称作Xtest的最邻近,如果
miidn(X'i,Xte)std(XN,Xte)s t这里,d(Xi,Xtest)是向量Xi和Xtest的欧几里德距离。与最短距离相关的类别,也
就是向量X'N被划分的类别。
3. Hebb学习
我们定义Hebb突触为这样一个突触,它使用一个依赖时间的、
高度局部的和强烈交互的机制来提高突触效率为前突触和后突触活动间的相互关系的一个函数。可以得出Hebb突触特征的4个重要机制:时间依赖机制;局部机制;交互机制;关联或相关机制。
4. 竞争学习
获胜神经元k的输出信号yk被置为1;竞争失败的所有神经元
输出信号被置为0。这样,我们有
y1,如果vkvj对于所有j,jkk0,否则
其中,诱导局部域vk表示结合所有达到神经元k的前向和反馈输入的动作。 令wkj表示连接输入节点j到神经元k的突触权值。假定每个神经元被分配固定
量的突触权值,权值分布在它的节点之中;也就是
wk jkj1,对于所有的然后神经元通过将突触权值从它的不活跃输入移向活跃输入来进行学习。如果神经元对一个特定输入模式不响应,那么没有学习发生在那个神经元上。如果一个特定神经元赢得了竞争,这个神经元的每个输入节点经一定的比例释放它的突触权值,释放的权值然后平均分布到活跃输入节点上。作用于突触权值wkj的改变量wkj定
义为
边的两个神经元同时(即同步)激活,那
么那个突触的强度被选择性增强;如果在突触每一边的两个神经元被异步激活,那
如果神经k竞元争成功么那个突触被选择性地减弱或消除。
如果神经k竞元争失败(xjwkj),wkj0,
5. Boltzmann学习
令kj表示网络在钳制条件下神经元j和k的状态间的相关量。
令kj表示网络在其自由运作条件下神经元j和k的状态间的相关量。作用于神经
元j到神经元k的突触权值的改变量由
w(kjkjkj), jk
定义,其中是学习率参数。
五种学习算法的区别:
误差-修正学习和Boltzmann学习是有监督学习;而Hebb学习和竞争学习是无监督学习。
在误差-修正学习中,作用于神经元突触权值的调节量正比于本次学习中误差信号的突触的输入的乘积,它实际上带有局部性质,这仅仅是说由增量规则计算的突触调节局部于神经元k周围。同时,对的选择对学习过程的准确及其它方面也有深刻的影响。
基于记忆的学习中的最邻近规则,基于两个假设;分类实例(Xi,di)按照实例(X,d)的联合概率分布是同分布的;样本大小N是无限大的,它的分类错误率同贝叶斯误差概率的关系为
P*P(2C)P*C1 其中P*为贝叶斯误差概率,C是分类的类别数目。
Hebb学习中如果在突触(连接)每一
竞争学习中突触权值的改变取决于前
突触xj和当前的突触权值,与后突触权值yk无关。
神经网络可以通过竞争学习来进行聚类。然而,开始时输入模式必须落入充分分离的分组中。否则,网络可能不稳定,因为它将不再以同样的输出神经元响应给定的输入模式。
Boltzmann学习中突触权值的改变实
质上取决于前突触xj和后突触yk之间的
相关量。并同时考虑在钳制条件和自由运行条件下的相关量,且kj和kj的值数都在-1和+1范围内。
对此题分别采用MLP网络拟合,RBF网络拟合。 1. MLP网络拟合 % Example4_17BP
% 用于曲线拟合的BP网络 clear all;
% n为隐藏的神经元个数
n=input('请输入隐藏的神经元个数 n='); t=[15 15 15 18 28 29 37 37 44 50 50 60 61 65 65 72 75 75 82 85 91 91 97 98 125 142 142 147 147 150 159 165 183 192 195 218 218 219 224 225 227 232 232 237 246 258 276 285 300 301 305 312 317 338 347 354 357 375 394 513 535 554 591 8 660 705 723 756 768 860];
y0=[21.66 22.75 22.3 31.25 44.79 40.55 50.25 46.88 52.03 63.47 61.13 81 73.09 79.09 79.51 65.31 71.9 86.1 94.6 92.5 105 101.7 102.9 110 104.3 134.9 130.68 140.58 155.3 152.2 144.5 142.15 139.81 153.22 145.72 161.1 174.18 173.03 173.54 178.86 177.68 173.73 159.98 161.29 187.07 176.13 183.4 186.26 1.66 186.09 186.7 186.8 195.1 216.41 203.23 188.38 1.7 195.31
202.63 224.82 203.3 209.7 233.9 234.7 244.3 231 242.4 230.77 242.57 232.12 246.7];
net=newff(minmax(t),[n,1],{'tansig' 'purelin'},'trainlm');
% 未经训练的模拟输出y1 y1=sim(net,t);
net.trainParam.epochs=250; net.trainParam.goal=9.0; net=train(net,t,y0);
% 训练后的模拟输出y2 y2=sim(net,t);
y3=233.84*(1-exp(-0.006042*t)); figure;
plot(t,y0,'-',t,y1,'--',t,y2,'--',t,y3,':'); title('训练后的网络仿真结果');
xlabel('时间/天数');
ylabel('晶状体重量/克');
legend('原始数据','初始化值','训练后曲线','模型曲线');
1. 在MLP网络拟合中,进行了三次试验,
隐藏神经元的个数分别是8,12,15,结
果显示在隐藏神经元的个数大的时候有更好的拟合能力,尤其在数据间变化快(上下波动大)的时候可以很好的拟合,比原来的最小平方模型更好。 2. 在RBF网络拟合中,拟合结果显示,
在数据变化快(上下波动大)的时候能完全拟合,但是在数据变化慢(上下波动小)的时候的拟合结果相当差,证明它的网络推广能力不强。
3. 当MLP网络和RBF网络比较时,它
们的误差曲线分别如图3,图5可以看出他们的误差之间相差不大,但是RBF网络的迭代步数明显要少于MLP网络。虽然MLP网络不能很好的对数据变化快的点进行拟合,但从整体数据看它的适应能力好。RBF网络在数据变化慢的点的拟合效果明显比MLP网络差。
function C=make_data_4_8()
% 产生用于BP,RBF,SVM试验数据 pats=input('产生数据的个数 pats='); if floor(pats/2)*2 ~= pats,
disp('Number of patterns should be equal - try again!'); return end
f=pats/2;
% 生成第一类数据 C1=randn(f,2); C1(:,3)=ones(f,1)*.95; C1(:,4)=ones(f,1)*.05; C1(:,5)=zeros(f,1); for i=1:f
RC1(i,i)=(1/2*pi)*exp((-1/2*pi)*(norm(C1(i,1:2)-zeros(1,2)))^2);
end
% 第一类数据的概率密度函数 mesh(C1(:,1),C1(:,2),RC1(:,:)); % 生成第二类数据 C2=randn(f,2); C2=C2*2; C2(:,1)=C2(:,1)+2; C2(:,3)=ones(f,1)*.05; C2(:,4)=ones(f,1)*.95; C2(:,5)=ones(f,1)*1; for i=1:f
RC2(i,i)=(1/2*pi*4)*exp((-1/2*pi)*(norm(C2(i,1:2)-[2 0])^2)); end figure
% 第二类数据的概率密度函数 mesh(C2(:,1),C2(:,2),RC2(:,:)); figure
plot(C1(:,1),C2(:,2),'*'); axis([-4 10 -5.5 5.5]) figure
plot(C2(:,1),C2(:,2),'o'); axis([-4 10 -5.5 5.5]) figure
plot(C1(:,1),C2(:,2),'*'); axis([-4 10 -5.5 5.5]) hold on
plot(C2(:,1),C2(:,2),'o'); axis([-4 10 -5.5 5.5])
% shuffle them up H=[C1' C2']';
[y i]=sort(rand(f*2,1)); C=H(i,:);
用上面的程序画出两类数据的Guass分布三维图
P=mk_data(500);%产生数据用来训练神经网络,两类高斯分布的训练数据分别为250
hN=2;oN=2;lr=0.1;mom=0;epochs=320;
[w1,b1,w2,b2,ep_err,a]=bpm_train(P,hN,oN,2,lr,mom,epochs,0,0,0,0,0);%训练神经网络,hN是隐藏神经元个数,oN是输出层神经元个数,lr是学习率,mom动量参数,epochs是训练回合数目。w1,b1分别是返回训练所得的权值的偏移量。
bpm_dec_bnds(w1,b1,w2,b2,0.1);%产生分类边界
%测试
T=mk_data(10000);%产生10000个测试数据
[cor,uncor]=bpm_test(w1,b1,w2,b2,T);
c=pl_circ([-2/3 0],2.34,0.01,1);%确定Bayes分界面
%hN=2;lr=0.1;mom=0;epochs=320; oN=2
1. 在神经元数目,学习率参数,动量
常数,都不变,试验时只改变训练集数目和回合数的时候,从表1,表2分别可以看出均方误差和正确分类概率没有必然的联系,均方误差和正确分类概率不会随着训练集数目和回合数的增加而增加,也不会随着训练集数目和回合数的减少而减少。 2. 在学习率参数=0.1,动量常数=0
的时候,比较神经元个数对试验结果
的影响,从表1,表2及图12,图13可以看出当隐藏神经元个数是4的时候
比隐藏神经元个数是2的时候,试验结果中:均方误差小,正确分类概率大。说明含有4个隐藏神经元的网络得出的结果优于2个隐藏神经元的网络。 3. 学习率参数和动量常数的选择。
从表3,表4,表5,表6及图14,图15,图16,图17可以看出:当隐藏神经元的个数固定(在试验中为2),学习率参数分别为0.01,0.1,0.5,0.9时,改变动量常数,均方误差和正确分类概率同动量常数没有一个线性关系,这就要求我们选择一个最佳的组合。从试验结果看,当学习率参数为0.01,动量常数为0.1时,正确分类概率最高为80.46%。
4. 从16中组合中挑出最优的学习曲线(图
18),试验结果(表7),明显看出学习率参数=0.01,动量常数=0.1时,
它的学习曲线衰减很快,证明它有较小的均方误差。
5. 均方误差与分类概率没有必然联系,
一个BP算法的均方收敛的误差非常小,同时也可能牺牲了它的泛化能力,
在实验中我们可以发现:分类概率好的结果其均方误差并非最小的。 % Example_5_14利用SVM工具。对n个点进行训练。
clear all;
n=input('请输入测试的次数 n='); lr=input('请输入正则化参数 lr='); cs=input('请输入隐藏层中心大小 cs=') for i=1:n
P=mk_data(200);
w = rbf(P(1:100,1:2), P(:,1:2),
P(1:100,3:4), cs, lr);
T=mk_data(500);
rbfout=rbf_test(w,T(:,1:2),P(:,1:2),cs); rbfcor(i,:) =rbf_correct(rbfout,T(:,5)); figure(i);
rbf_db(w,P(:,1:2),cs,0.2); end
avecorrect=mean(rbfcor)
mincorrect=min(rbfcor) maxcorrect=max(rbfcor) stdcorrect=std(rbfcor) P = mk_data(500); cw=4;lr=0.01;c=0.1
[pesos,vect,b] = svm_rbf(P, cw, 1000, lr, c);%cw是宽度,lr是学习率参数,c是正则化常数
T = mk_data(32000);
[c u] = svm_test(T, pesos, vect, b, cw); svm_dec_bnd(pesos, vect, b, cw)
对于每次试验用500个点进行训练,并用32000个数据点进行测试。五次试验宽度cw为4,正则化常数c都为0.1,并固定学习率参数lr为0.01。
两维分布驱动的一维网格: hN=200;
p=rand(1000,2);%输入数据分布 plot(p(:,1),p(:,2));%画出数据的分布图 [w1s P1]=som_1d(p,hN,10,[0.1 18]);%hN是隐藏神经元个数
[w2s P2]=som_1d(p,hN,50,[P1(1) 0.001 P1(2) 0],w1s);
当隐藏神经元个数越大,对原始离散数据的逼近更好,在排序阶段和收敛阶段都比隐藏神经元为100的要好。但是,我们对离散数据进行逼近时,不能把隐藏神经元个数选取的太大,如果选取的过大的话,网络会出现过拟合现象,这样以来它的网络推广性就会下降;同时,隐藏神经元个数越大,运行的时间也会相应的增加。所以适当的选取隐藏神经元个数越大是很重要的。
function [NN_w1 NN_w NN_w1_1
NN_w_1]=Som_912() clf
%--设置符号代码的值 a=0.2;
%--训练数据集
P=[a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 a 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 a 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 a 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 a 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 a 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 a 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a , 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 , 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 , 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 , 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 , 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 , 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 , 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 , 0 0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 , 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 , 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 , 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0]'; %--排序阶段权值
[W1 p1]=som_2d(P,10,10,2000,[.01,8]); figure(1);
subplot(2,1,1);
som_pl_map(W1,1,2) title('Ordering weights') %--收敛阶段权值
W=som_2d(P,10,10,5000,[p1(1) 0.001 p1(2) 0],W1);
subplot(2,1,2);
som_pl_map(W,1,2)
title('Convergence weights') %--测试数据集
T=[a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 a 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 a 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 a 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 a 0 0 0 0 ,
0 0 0 0 0 0 0 0 0 0 0 0 a 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 a 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]';
%==============包含具有最强响应的标定神经元的特征映射============= NN_w1=zeros(10,10); NN_w=zeros(10,10); %---计算 for h=1:16 M_w1=0; M_w=0; for i=1:10
for j=1:10 M1=0; M2=0;
for k=1:29
M1=M1+W(i,j,k)*T(h,k);
M2=M2+W1(i,j,k)*T(h,k); end;
if M_w %--文字显示 figure(2); text_plot(NN_w1); title('ordering phase'); figure(3); text_plot(NN_w); title('Convergence phase') %=======利用“模拟电极渗透映射”的语义映射=========== NN_w1_1=zeros(10,10); NN_w_1=zeros(10,10); %----计算 for i=1:10 for j=1:10 M_w1=0; M_w=0; for h=1:16 M1=0; M2=0; for k=1:29 M1=M1+W(i,j,k)*T(h,k); M2=M2+W1(i,j,k)*T(h,k); end; if M_w NN_w1_1 NN_w_1 %---文字显示 figure(4); text_plot(NN_w1_1); title('ordering phase'); figure(5); text_plot(NN_w_1); title('Convergence phase'); function text_plot(z); [cz rz]=size(z); s=cell(cz,rz); for i=1:cz for j=1:rz switch z(i,j) case 0 s(i,j)={' '}; case 1 s(i,j)={' dove '}; case 2 s(i,j)={' hen '}; case 3 s(i,j)={' duck '}; case 4 s(i,j)={' goose '}; case 5 s(i,j)={' owl '}; case 6 s(i,j)={' hawk '}; case 7 s(i,j)={' eagle '}; case 8 s(i,j)={' fox '}; case 9 s(i,j)={' dog '}; case 10 s(i,j)={' wolf '}; case 11 s(i,j)={' cat '}; case 12 s(i,j)={' tiger '}; case 13 s(i,j)={' lion '}; case 14 s(i,j)={' horse '}; case 15 s(i,j)={' zebra '}; case 16 s(i,j)={' cow '}; end; end; end; cellplot(s); 1. 基于ICA学习的网络和固定点算法 FastICA_25都能很好的将混合数据分离开来。不过它们分离后的各个信号幅度都以原来的真实数据有很大的不同,虽然信号幅度不同,但是它们分离后的各个信号与原来的真实数据的形状非常相似,说明分离后的信号和真实信号有非常高的相干性。两种方法都达到了,较理想的分离目的。 2. 不过两种算法的运行时间相差很大, 基于ICA学习的网络运行时间大概是固定点算法FastICA_25的50倍以上,主要是两种算法基于的算法思想大大不同。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务