感知机与BP神经网络

感知机与BP神经网络

感知器作为人工神经网络中最基本的单元,有多个输入和一个输出组成。虽然我们的目的是学习很多神经单元互连的网络,但是我们还是需要先对单个的神经单元进行研究。

感知机模型

感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别(取+1和-1)。

感知器定义

假设输入空间(特征向量)是 χ⊆Rn,输出空间为Y={+1,−1},输入x⊆χ表示实例的特征向量,对应于输入空间的点;输出 y⊆Y表示实例的类别,则由输入空间到输出空间的表达形式为:
f(x)=sign(w∗x+b)
称为感知机,其中w叫作权值,b叫作偏置。sign是符号函数,即:
sign(x)={−1 x<0 ,-1 x≥0}

感知器的网络模型的拓扑结构图

Alt

感知器算法主要流程

首先得到n个输入,再将每个输入值加权,然后判断感知器输入的加权和最否达到某一阀值v,若达到,则通过sign函数输出1,否则输出-1。
Alt
为了统一表达式,我们将上面的阀值v设为-w0,新增变量x0=1,这样就可以使用w0x0+w1x1+w2x2+…+wnxn>0来代替上面的w1x1+w2x2+…+wnxn>v。于是有:
Alt
从上面的公式可知,当权值向量确定时,就可以利用感知器来做分类。

感知器的权值

  1. 训练集线性可分时 --> 感知器训练法则
    为了得到可接受的权值,通常从随机的权值开始,然后利用训练集反复训练权值,最后得到能够正确分类所有样例的权向量。
  • 1 初始化权向量w=(w0,w1,…,wn),将权向量的每个值赋一个随机值。
  • 2 对于每个训练样例,首先计算其预测输出:
    在这里插入图片描述
  • 3 当预测值不等于真实值时则利用如下公式修改权向量:
    在这里插入图片描述各符号含义:在这里插入图片描述代表学习速率,t代表样例的目标输出,o代表感知器输出。
  • 4 重复2和3,直到训练集中没有被错分的样例。
  1. 训练集线性不可分时 --> delta法则(又叫增量法则, LMS法则,Adaline法则,Windrow-Hoff法则)
    由于在真实情况下,并不能保证训练集是线性可分的。因而,当训练集线性不可分时该如何训练感知器呢?这时我们使用delta法则,通过这种方式可以找出收敛到目标的最佳近似值,我们将训练误差函数定义为:
    在这里插入图片描述
    其中D:训练集合,td为目标输出,od为感知器输出.
    随机梯度下降算法过程如下:
  • 初始化权向量w,将权向量的每个值取一个随机值。
  • 对每个训练样例,分别执行以下操作:
      * 通过感知器得到样例的输出o。
      * 根据感知器的输出,修改权向量w。
    在这里插入图片描述
  • 重复第2步,当训练样例的误差率小于设定的阀值时,算法终止。
    算法条件:误差损失函数需要对权向量可微;假设空间包含连续参数化的假设。
    可能存在的问题:若误差曲面有多个局部极小值,则不能保证达到全局最优。

梯度下降法则的推导

梯度下降算法的核心就是每次向损失函数下降最陡峭的方向移动,而最陡峭的方向通常就是损失函数对权向量求偏导数得到的向量的反方向。
在这里插入图片描述
逐个计算每个分量
在这里插入图片描述
每次的权重更新量为:
在这里插入图片描述
此方法将所有训练集权值计算了一个总和,然后将权值更新。此方法更新依次权值需要将所有训练集全部训练一次,故而速度较慢,效率较低。因为速度慢所以有了随机梯度下降算法,权向量更新公式为:
在这里插入图片描述
它在每个样例中迭代的过程中都会进行权值更新,通过这种方式能更加灵活的调整权值,使得权值以更快的速度收敛。

神经网络

定义

简单来说就是将单个感知器作为一个神经网络节点,然后用此类节点组成一个层次网络结构,我们称此网络即为人工神经网络。当网络的层次大于等于3层(输入层+隐藏层(大于等于1)+输出层)时,我们称之为多层人工神经网络。

神经元的选择

由于sign函数时非连续函数,这使得它不可微,因而不能使用上面的梯度下降算法来最小化损失函数。增量法每个输出都是输入的线性组合,这样当多个线性单元连接在一起后最终也只能得到输入的线性组合,这和只有一个感知器单元节点没有很大不同。
sigmoid函数(Logistic函数)。
在这里插入图片描述
公式:
在这里插入图片描述
其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。下图展示了一个具有一个隐含层的神经网络
在这里插入图片描述
公式:
在这里插入图片描述
同理,可以拓展到2,3…个隐含层

感知器与BP神经网络代码实现

% 第一章  感知器
% 1. 感知器神经网络的构建
% 1.1  生成网络
net=newp([0 2],1);%单输入,输入值为[0,2]之间的数
inputweights=net.inputweights{
   1,1};%第一层的权重为1
biases=net.biases{
   1};%阈值为1
% 1.2  网络仿真

net=newp([-2 2;-2 2],1);%两个输入,一个神经元,默认二值激活
net.IW{
   1,1}=[-1 1];%权重,net.IW{
   i,j}表示第i层网络第j个神经元的权重向量
net.IW{
   1,1}
net.b{
   1}=1;
net.b{
   1}
p1=[1;1],a1=sim(net,p1)
p2=[1;-1],a2=sim(net,p2)
p3={
   [1;1] [1 ;-1]},a3=sim(net,p3) %两组数据放一起
p4=[1 1;1 -1],a4=sim(net,p4)%也可以放在矩阵里面
net.IW{
   1,1}=[3,4];
net.b{
   1}=[1];
a1=sim(net,p1)
% 1.3  网络初始化
net=init(net);
wts=net.IW{
   1,1}
bias=net.b{
   1}
% 改变权值和阈值为随机数
net.inputweights{
   1,1}.initFcn='rands';
net.biases{
   1}.initFcn='rands';
net=init(net);
bias=net.b{
   1}
wts=net.IW{
   1,1}
a1=sim(net,p1)

% 2. 感知器神经网络的学习和训练
% 1 网络学习
net=newp([-2 2;-2 2],1);
net.b{
   1}=[0];
w=[1 -0.8]
net.IW{
   1,1}=w;
p=[1;2];
t=[1];
a=sim(net,p)
e=t-a
help learnp
dw=learnp(w,p,[],[],[],[],e,
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值