人工神经网路学习笔记_感知机_前馈网络

    感知机是使用特征向量来表示的前馈式人工神经网络,它是一种二元分类器,把矩阵上的输入(实数值向量)映射到输出值上(一个二元的值)。

    是实数的表示权重的向量,是点积。是偏置,一个不依赖于任何输入值的常数。偏置可以认为是激励函数的偏移量,或者给神经元一个基础活跃等级。

    (0 或 1),用于对进行分类,看它是肯定的还是否定的,这属于二元分类问题。如果是负的,那么加权后的输入必须产生一个肯定的值并且大于,这样才能令分类神经元大于阈值0。从空间上看,偏置改变了决策边界的位置(虽然不是定向的)。
    由于输入直接经过权重关系转换为输出,所以感知机可以被视为最简单形式的前馈式人工神经网络。    


1,传输函数

    感知机采用的传递函数可以是对称硬极限传输函数hardlims,也可以是硬极限传递函数hardlim。


2,判定边界——决策边界

   每个神经元都有一个 判定边界,它将输入分为不同的类型。判定边界,由那些使得净输入为零的输入向量确定,可能是一条线(输入变量个数为2时),也可能是一个面(当输入变量个数>=3时)。判定边界的位置随着偏置值b的改变而移动,如果偏置为0,则边界必定通过输入空间的坐标原点!


3,权值向量

    权值向量总是和判定边界正交,而且总是指向神经元输出为1的区域。


4,神经元数目

    由于单个神经元只能将模式分类两类,如果需要分成更多的类型,就要更多的神经元!例如使用s个神经元时,共有2^s种可能的类别!


5,学习规则

    感知机的学习规则是有监督训练的一种。公式表述如下所示(详细推导过程请看《神经网络设计》):


6,局限性

    感知机只能对那些能够被线性边界分开的输入变量进行分类,这样的向量称为是线性可分的。


7,Matlab实例1_引用自参考资料[6]

%类别1,每个输入向量2个元素
w1=[0.1 6.8 -3.5 2.0 4.1 3.1 -0.8 0.9 5.0 3.9; 
    1.1 7.1 -4.1 2.7 2.8 5.0 -1.3 1.2 6.4 4.0];

%类别2
w2=[7.1 -1.4 4.5 6.3 4.2 1.4 2.4 2.5 8.4 4.1;
    4.2 -4.3 0.0 1.6 1.9 -3.2 -4.0 -6.1 3.7 -2.2]; 

%normalized,标准化 
ww1=[ones(1,size(w1,2)); w1]; %在上面加一行1,表示偏置输入为1
ww2=[ones(1,size(w2,2)); w2]; 

%这里是一个很巧妙的处理,将类别2的输入取反,实际上就是将其传递函数结果取反!
%ww2取反后和ww1是同一类!也就是说,ww2和ww1是不同的类。
%X只有一类,包括了ww1和取反后的ww2!
X=[ww1 -ww2];

%initializtion of W&k
%k=1;%表示一共重置了几次权值
k=0;
W=ones(size(X,1),1); %权值向量,包含了偏置量1
ok=0;

%循环体设计
while(ok==0)
        for i=1:size(X,2)
            if (W'*X(:,i)<0) %将W看作只有一个类别对待,方便统一处理!
                k=k+1;      
                W=W+X(:,i); %感知机学习规则:Wnew=Wold+p
                break;
            else
                if (i==size(X,2)) % 如果到达最后一行,则ok,停止while循环
                    ok=1;
            end
        end
    end
end

%图示
figure(1) 
plot(w1(1,:),w1(2,:),'r.') 
hold on 
plot(w2(1,:),w2(2,:),'*') %样本

xmin=min(min(w1(1,:)),min(w2(1,:))); 
xmax=max(max(w1(1,:)),max(w2(1,:))); 

ymin=min(min(w1(2,:)),min(w2(2,:))); 
ymax=max(max(w1(2,:)),max(w2(2,:))); 

xindex=xmin-1:(xmax-xmin)/100:xmax+1;

%W(1)是偏置值,W(2:3)是权值向量
%下面的式有判别边界公式Wp+b=0推导得!
yindex=-W(2)*xindex/W(3)-W(1)/W(3); 

plot(xindex,yindex)%分类面


8,Matlab工具箱实例_引用参考资料[8]

close all;
clear all;
clc;

%给定训练样本数据
P= [-0.4 -0.5 0.6;
    0.9 0 0.1;];
T= [1 1 0]; %给定样本数据所对应的类别,用1和0来表示两种类别

%创建一个有两个输入、样本数据的取值范围都在[-1,1]之间,并且
%网络只有一个神经元的感知器神经网络
net=newp([-1 1;-1 1],1); 

net.trainParam.epochs = 20; %设置网络的最大训练次数为20次
net=train(net,P,T);        %使用训练函数对创建的网络进行训练
Y=sim(net,P)               %对训练后的网络进行仿真
E1=mae(Y-T)        %计算网络的平均绝对误差,表示网络错误分类
Q=[0.6 0.9 -0.1; 
    -0.1 -0.5 0.5]; %检测训练好的神经网络的性能
Y1=sim(net,Q)        %对网络进行仿真,仿真输出即为分类的结果
figure;              %创建一个新的绘图窗口
plotpv(Q,Y1);        %在坐标图中绘制测试数据
plotpc(net.iw{1},net.b{1}) %在坐标图中绘制分类线

网络训练过程截图:

人工神经网路学习笔记_感知机_前馈网络_第1张图片


仿真结果截图:

人工神经网路学习笔记_感知机_前馈网络_第2张图片



参考资料

[1]《神经网络设计》,机械工业出版社

[2]感知机_维基百科http://zh.wikipedia.org/wiki/感知器

[3]感知机学习算法实现http://blog.csdn.net/cscmaker/article/details/8296171

[4]感知机的学习算法 C++http://hi.baidu.com/fishkingwife/item/d64ef98ecb8fb0814414cfda

[5]感知器网络学习算法——delta学习算法MATLAB程序实现http://hi.baidu.com/lskyp/item/e78debd519659ecb1b72b430

[6]Matlab简单感知器判决实现代码http://www.ilovematlab.cn/thread-44920-1-1.html

[7]感知机学习算法VC++实现http://blog.sina.com.cn/s/blog_61d013150100tpda.html

[8]单层感知器的MATLAB实现http://blog.csdn.net/henhen2002/article/details/5416574

你可能感兴趣的:(人工神经网路学习笔记_感知机_前馈网络)