专栏首页瓜大三哥线性神经网络

线性神经网络

自适应线性元件也是早期的神经网络模型之一,其学习算法称为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为输入延迟向量,默认值为【0】,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;
if lr==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);
for epoch=1:max_epoch
 if see<err_goal
        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];%把误差变为一个行向量
 if rem(epoch,disp_freq)==0
        hold on;
        plot([lw W],[lb,B],'g-');
        drawnow
 end
end
figure(2);
hold off;
m=W*p+B;
a=purelin(m);
plot(a)

五、线性网络的应用

1.逻辑与

clear all;

% 定义变量

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{1,1},net1.b{1}]

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

y2=sim(net2,p)

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

y22=y2>=0.5

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

w2=[net2.iw{1,1},net2.b{1}]

% 图形窗口输出

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

hold on;

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.逻辑异或

clear all;

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{1,1},net.b{1}];

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

hold on;

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[(n0-y)2]->0时,y->n0,其输出ε为s,则噪声被抵消。

clear all;

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

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);

hold on;

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)');

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

本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise),作者:xiguazaitortoise

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 4x4查找表乘法器

    module mul_4x4( A, B, C ); input [3:0] A; input [3:0] B; output [7:0] ...

    瓜大三哥
  • matlab神经网络1

    神经网络的通用函数 一、神经网络仿真函数 [Y,Pf,Af,E,Perf]=sim(net,P,Pi,Ai,T) 其中,参数Y为网络的输出;Pf表示最终的输入延...

    瓜大三哥
  • BP神经网络

    BP(Back Propagation)神经网络是1986年由以Rumelhart和McCelland为首的科学家小组提出的,是一种按误差逆传播算法训练的多层前...

    瓜大三哥
  • 线性神经网络

    自适应线性元件也是早期的神经网络模型之一,其学习算法称为LMS(Least Mean Squares)算法。Adaline网络与感知器网络非常相似,只是神经元的...

    企鹅号小编
  • TensorFlow游乐场及神经网络简介

    本文将通过TensorFlow游乐场来快速介绍神经网络的主要功能。TensorFlow游乐场(http://playground.tensorflow.org)...

    博文视点Broadview
  • 神经网络体系搭建(序)

    神经网络这个概念并不陌生,但是从接触到现在这一个月的时间里,云里雾里,始终无法建立起完整的体系,能让自己顺畅地用神经网络解决一个具体问题,并进行有针对性的优化。...

    刘开心_1266679
  • Java 代理模式

    什么是代理 代理是一种设计模式,它的核心思想,是将对目标的访问转移到代理对象上。这样做的好处就是,目标对象在不改变代码的情况下,可以通过代理对象加一些额外的功能...

    方志朋
  • IBM开发了一种AI系统,帮助人类创造新型香水

    香水的创造通常被视为定制艺术。几个世纪以来,法国人对嗅觉业务感到自豪,专业的气味大师花费数十年的时间学习手艺。科蒂(Coty)和雅诗兰黛(EstéeLauder...

    AiTechYun
  • iOS 开发中利用socket请求百度网页

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • 王兴说美团2019年要片区规模应用无人车,下了一盘什么棋?

    在北京向百度等企业发放首批无人车路测牌照后,自动驾驶汽车的曙光已经清晰可见。在许多人第一印象中,说到无人车可能会先想到乘用车,不过现在看来最先商用的无人车将来自...

    罗超频道

扫码关注云+社区

领取腾讯云代金券