本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com
本文《在二分类感知机原理》的基础上,
进一步介绍matlab工具箱中的感知机神经网络(newp)
通过本文,理解matlab感知机神经网络的用途、原理、求解方法。
最后,本文给出matlab工具箱中的一个newp的使用Demo,
而在《重写newp》中,则根据本文介绍的原理,自写代码重现matlab工具箱中的newp函数。
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]这类的格式。
重新强调,下面统一默认为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的梯度为:
上式也可以改写成如下形式:
其中,是网络对的预测值。
感知机采用逐样本训练方法,具体训练流程如下:
1、初始化
将w和b的元素全部初始化为0。
2、逐样本训练
逐个样本训练w,b:
其中,yi为当前训练样本的真实y值,pi为网络对当前训练样本的预测值
3、检测是否终止训练
如果总体预测误差达到目标,或达到最大训练步数,则终止训练,否则重复2
误差的评估:
4、输出结果
输出 网络参数w,b 和网络最终的预测误差
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