线性神经网络

自适应线性元件也是早期的神经网络模型之一,其学习算法称为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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习原理

机器学习(13)——adaboostAdaboost

前言:下面介绍另外一种集成算法思想—boosting,提升学习(Boosting)是一种机器学习技术,可以用于回归和分类的问题,它 每一步产生弱预测模型(如决策...

3496
来自专栏机器学习从入门到成神

机器学习之深入理解SVM

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

1312
来自专栏大数据文摘

论文Express | 谷歌大脑:基于元学习的无监督学习更新规则

1893
来自专栏机器学习原理

机器学习(10)——线性SVM

支持向量机 Support vecor machine,SVM)本身是一个二元分类算法,是对感知器算法模型的一种扩展,现在的SVM算法支持线性分类和非线性分类的...

37510
来自专栏机器学习算法工程师

机器学习中的数据不平衡解决方案大全

在机器学习任务中,我们经常会遇到这种困扰:数据不平衡问题。 数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学...

2524
来自专栏SIGAI学习与实践平台

机器学习与深度学习常见面试题(上)

一年一度的校园招聘已经开始了,为了帮助参加校园招聘、社招的同学更好的准备面试,SIGAI整理出了一些常见的机器学习、深度学习面试题。理解它们,对你通过技术面试非...

3071
来自专栏人工智能

通过部分感知深度卷积网络进行人脸特征点定位

人脸特征点定位是一个非常具有挑战性的研究课题。由于纹理和形状的不同,不同人脸特征点的定位精度差异很大。但大多数现有的方法不能考虑特征点的部分位置。 为了解决这个...

21410
来自专栏机器学习算法与Python学习

干货 | 卷积神经网络入门这一篇就够了

【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 先明确一点就是,Deep Learning是全部深度学习算法...

38510
来自专栏本立2道生

特征,特征不变性,尺度空间与图像金字塔

在计算机视觉领域,特征是为了完成某一特定任务需要的相关信息。比如,人脸检测中,我们需要在图像中提取特征来判断哪些区域是人脸、哪些区域不是人脸,人脸验证中,我们需...

1832
来自专栏计算机视觉战队

通过部分感知深度卷积网络进行人脸特征点定位

人脸特征点定位是一个非常具有挑战性的研究课题。由于纹理和形状的不同,不同人脸特征点的定位精度差异很大。但大多数现有的方法不能考虑特征点的部分位置。 为了解决这个...

3156

扫码关注云+社区

领取腾讯云代金券