老饼讲解-神经网络
自实现-感知机
感知机
感知机神经网络原理
作者 : 老饼 日期 : 2022-06-21 15:52:50 更新 : 2022-06-29 01:28:20
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com



本文《在二分类感知机原理》的基础上,

进一步介绍matlab工具箱中的感知机神经网络(newp)

通过本文,理解matlab感知机神经网络的用途、原理、求解方法。

最后,本文给出matlab工具箱中的一个newp的使用Demo,

而在《重写newp》中,则根据本文介绍的原理,自写代码重现matlab工具箱中的newp函数。





  01. matlab中的感知机神经网络  


matlab中的感知机神经网络是由感知机演变而来,

它是一个两层的神经网络,只有输入层与输出层。


   (一) 感知机神经网络的拓扑结构   


这里举例说明,
一个2输入3输出的感知机神经网络拓扑图如下:



输出层的激活函数支持hardlim和hardlims,两者的区别如下:




当输出层的激活函数为hardlim每个输出的输出值是0或1,
而当输出层的激活函数为hardlims每个输出的输出值是-1或1。
mamtlab中默认激活函数为hradlim



   (二) 感知机神经网络的数学表达式   


激活函数为hardlim时:



 
激活函数为hardlims时:


由于matlab的默认激活函数为hardlim,

而hardlim和hardlims两者没有本质的区别,下面下我们只介绍hardlim。



  (三) 辨识:与二分类感知机的区别  


(1) 上篇感知机介绍的为二分类,只有一个输出,而这里的神经网络支持多输出。                  
(2) matlab感知机神经网络默认使用的激活函数为hardlim,而上篇的二分类感知机是hardlims

总的来说,matlab的感知机神经网络默认输出格式为one-hot编码,即[0 1 0 0]这类的格式。




  02. matlab中的感知机的训练方法  


重新强调,下面统一默认为hardlim激活函数,即输出为{0,1}。


   (一) 感知机神经网络的训练目标-误差函数   


感知机的误差评估函数为预测错误样本个数的占比:


其中,
m:输出个数                                                 
n:样本个数                                                  
 :第i个样本的第j个输出。                         
:网络对第i个样本第j个输出的预测值。    

感知机的训练目标就是找出一组w,b,使E最小化。



   (二) 损失函数   


感知机神经网络的训练可以使用梯度下降法,
但由于误差评估函数,不方便求导,
所以先构造一个与误差评估函数相关的损失函数,
然后用损失函数的梯度来引导w,b的调整。


可以用以下函数作为损失函数,来引导w,b的迭代方向。




上式的意义如下:

(1) 当网络对第i个样本预测正确时:
为正,为 1,即为1, 则为负
为负,为 0,即为-1, 则 为负

(2) 当网络对第i个样本预测错误时:
为正,为0,即为-1, 则为正
为负,为1,即为1, 则为正
总的来说,
预测正确时,为负,
预测错误时,为正,
即,网络越正确,L(w,b)越小,网络越错误,L(w,b)越大。
则我们要令L更小,只要往w和b的负梯度方向调整即可。



   (三) wb的梯度   


可算得损失函数L中 w 和 b 的梯度如下:

(1) w的梯度


(2) b的梯度



   (四) 单样本时w,b的梯度   


感知机一般用单样本训练,
由上可算得对于单个样本训练时,w,b的梯度为:





上式也可以改写成如下形式:




其中,是网络对的预测值。




  03. 算法流程  


感知机采用逐样本训练方法,具体训练流程如下:



1、初始化

将w和b的元素全部初始化为0。


2、逐样本训练

逐个样本训练w,b:


其中,yi为当前训练样本的真实y值,pi为网络对当前训练样本的预测值


3、检测是否终止训练

如果总体预测误差达到目标,或达到最大训练步数,则终止训练,否则重复2

误差的评估:


4、输出结果

输出 网络参数w,b 和网络最终的预测误差




  04. matlab工具箱使用说明与例子  


2014b版matlab实测已跑通


% 训练数据
X = [0 0 1 1; 0 1 0 1];
y = [0 1 1 1;];

%训练
net = newp(X,y);             % 建立网络
[net,tr]  = train(net,X,y);  % 训练网络

%预测
py = sim(net,X) %使用网络进行预测






 End 






联系小饼