首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线性神经网络

自适应线性元件也是早期的神经网络模型之一,其学习算法称为LMS(Least Mean Squares)算法。Adaline网络与感知器网络非常相似,只是神经元的传输函数与不同而已。前者是线性传递函数,后者是对称硬极限传递函数。单层Adline网络和感知器网络一样,只能解决线性可分的问题,但其LMS学习规则却比感知器学习规则强得多。

感知器学习规则训练的网络,其分类的判决边界往往离各分类模型靠的比较近,这使得网络对噪声十分敏感;而LMS学习规则则使均方误差最小,从而使判决边界尽可能远离分类模式,增强了网络的抗造能力。旦LMS算法只是英语单层网络的训练,当需要多层网络设计时,需要找新的学习算法,如BP算法。

一、LMS学习率的选择

学习率η越少,算法运行时间就越长,算法也就记忆了更多过去的数据,因此学习率η的倒数反映了LMS算法的记忆容量大小。

η往往需要根据经验选择,1996年Hayjin证明,只要学习率η满足下式,LMS算法就是按方差收敛的:

又可以写成

二、线性神经网络的训练

1.表达。计算训练的输出向量A=W*P+B,以及与期望输出之间的误差E=T-A。

2.检查。将网络输出误差的平方和与期望误差相比较,如果其值小于期望误差或训练达到事先设定的最大训练次数,则停止训练,否则继续。

3.学习。采用W-H学习规则计算新的权值和偏差,并返回到步骤1.

三、线性神经网络函数1.创建函数

(1)newlin函数

newlin函数用于创建一个线性层,在matlab中推荐使用linearlayer函数。所谓线性层,是一个单独的层次,它的权函数为dotprod,输入函数欸netsum,传递函数为purelin。线性层一般用作信号处理和预测中的自适应滤波器。

net = newlin(PR,S,ID,LR)

其中,PR为由R个输入元素矩阵;S为输出向量的数目;ID为输入延迟向量,默认值为【】,LR为学习速率,默认值为0.01;net返回值为一个新的线性层。

(2)linearlayer函数

在matlab 2014b以后就用linearlayer替代newlin函数,该函数的格式为:

linearlayer(inputDelays,widrowHoffLR)

其中inputDelays为输入延迟的行向量,默认为1:2;widrowHoffLR为学习速率,默认值为0.01。

(3)newlind函数

该函数可以设计一个线性层,它通过输入向量和目标向量来计算线性层的权值和阈值,函数的调用格式如下:

net = newlind(P,T,Pi)

其中P为Q组输入向量组成的RxQ维矩阵;T为Q组目标分类向量组成的SxQ维矩阵;Pi为初始输入延迟状态的ID个单元阵列。

2.传递函数

在matlab中,线性传递函数的调用格式为:

A=purelin(N,FP)

其中,N为SXQ维的网络输入列向量,FP为性能参数,返回网络输入向量N的输出矩阵A。

3.学习函数四、线性神经网络的局限性

线性神经网络只能反映输入和输出样本向量间的线性映射关系,和感知器神经网络一样,它也只能解决线性可分问日。由于线性神经网络的误差曲面是一个多维抛物面,所以在学习速率足够小的情况下,对于基于最小二乘梯度下降原理进行训练总可以找到一个最优解。但是,尽管如此,对线性神经网络的训练并不一定总能达到零误差。线性神经网络的训练性能要受网络规则和训练样本集大小的限制。如果线性神经网络的自由度(即神经网络所有权值和阈值的个数总和)小于训练样本集中“输入-目标”向量的对数,且各样本向量线性无关,则网络训练不可能达到零误差,而只能得到一个网络误差最小的解。此外,值得注意的是,线性神经网络的训练和性能都要受到学习速率参数的影响,过大的学习速率可能会导致网络性能发散。

权值w和偏差b所决定的线性网络误差图,可以看出它是一个抛物面。

lr=menu('选择学习速率:',...

'1.2*maxlinlr',...

'2.8*maxlinlr');

disp('')

disp_freq=1;

max_epoch=28;

err_goal=0.001;

iflr==1

lp.lr=1.2*maxlinlr(p,'bias');

else

lp.lr=2.8*maxlinlr(p,'bias');

end

a=W+p+B;

A=purelin(a);

E=t-A;

see=sumsqr(E);%求误差

errors=[see];%求误差矩阵元素的平方和

figure(1);

forepoch=1:max_epoch

ifsee

epoch=epoch-1;

break;

end

lw=W;

lb=B;

dw=learnwh([],p,[],[],[],[],E,[],[],[],lp,[]);

db=learnwh([],ones(1,Q),[],[],[],[],E,[],[],[],lp,[]);

W=W+dw;

B=B+db;

a=W*p+B;

A=purelin(a);

E=t-A;

see=sumsqr(E);

errors=[errors see];%把误差变为一个行向量

ifrem(epoch,disp_freq)==0

holdon;

plot([lw W],[lb,B],'g-');

drawnow

end

end

figure(2);

holdoff;

m=W*p+B;

a=purelin(m);

plot(a)

五、线性网络的应用1.逻辑与

clearall;

%定义变量

p=[0 0 1 1;0 1 0 1];

t=[0 0 0 1];

lr=maxlinlr(p,'bias');%根据输入矩阵求解最大学习速率

%线性网络实现

net1=linearlayer(0,lr);

net1=train(net1,p,t);

%感知器实现

net2=newp([-1 1;-1 1],1,'hardlim');

net2=train(net2,p,t);

%显示

disp('线性网络输出:')

y1=sim(net1,p)

disp('线性网络二值输出:')

y11=y1>=0.5

disp('线性网络最终权值:')

w1=[net1.iw,net1.b]

disp('感知器网络输出:')

y2=sim(net2,p)

disp('感知器网络二值输出:')

y22=y2>=0.5

disp('线性网络最终权值:')

w2=[net2.iw,net2.b]

%图形窗口输出

plot([0,0,1],[0,1,0],'ro');

holdon;

plot(1,1,'bd');

x=-2:0.2:2;

y1=1/2/w1(2)-w1(1)/w1(2)*x-w1(3)/w1(2);

plot(x,y1,'-');

y2=-w2(1)/w2(2)*x-w2(3)/w2(2);

plot(x,y2,'--');

axis([-0.5 2 -0.5 2]);

xlabel('x');

ylabel('y');

title('线性神经网络用于求积与逻辑')

legend('0','1','线性神经网络分类面','感知器分类面');

2.逻辑异或

clearall;

p1=[0 0 1 1;0 1 0 1];

p2=p1(1,:).^2;

p3=p1(1,:).*p1(2,:);

p4=p1(2,:).^2;

p=[p1(1,:);p2;p3;p4;p1(2,:)];

t=[0 1 1 0];

lr=maxlinlr(p,'bias');%根据输入矩阵求解最大学习率

%线性网络实现

net=linearlayer(0,lr);

net=train(net,p,t);

y1=sim(net,p);

w1=[net.iw,net.b];

plot([0 1],[0 1],'ro');

holdon;

plot([0 1],[1 0],'d');

axis([-0.1 1.1 -0.1 1.1]);

xlabel('x');ylabel('y');

title('线性网络用于求解异或逻辑');

x=-0.1:0.1:1.1;

y=-0.1:0.1:1.1;

N=length(x);

X=repmat(x,1,N);

Y=repmat(y,N,1);

Y=Y(:);

Y=Y';

p=[X;X.^2;X.*Y;Y.^2;Y];

yy=net(p);

y1=reshape(yy,N,N);

[C,h]=contour(x,y,y1);

clabel(C,h,0.5);

legend('0','1','线性网络分类面');

3.滤噪

图中s为原始输入信号,假设为平稳的零均值随机信号;

n0为与s不想关的随机信号;

n1为u与n0相关的信号;

系统输出为ε;

s+n0为ADALINE神经元的预期输出;

y为ADALINE神经元的输出。则

通过ADALINE调节,得到

上式中,当Emin[(n-y)2]->0时,y->n,其输出ε为s,则噪声被抵消。

clearall;

%定义输入向量和目标向量

time=0.01:0.01:10;%时间变量

noise=(rand(1,1000)-0.5)*4;%随机噪声

input=sin(time);%信号

p=noise;%将噪声作为ADALINE的输入向量

t=input+noise;%目标向量

%创建线性神经网络

net=newlin([-1 1],1,0,0.0005);

%线性神经网络的自适应调整

net.adaptParam.passes=70;

%输出信号output为网络调整过程中的误差

[net,y,output]=adapt(net,p,t);

holdon;

subplot(3,1,1);

plot(time,input,'r')

title('信号波形sin(t)');

subplot(312);

plot(time,t,'m');

xlabel('t');

title('随机噪声波形sin(t)+noise(t)');

%绘制输出信号的波形

subplot(313);

plot(time,output,'b');

xlabel('t');

title('输出信号波形y(t)');

输出信号除了含有一定的直流分类外,其波形与输入波形基本一直,消除了迭加的随机噪声。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171223G0OLXS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券