神经网络

【模型】一篇入门之-感知机神经网络Perceptron

作者 : 老饼 发表日期 : 2023-09-22 15:49:09 更新日期 : 2024-10-19 09:12:54
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



感知机(perceptron)由Rosenblatt在1957提出,用于解决二分类问题,是BP与SVM的前身

本文讲解感知机神经网络的模型、损失函数,以及训练原理,并展示一个感知机实现代码例子

通过本文,可以快速了解什么是感知机神经网络,以及如何使用感知机神经网络对样本进行二分类





   01. 什么是感知机模型   




本节讲解感知机神经网络的拓扑结构和模型数学表达式




  感知机的模型数学表达式  


感知机神经网络(perceptron)是一种较早的神经网络,它用于解决样本二分类问题
 
 感知机神经网络的拓扑结构
 
感知机神经网络是一个两层的神经网络,只有输入层与输出层
感知机神经网络的拓扑结构如下:

 感知机神经网络的拓扑结构
感知机神经网络支持多个输出,每个输出对应一个二分类问题
   感知机神经网络的模型表达式
  感知机神经网络的数学表达式为:
 

 其中,hardlim是感知机的激活函数:
       
当第i个输出为1时,则代表样本在第i个二分类问题中属于正样本
备注:hardlim也可替换为hardlims,






  02. 感知机神经网络的损失函数  




本节介绍matlab中的感知机神经网络的损失函数与训练方法




     感知机神经网络的损失函数      


感知机的损失函数如下:
 
 损失函数的意义如下:
 
1. 当模型对第i个样本预测正确时:                                                                 
       为正,为 1,即为 1,则为负
         为负,为 0,即为-1,则 为负
  2. 当模型对第i个样本预测错误时:                                                                  
        为正,为0,即为-1, 则为正
        为负,为1,即为 1, 则为正
 3. 综合上述情况,则有:                                                                               
                        预测正确时,为负,预测错误时,为正
即模型越正确L(W,b)就越小,模型越错误L(W,b)越大





      感知机神经网络的训练      


感知机神经网络用单样本训练,即逐个样本训练W、b
  感知机的训练算法简述如下:
 一、 逐个样本训练                                                                
 往当前样本的负梯度方向更新W,b                  
(1) 计算当前样本的梯度:                                         
                         
(2) 更新W、b :                                                      
                                                 
 二、检查退出训练条件                                                           
达到最大训练次数或误差已极小,则退出训练          








     03. 感知机神经网络-代码实现     




本节展示使用matlab工具箱训练一个感知机神经网络用于解决二分类问题





      感知机神经网络-代码实现    


在matlab中使用newp来构建一个感知机模型,下面展示一个实现例子
具体代码如下:
% 感知机神经网络newp
% 版本:matlab 2018a
% 训练数据
% ----------训练数据-------------------
X = [0 0 0.2 1 1 0.8; 0 1 0.5 0 1 0.3];
y = [0 0 0 1 1 1 ];

%----使用工具箱训练一个感知机神经网络---------
net = newp(X,y);              % 建立感知机神经网络
net = train(net,X,y);         % 训练感知机神经网络
w   = net.iw{1};              % 感知机的权重
b   = net.b{1};               % 感知机的阈值
py  = sim(net,X);             % 使用训练好的感知机进行预测

%-------------打印权重、阈值和预测结果--------
disp('感知机权重')
w
disp('感知机阈值')
b
disp('感知机预测结果')
py
% -------------绘制结果----------------------
x_line = [min(X(1,:)),max(X(1,:))];
y_line =(-w(1)*x_line-b)/w(2);
plot(x_line,y_line)
hold on
plot(X(1,y==1),X(2,y==1),'bo')
hold on
plot(X(1,y==0),X(2,y==0),'k*')
hold on
axis([min(X(1,:))-1 max(X(1,:))+1 min(X(2,:))-1 max(X(2,:))+1])
运行结果如下 
一、 训练好的感知机的权重、阈值和预测结果:                         
 感知机神经网络代码运行结果

二、训练样本与训练好的感知机(分割线) :                                 
           感知机神经网络的训练效果 
从结果中可以看到,感知机所代表的分割线很已好地把两类样本进行区分
 由于感知机神经网络模型的表达式为:
    
 代入上述训练好的权重阈值,则得到最终终的模型为:
  
使用时用上式预测就可以啦~














 End 







联系老饼