基于感知器模型的线性神经网络

摘要:随着计算智的提出,人工神经网络也随之发展。目前业界考虑到把神经网络(NN)归类于人工智能(AI)可能不大合适,而归类于计算智能(CI)更能说明问题实质。进化计算、人工生命和模糊逻辑系统的某些课题,也都归类于计算智能。尽管计算智能与人工智能的界限并非十分明显,然而讨论它们的区别和关系是有益的,逻辑性的思维是指根据逻辑规则进行推理的过程;它先将信息化成概念,并用符号表示,然后,根据符号运算按串行模式进行逻辑推理;这一过程可以写成串行的指令,让计算机执行。然而,直观性的思维是将分布式存储的信息综合起来,结果是忽然间产生想法或解决问题的办法。而本文就是专门讨论关于神经网络处理问题的一般思路,同时也为计算机科学与技术专业大三下专业课《人工智能》的第四个算法实验。

关键字:人工智能,神经网络,感知器模型

Production system

Abstract: Putting forward along with the computing intelligence, artificial neural network has been developing. At present the industry considering the neural network (NN) classified as artificial intelligence (AI) may not appropriate, and classified as computational intelligence (CI) more telling. Evolutionary computation, artificial life, and some issues of the fuzzy logic system, are classified as computational intelligence. Despite the limits of computational intelligence and artificial intelligence is not obvious, however, discuss the difference and relationship is beneficial, logical thinking refers to the process according to the rules of logic reasoning; It will first information into the concept and symbol, and then, according to the symbolic operation logic reasoning according to the serial mode; This process can be written as a serial of instruction, let the computer to perform. However, visual thinking is the distributed storage of information together, the result is suddenly an idea or a solution to the problem. And this paper is devoted to general thoughts about neural network processing, as well as computer science and technology under the junior professional class "artificial intelligence" of the fourth algorithm experiment.

Keywords: Artificial intelligence, neural network, the perceptron model

1,神经网络的发展

20世纪50年代,Rosenblatt等人提出了感知器(神经网络)模型,并形成了连接主义学派。

1.1 连接主义观点核心
   智能的本质是连接机制,神经网络是一个由大量简单的处理单元组成的高度复杂的大规模非线性自适应系统。
 
1.2 模拟人脑的智能行为的四个层面
   •物理结构
   •计算模拟
   •存储与操作
   •训练

1.3人工神经网络
   神经网络是一个并行和分布式的信息处理网络。它是以处理单元为节点,用加权有向弧相互连接而成的有向图。处理单元是对生理神经元的模拟,而有向弧是对轴突-突触-树突对的模拟。有向弧的权重表示两处理单元间相互作用的强弱。它一般由大量神经元组成 
   •每个神经元只有一个输出,可以连接到很多其他的神经元
   •每个神经元输入有多个连接通道,每个连接通道对应于一个连接权系数

2.模型的建立

2.1 人工神经网络模型

2.2 响应函数的基本作用

–控制输入对输出的激活作用

–对输入、输出进行函数转换

–将可能无限域的输入变换成指定的有限范围内的输出


       

2.3 感知器模型

感知器是由美国计算机科学家罗森布拉特(F.Roseblatt)于1957年提出的。单层感知器神经元模型图:

2.4数学模型

3.感知器算法

3.1训练步骤

1)对于所要解决的问题,确定输入向量  X,目标向量T,由此确定维数及网络结构参数,n,m;

2)  参数初始化;

3)设定最大循环次数;

4)计算网络输出;

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

6)学习,并返回4。

3.2网络训练

自适应线性元件的网络训练过程可以归纳为以下三个步骤:

1)表达:计算模型的输出矢量A=W*P十B,以及与期望输出之间的误差E=T—A;

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

3)学习:采用W—H学习规则计算新的权值和偏差,并返回到1)。

4,问题引入

4.1问题描述
   现在来考虑一个较大的多神经元网络的模式联想的设计问题。输入矢量和目标矢量分别为:

P=

{

{1,-1,2},

{1.5,2,1},

{1.2,3,-1.6},

{-0.3,-0.5,0.9}

};

T=

{

{0.5,1.1,3,-1},

{3,-1.2,0.2,0.1},

{-2.2,1.7,-1.8,-1.0},

{1.4,-0.4,-0.4,0.6}

};

4.2解题思路

由输入矢量和目标输出矢量可得:输入向量个数 r=3,输出向量个数 s=4,样本数 q=4。

这个问题的求解同样可以采用线性方程组求出,即对每一个输出节点写出输入和输出之间的关系等式。

实际上要求出这16个方程的解是需要花费一定的时间的,甚至是不太容易的。

对于一些实际问题,常常并不需要求出其完美的零误差时的解。也就是说允许存在一定的误差。

在这种情况下,采用自适应线性网络求解就显示出它的优越性:因为它可以很快地训练出满足一定要求的网络权值。

5,程序设计

 1 #include<iostream>
 2 #include<ctime>
 3 #include<cmath>
 4 using namespace std;
 5
 6 const int max_learn_length = 100;        //最大学习次数
 7 const float study_rate = 0.2;            //学习率
 8 const float anticipation_error = 0.01;   //期望误差
 9 const int input = 3;     //三项输入
10 const int output = 4;    //四项输出
11 const int sample = 4;    //4组样本
12
13 float P[sample][input] =      //4组3项的输入矢量
14 {
15     {1,-1,2},
16     {1.5,2,1},
17     {1.2,3,-1.6},
18     {-0.3,-0.5,0.9}
19 };
20 float T[sample][output] =     //4组4项的期望输出矢量
21 {
22     {0.5,1.1,3,-1},
23     {3,-1.2,0.2,0.1},
24     {-2.2,1.7,-1.8,-1.0},
25     {1.4,-0.4,-0.4,0.6}
26 };
27
28 int main(int argc, char **argv)
29 {
30     float precision;            //误差精度变量
31     float W[input][sample];     //3项4组输入对应的网络权值变量
32     float B[sample];            //4组阈值变量
33     float A[sample];    //每组实际输出值
34     int ii, ij, ik, ic;
35
36     srand(time(0));             //初始化随机函数
37     for (ii = 0; ii<sample; ii++)
38     {
39         B[ii] = 2 * (float)rand() / RAND_MAX - 1;   //阈值变量赋随机值(-1,1)
40         for (ij = 0; ij<input; ij++)      //网络权值变量赋随机值
41         {
42             W[ij][ii] = 2 * (float)rand() / RAND_MAX - 1;
43         }
44     }
45     precision = FLT_MAX ;         //初始化精度值
46     for (ic = 0; ic < max_learn_length; ic++)     //最大学习次数内循环
47     {
48         if (precision<anticipation_error)   //循环剪枝函数
49         {
50             break;
51         }
52         precision = 0;
53         for (ii = 0; ii<sample; ii++)  //4组样本循环叠加误差精度
54         {
55             for (ij = 0; ij<output; ij++)  //计算一组中4项实际的输出
56             {
57                 A[ij] = 0.0;
58                 for (ik = 0; ik<input; ik++)
59                 {
60                     A[ij] += P[ii][ik] * W[ik][ij];
61                 }
62                 A[ij] += B[ij];
63             }
64             for (ij = 0; ij<output; ij++)   //通过学习率调整网络权值和阈值
65             {
66                 for (ik = 0; ik<input; ik++)
67                 {
68                     W[ik][ij] += study_rate*(T[ii][ij] - A[ij])*P[ii][ik];
69                 }
70                 B[ij] += study_rate*(T[ii][ij] - A[ij]);
71             }
72             for (ij = 0; ij<output; ij++)   //计算误差精度
73             {
74                 precision += pow((T[ii][ij] - A[ij]),2);
75             }
76         }
77     }
78     cout << "最大学习次数为:" << max_learn_length << endl;
79     cout << "完成目标的学习次数为:" << ic << endl;
80     cout << endl << "期望误差为:" << anticipation_error << endl;
81     cout << "达成目标学习后的精度为:" << precision <<endl<< endl;
82     cout << "学习后的网络权值为:" << endl;
83     for (ii = 0; ii<sample; ii++)       //输出学习后的网络权值
84     {
85         for (ij = 0; ij<input; ij++)    //4组样本每组3个输入
86         {
87             cout << W[ii][ij] << "   ";
88         }
89         cout << endl;
90     }
91     cout <<endl<< "学习后的阈值为:" << endl;
92      for (ii = 0; ii<output; ii++)       //输出学习后的阈值:四个样本输出
93     {
94         cout << B[ii] << "   ";
95     }
96     cout << endl<<endl;
97     system("pause");
98     return 0;
99 }
时间: 2024-11-05 16:12:53

基于感知器模型的线性神经网络的相关文章

RBF神经网络学习算法及与多层感知器的比较

对于RBF神经网络的原理已经在我的博文<机器学习之径向基神经网络(RBF NN)>中介绍过,这里不再重复.今天要介绍的是常用的RBF神经网络学习算法及RBF神经网络与多层感知器网络的对比. 一.RBF神经网络学习算法 广义的RBF神经网络结构如下图所示: N-M-L结构对应着N维输入,M个数据中心点centers,L个输出. RBF 网络常用学习算法 RBF 网络的设计包括结构设计和参数设计.结构设计主要解决如何确定网络隐节点数的问题.参数设计一般需考虑包括3种参数:各基函数的数据中心和扩展常

计算机潜意识- 单层神经网络(感知器)

1.引子 1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络.他给它起了一个名字--"感知器"(Perceptron)(有的文献翻译成"感知机",下文统一用"感知器"来指代). 感知器是当时首个可以学习的人工神经网络.Rosenblatt现场演示了其学习识别简单图像的过程,在当时的社会引起了轰动. 人们认为已经发现了智能的奥秘,许多学者和科研机构纷纷投入到神经网络的研究中.美国军方大力资助了神经网络的研究,并认为神经网络比

神经网络与人工智能No1-Rosenblatt感知器

     直入正题,首先要确定的是Rosenblatt感知器的应用范围是线性可分模型(通俗的讲就是在N维空间中存在一个超平面可以将整个模型一分为二)其作用就是分类,由一个具有可调突触权值和偏置的神经元组成. 模式:事务的标准样式. 感知器:感知器模型(神经元)+感知器算法(收敛). 建立在一个神经元上的感知器只能完成两类的模式分类,扩展多个神经元可完成多类的模式分类.

神经网络与机器学习笔记——Rosenblatt感知器

Rosenblatt感知器 感知器是用于线性可分模式(模式分别位于超平面两边)分类的最简单的神经网络模型,基本上由一个具有可调突触权值和偏置的神经元组成. Rosenblatt证明了当用来训练感知器的模式(向量)取自两个线性可分的类时,感知器算法是收敛的,并且决策面是位于两类之间的超平面.算法的收敛性称为感知器收敛定理.

Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

(一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为它导致数据的 过拟合(overfitting),不符合数据真实的模型.如下图的右图. 下面来讲一种非参数学习方法——局部加权回归(LWR).为什么局部加权回归叫做非参数学习方法呢?首先,参数学习方法是这样一种方法:在训练完成所有数据后得到一系列训练参数,然后根据训练参数来预测新样本的值,这时不再依赖

Coursera机器学习基石 第2讲:感知器

第一讲中我们学习了一个机器学习系统的完整框架,包含以下3部分:训练集.假设集.学习算法 一个机器学习系统的工作原理是:学习算法根据训练集,从假设集合H中选择一个最好的假设g,使得g与目标函数f尽可能低接近.H称为假设空间,是由一个学习模型的参数决定的假设构成的一个空间.而我们这周就要学习一个特定的H——感知器模型. 感知器模型在神经网络发展历史中占有特殊地位,并且是第一个具有完整算法描述的神经网络学习算法(称为感知器学习算法:PLA).这个算法是由一位心理学家Rosenblatt在1958年提出

ML(2)——感知器

感知器(PLA--Perceptron Learning Algorithm),也叫感知机,处理的是机器学习中的分类问题,通过学习得到感知器模型来对新实例进行预测,因此属于判别模型.感知器于1957年提出,是神经网络的基础. 感知器模型 以最简单的二分类为例,假设医院需要根据肿瘤患者的病患特x1肿瘤大小,x2肿瘤颜色,判断肿瘤是良性(+1)还是恶性(-1),那么所有数据集都可以在一个二维空间表示:如果能找到一条直线将所有1和-1分开,这个数据集就是线性可分的,否则就是线性不可分.将两个特征向量分

感知器与梯度下降

声明:本文由Ronny发表在http://www.cnblogs.com/ronny/p/ann_01.html ,如需转载请注明出处 一.前言 1,什么是神经网络? 人工神经网络(ANN)又称神经网络(NN),它是一种受生物学启发而产生的一种模拟人脑的学习系统.它通过相互连结的结点构成一个复杂的网络结构,每一个结点都具有多个输入和一个输出,并且该结点与其他结点以一个权重因子相连在一起.通俗来说,神经网络是一种学习器,给它一组输入,它会得到一组输出,神经网络里的结点相互连结决定了输入的数据在里面

Rosenblatt感知器

一.定义 Rosenblatt感知器建立在一个线性神经元之上,神经元模型的求和节点计算作用于突触输入的线性组合,同时结合外部作用的偏置,对若干个突触的输入项求和后进行调节. 二.基本计算过程 Rosenblatt感知器的基本计算步骤如下: (1)将数据作为输入送入神经元. (2)通过权值和输入共同计算诱导局部域,诱导局部域是指求和节点计算得到的结果,计算结果如下: (3)以硬限幅器为输出函数,诱导局部域被送入硬限幅器,形成最终的输出硬限幅器的工作原理如下. 硬限幅器输入为正时,神经元输出+1,反