神经网络-感知器-matlab实现

1.基本原理

 

      神经网络里最简单的模型,就是感知器。感知器可以实现N维空间的线性划分。如二维空间,下图就是用一条直线将(0 0)分为一类,其余四点为一类。实现了与门。

image

      如果要将以上四点划分为(0 1)(1 0)为一类,(1 1)(0 0)为一类,显然是无法用直线将其分开。如果是三维空间,就是平面划分。如果N维,即超平面。

      下图为一个神经元模型,输入为pX1的向量,输出为a。感知器工作时,首要要学习,也就是对w和b进行调整。首先要有n个P向量,和一个你期望的该p向量得到的t值。w和b是不为0的随机值,训练的目的就是调整w和b的值,使e=t-a的值不断接近0。当所有样本输出的值都等于t时,学习结束。

image

image

     这是,给定相关值,你就可以得到你期望的结果。其中wp+b累加输出的值n,要经过一个函数,这个函数根据需要选取,并不一定要取阶跃函数。

 

     下图可以看出在二维空间了w和b分别是如何影响划分的直线的。

image

 

2.单层感知器

 

       以下图为感知器基本模型,摘自matlab的帮助文档。

image

上图有以下几个要点:

 

2.1 R为输入个数,S为单层神经元的个数。感知器里可以有s个神经元,但神经元之间无信息传递,之间互不影响。

2.2 输出是sX1的a向量,实现了对RX1的p向量的s次在R维空间的线性二划分。

 

综合以上分析,可以看出神经网络设计的重点:

 

2.1 如何将神经元相互联系起来,即网络的设计;

2.2 选择什么样的方法调整每个神经元的w和b值,该算法必须收敛,即在有限步骤内,让误差e趋近0;

2.3 每个神经元选择什么样的函数得到a输出;

 

3. 算法实现(matlab)

其中P为RXN输入矩阵,T为SXN的目标矩阵;

R为输入个数,N为训练的样本数;

S为神经元个数;

repeat为最大迭代次数;W b e为经过训练得到的W b e;如果线性可分的话,并在repeat步类收敛,e就是0。

 

   1:  function [W b e] = perceptron(P, T, repeat)
   2:  switch nargin
   3:      case 0
   4:      case 1
   5:          error('Must enter P and T');
   6:      case 2    
   7:          repeat = 10000;
   8:  end
   9:  [r n]=size(P);
  10:  s =size(T,1);
  11:  W=ones(s,r);
  12:  b=ones(s,1);
  13:  e=ones(s,n);
  14:  for i=1:repeat
  15:      index=mod(i,n); 
  16:      if(index == 0)
  17:          index = 4;
  18:      end
  19:      p=P(:,index);
  20:      t=T(:,index);
  21:      a= W*p + b;
  22:      for j=1:s
  23:          if a(j) >= 0
  24:              a(j) = 1;
  25:          else
  26:              a(j) = 0;
  27:          end
  28:      end
  29:      %e:s by n
  30:      e(:,index)=(t-a)*0.5;
  31:      W=W+e(:,index)*p';
  32:      b=b+e(:,index);
  33:      if(e == 0)
  34:          break;
  35:      end
  36:  end
  37:  end
 
     这里需要说明一下w和b是如何调整的,即31行。新的权重值为旧的加上误差值乘以输入,思想很简单。即用误差调整w和b,显然误差为0,就无调整。不为0,就朝着使误差减小的方向调整,即负反馈的思想。乘以输入,是对调整的修正,使调整更加迅速。可以设想,如果一个输入非常小,一个非常大,那输入小的增量也要小,大的增量也要大。如果都大,那就容易产生震荡。如果小,收敛就很慢,需要学习的时间就会变得很长。
 
 

转载于:https://www.cnblogs.com/gghost/archive/2013/03/28/2986087.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值