转载自:http://blog.163.com/zzz216@yeah/blog/static/16255468420107875552606/

感知器是由美国计算机科学家罗森布拉特(F.Roseblatt)于1957年提出的。感知器可谓是最早的人工神经网络。单层感知器是一个具有一层神经元、采用阈值激活函数的前向网络。通过对网络权值的训练,可以使感知器对一组输人矢量的响应达到元素为0或1的目标输出,从而实现对输人矢量分类的目的。图4.1给出了单层感知器神经元模型图。

图4.1  感知器神经元模型

其中,每一个输入分量严pj(j=1,2…,r)通过一个权值分量wj,进行加权求和,并作为阈值函数的输人。偏差b的加入使得网络多了一个可调参数,为使网络输出达到期望的目标矢量提供了方便。感知器特别适合解决简单的模式分类问题。F.Roseblatt已经证明,如果两类模式是线性可分的(指存在一个超平面将它们分开),则算法一定收敛。

感知器特别适用于简单的模式分类问题,也可用于基于模式分类的学习控制中。

感知器实际上是在MP模型的基础上加上学习功能,使其权值可以调节的产物。罗森布拉特研究了单层的以及具有一个隐含层的感知器。但在当时他只能证明单层感知器可以将线性可分输入矢量进行正确划分,所以本书中所说的感知器是指单层的感知器。多层网络因为要用到后面将要介绍的反向传播法进行权值修正,所以把它们均归类为反向传播网络之中。

4.1  感知器的网络结构

感知器的网络是由单层的s个感知神经元,通过一组权值{ωij}(i=1,2…s;j=l,2…r)与r个输入相连组成。对于具有输入矢量Pr×q和目标矢量Ts×q的感知器网络的简化结构,如图4.2所示。

图4.2 感知器简化结构图

根据网络结构,可以写出第i个输出神经元(i=1,2,…,s)的加权输入和ni及其输出ai为:

                              (4-1)

                           (4-2)

感知器的输出值是通过测试加权输入和值落在阈值函数的左右来进行分类的,即有:

                (4-3)

阈值激活函数如图4.3所示。

由图4.3可知:当输入ni十bi大于等于0,即有ni≥-bi时,感知器的输出为1,否则输出ai为0。利用偏差bi的使用,使其函数可以左右移动,从而增加了一个自由调整变量和实现网络特性的可能性。

图4.3 阈值激活函数

4.2 感知器的图形解释

由感知器的网络结构,我们可以看出感知器的基本功能是将输入矢量转化成0或1的输出。这一功能可以通过在输人矢量空间里的作图来加以解释。为了简单起见,以下取s=1,即输出为一个节点的网络的情况来进行作图解释。

由感知器的输从输出的关系式(4.3)可知,感知器的输出只有1或0两个状态,其他值由W*P+b的值大于、等于或小于零来确定。当网络的权值W和b确定后,在由各输入矢量pj(j=1,2…,r)为坐标轴所组成的输入矢量空间里,可以画出W*P+b=0的轨迹,对于任意给定的一组输入矢量P,当通过感知器网络的权值W和b的作用,或落在输入空间W*P+b=0的轨迹上,或落在W*P+b=0轨迹的上部或下部,而整个输入矢量空间是以W*P+b=0为分割界,即不落在W*P+b=0轨迹上的输入矢量,不是属于W*P+b>0,就是使W*P+b<0。因而感知器权值参数的设计目的,就是根据学习法则设计一条W*P+b=0的轨迹,使其对输入矢量能够达到期望位置的划分。

以输入矢量r=2为例,对于选定的权值w1、w2和b,可以在以p1和p2分别作为横、纵坐标的输入平面内画出W*P+b=w1 p1十w2 p2十b=0的轨迹,它是一条直线,此直线上的及其线以上部分的所有p1、p2值均使w1 p1十w2 p2十b>0,这些点若通过由w1、w2和b构成的感知器则使其输出为1;该直线以下部分的点则使感知器的输出为0。所以当采用感知器对不同的输入矢量进行期望输出为0或1的分类时,其问题可转化为:对于已知输入矢量在输人空间形成的不同点的位置,设计感知器的权值W和b,将由W*P+b=0的直线放置在适当的位置上使输入矢量按期望输出值进行上下分类。(几何图形)

阈值函数通过将输入矢量的r维空间分成若干区域而使感知器具有将输入矢量分类的能力。输出矢量的0或1,取决于对输入的分类。

图4.4给出了感知器在输入平面中的图形,从中可以清楚看出:由直线W*P十b=0将由输人矢量p1和p2组成的平面分为两个区域,此线与权重矢量W正交可根据偏差b进行左右平移。直线上部的输人矢量使阈值函数的输入大于0,所以使感知器神经元的输出为1。直线下部的输入矢量使感知器神经元的输出为0。分割线可以按照所选的权值和偏差上下左右移动到期望划分输入平面的地方。

图4.4输入矢量平面图(此图横坐标有问题)

感知器神经元不带偏差时,得到的是通过原点的分类线。有些可以用带偏差解决的问题,不带偏差的网络则解决不了。

熟悉图形解释有助于我们理解和掌握感知器的工作原理。当然在实际应用时,权值的求解全都是由计算机来完成的。

4.3  感知器的学习规则

学习规则是用来计算新的权值矩阵W及新的偏差B的算法。感知器利用其学习规则来调整网络的权值,以便使该网络对输人矢量的响应达到数值为0或1的目标输出。

对于输入矢量P,输出矢量A,目标矢量为T的感知器网络,感知器的学习规则是根据以下输出矢量可能出现的几种情况来进行参数调整的。

1) 如果第i个神经元的输出是正确的,即有:ai=ti,那么与第i个神经元联接的权值wij和偏差值bi保持不变;

2)如果第i个神经元的输出是0,但期望输出为1,即有ai=0,而ti=1,此时权值修正算法为:新的权值wij为旧的权值wij加上输人矢量pj;类似的,新的偏差bi为旧偏差bi加上它的输入1;

3)  如果第i个神经元的输出为1,但期望输出为0,即有ai=1,而ti=0,此时权值修正算法为:新的权值wij等于旧的权值wij减去输入矢量pj;类似的,新的偏差bi为旧偏差bi减去1。

由上面分析可以看出感知器学习规则的实质为:权值的变化量等于正负输入矢量。具体算法总结如下。

对于所有的i和j,i=l,2,…,s;j=1,2,…,r,感知器修正权值公式为:

  (4-4)

用矢量矩阵来表示为

            (4-5)

此处,E为误差矢量,有E=T-A。

感知器的学习规则属于梯度下降法,该法则已被证明:如果解存在,则算法在有限次的循环迭代后可以收敛到正确的目标矢量。

上述用来修正感知器权值的学习算法在MATLAB神经网络工具箱中已编成了子程序,成为一个名为1earnp.m的函数。只要直接调用此函数,即可立即获得权值的修正量。此函数所需要的输人变量为:输入、输出矢量和目标矢量:P、A和T。调用命令为:

[dW,dB]=learnp(P,A,T);

4.4  网络的训练

要使前向神经网络模型实现某种功能,必须对它进行训练,让它逐步学会要做的事情,并把所学到的知识记忆在网络的权值中。人工神经网络权值的确定不是通过计算,而是通过网络的自身训练来完成的。这也是人工神经网络在解决问题的方式上与其他方法的最大不同点。借助于计算机的帮助,几百次甚至上千次的网络权值的训练与调整过程能够在很短的时间内完成。

感知器的训练过程如下:

在输入矢量P的作用下,计算网络的实际输出A,并与相应的目标矢量T进行比较,检查A是否等于T,然后用比较后的误差量,根据学习规则进行权值和偏差的调整;重新计算网络在新权值作用下的输入,重复权值调整过程,直到网络的输出A等于目标矢量T或训练次数达到事先设置的最大值时训练结束。

若网络训练成功,那么训练后的网络在网络权值的作用下,对于被训练的每一组输入矢量都能够产生一组对应的期望输出;若在设置的最大训练次数内,网络未能够完成在给定的输入矢量P的作用下,使A=T的目标,则可以通过改用新的初始权值与偏差,并采用更长训练次数进行训练,或分析一下所要解决的问题是否属于那种由于感知器本身的限制而无法解决的一类。

感知器设计训练的步骤可总结如下:

1)对于所要解决的问题,确定输入矢量P,目标矢量T,并由此确定各矢量的维数以及确定网络结构大小的神经元数目:r,s和q;

2)参数初始化:

a)赋给权矢量w在(—l,1)的随机非零初始值;

b)给出最大训练循环次数max_epoch;

3)网络表达式:根据输人矢量P以及最新权矢量W,计算网络输出矢量A;

4)检查:检查输出矢量A与目标矢量T是否相同,如果是,或已达最大循环次数训练结束,否则转入5);

5)学习:根据(4.5)式感知器的学习规则调整权矢量,并返回3)。

4. 5 感知器神经网络应用的局限性

由于感知器神经网络在结构和学习规则上的限制,其应用也有一定的局限性。

首先,感知器的输出只能取0或1。

其次,单层感知器只能对线性可分的向量集合进行分类。

4. 6 感知器神经网络设计实例

下面给出例题来进一步了解感知器解决问题的方式,掌握设计训练感知器的过程。

[例4.1]考虑一个简单的分类问题。

设计一个感知器,将二维的四组输入矢量分成两类。

输入矢量为:P=[-0.5  -0.5   0.3  0;

-0.5   0.5  -0.5  1];

目标矢量为:T=[1.0  l.0  0  0],

解:

通过前面对感知器图解的分析可知,感知器对输入矢量的分类实质是在输入矢量空间用W*P十b=0的分割界对输人矢量进行切割而达到分类的目的。根据这个原理,对此例中二维四组输人矢量的分类问题,可以用下述不等式组来等价表示出:

实际上可以用代数求解法来求出上面不等式中的参数w1、w2和w3。经过迭代和约简,可得到解的范围为:

一组可能解为:

而当采用感知器神经网络来对此题进行求解时,意味着采用具有阈值激活函数的神经网络,按照问题的要求设计网络的模型结构,通过训练网络权值W=[w11,w12]和b,并根据学习算法和训练过程进行程序编程,然后运行程序,让网络自行训练其权矢量,直至达到不等式组的要求。

鉴于输入和输出目标矢量已由问题本身确定,所以所需实现其分类功能的感知器网络结构的输人节点r,以及输出节点数,已被问题所确定而不能任意设置。

根据题意,网络结构图如图4.5所示。

图4.5 网络结构图

由此可见,对于单层网络,网络的输入神经元数r和输出神经元数s分别由输入矢量P和目标矢量T唯一确定。网络的权矩阵的维数为:Ws×r,Bs×1权值总数为s×r个,偏差个数为s个。

在确定了网络结构并设置了最大循环次数和赋予权值初始值后,设计者可方便地利用MATLAB,根据题意以及感知器的学习、训练过程来编写自己的程序。下面是对[例4.1]所编写的网络权值训练用的MATLAB程序:

P=[-0.5 -0.5 0.3 0; -0.5 0.5 -0.5 1];     T=[1 1 0 0];

[R Q]=size(P);       [S Q]=size(T);

W=rands(S, R);      B=rands(S, 1);

max_epoch = 20;

A=hardlim(netsum(W*P, B));

for epoch=1:max_epoch

if all (A==T)

break;

end

% 格式: [dw db]=learnp(p1, e1)、 [dw db]=learnp(p1, a1, t1).

e = T-A;

[dW, dB] = learnp(P(:,1+mod(epoch-1,Q)), e(1+mod(epoch-1,Q)))

W = W + dW;

B = B + dB;

A = hardlim(netsum(W*P, B));

end

clf;

plotpv(P,T);

% plot the deviding line/plane: W*P'+b=0

if (R==2)                       % 二维样本绘图

x1=[-2:0.1:4];

x2=-(W(1)*x1+B)/W(2);

hold on;

plot(x1,x2,'-b','LineWidth',2);

end

以上就是根据前面所阐述的感知器训练的三个步骤:表达式、检查和学习而编写的MATLAB网络设计的程序。
4.7  感知器的局限性

由于感知器自身结构的限制,使其应用被限制在一定的范围内。所以在采用感知器解决具体问题时,必须时刻考虑到其特点。一般来说,感知器有以下局限性:

1)由于感知器的激活函数采用的是阀值函数,输出矢量只能取0或1,所以只能用它来解决简单的分类问题;

2)感知器仅能够线性地将输入矢量进行分类。如果用一条直线或一个平面把一组输入矢量正确地划分为期望的类别,则称该输入/输出矢量是对线性可分的,否则为线性不可分。那么,利用感知器将永远也达不到期望输出的网络权矩阵。所以用软件设计感知器对权值进行训练时,需要设置一个最大循环次数。如果在达到该最大循环次数后,还没有达到期望的目标,训练则停止,以便不使不可分的矢量占用无限循环的训练时间。不过应当提醒的是,理论上已经证明,只要输人矢量是线性可分的,感知器在有限的时间内总能达到目标矢量;

3)感知器还有另外一个问题,当输入矢量中有一个数比其他数都大或小得很多时,可能导致较慢的收敛速度。

感知器在解决实际问题时,必须在输入矢量是线性可分时才有效,这是很难得到的情形。虽然感知器有上述局限性,但它在神经网络研究中有着重要的意义和地位。它提出了自组织自学习的思想。对能够解决的问题有一个收敛的算法,并从数学上给出了严格的证明。对这种算法性质的研究仍是至今存在的多种算法中最清楚的算法之一。因此它不仅引起了众多学者对人工神经网络研究的兴趣,推动了人工神经网络研究的发展,而且后来的许多种网络模型都是在这种指导思想下建立起来并改进推广的。

感知器(Perceptron)相关推荐

  1. 感知器(perceptron)模型分析及实现

    感知器模型分析及实现 1. 感知器模型 2. 几何意义 3. 感知器模型的训练 4. 批处理训练过程 4.1 训练数据的规范化 4.2 批处理感知器算法 实现代码 \qquad 感知器 (percep ...

  2. 基于 iris 数据集采用感知器 Perceptron 实现线性二分类

    基于 iris 数据集采用感知器 Perceptron 实现线性二分类 题目简述: 基于 iris 数据集(四个特征,三个类别),选取两个特征和两个类别,采用感知器 Perceptron 实现线性二分 ...

  3. 【Python-ML】SKlearn库感知器(perceptron) 使用

    # -*- coding: utf-8 -*- ''' Created on 2018年1月12日 @author: Jason.F @summary: Scikit-Learn库感知器学习算法 '' ...

  4. 感知器 Perceptron

    基本概念 线性可分:在特征空间中可以用一个线性分界面正确无误地分开两 类样本:采用增广样本向量,即存 在合适的增广权向量 a 使得: 则称样本是线性可分的.如下图中左图线性可分,右图不可分.所有满足条 ...

  5. 【模式识别】感知器 Perceptron

    基本概念 线性可分:在特征空间中可以用一个线性分界面正确无误地分开两 类样本:采用增广样本向量,即存 在合适的增广权向量 a 使得: 则称样本是线性可分的.如下图中左图线性可分,右图不可分.所有满足条 ...

  6. 感知器Perceptron

    //perceptron.h #ifndef PERCEPTRON_H__ #define PERCEPTRON_H__#include <stdio.h> #include <st ...

  7. 3. 机器学习中为什么需要梯度下降_【干货】机器学习 | 为什么机器能“学习”?——感知器和梯度下降...

    大家好我是梁力天,今天我来给大家整理一下感知器 (perceptron model) 和梯度下降算法 (gradient descent) 的知识. source: https://cs.stanfo ...

  8. python实现二分类_感知器做二分类的原理及python numpy实现

    本文目录: 1. 感知器 2. 感知器的训练法则 3. 梯度下降和delta法则 4. python实现 1. 感知器[1] 人工神经网络以感知器(perceptron)为基础.感知器以一个实数值向量 ...

  9. 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法...

    这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...

  10. 模式识别感知器matlab,模式识别:感知器的实现

    在之前的模式识别研究中,判别函数J(.)的参数是已知的,即假设概率密度函数的参数形式已知.本节不考虑概率密度函数的确切形式,使用非参数化的方法来求解判别函数.由于线性判别函数具有许多优良的特性,因此这 ...

最新文章

  1. (MyEclipse) MyEclipse完美破解方法(图)
  2. iOS 11开发教程(八)定制iOS11应用程序图标
  3. python有趣代码-wtfPython―Python中一组有趣微妙的代码【收藏】
  4. mysql查询嵌套where_MySQL-10(where /from 嵌套查询)
  5. oracle手工收集awr报告_WHAT——什么是AWR?
  6. indesign中调出字符样式快捷键_Word中十大黄金快捷键,你会用几个?
  7. 【TypeScript系列教程07】变量声明
  8. 百万年薪大佬熬夜写作,Python高级编程之反爬虫及应对方案
  9. Jquery实际应用,判断radio,selelct,checkbox是否选中及选中的值
  10. ASP.Net学习笔记011--ASP.Net揭秘之div版本自增
  11. 掌握这些的Linux命令,你基本稳了
  12. c#样条曲线命令_C#绘制由点定义的贝塞尔样条曲线
  13. matlab语音信号处理/滤波器降噪/时域频域、归一化图谱
  14. 浅析Tone mapping
  15. 从罗京、张艺谋看CCTV的知识管理
  16. 白领巧学燕子飞可治颈椎疼
  17. iOS开发 XCode如何清理历史的项目工程记录
  18. 常见的浏览器内核有哪些?
  19. 被企业微信吓到了吗?离做到极致还早
  20. JSONException: There is a cycle in the hierarchy

热门文章

  1. php 中 map和array,浅析php中array_map和array_walk的使用对比
  2. Git(12)-- Git 分支 - 分支简介
  3. WebRtc搭建 coturn
  4. Ubuntu18.04之微信中文乱码解决
  5. Android源码kernel编译
  6. Rtsp之rtp包解析
  7. elementUI 分页器使用时遇到的Bug
  8. hrrn算法java_常用的调度算法
  9. python定义空函数体_Python 2.2 定义函数
  10. ERROR: This version of Android Studio cannot open this project, please retry with Android Studio 3.