感知器算法

前言:

其实作者之前一直没怎么重视过感知器算法,只是在很早以前学习Dnn时,一笔带过,直到最近,看了一篇大神的文章,深有启发,这里结合作者自己所用所学,对感知器算法进行一次系统的阐述。感知器算法最早于1957年作为一种分类算法提出,是最古老的分类算法,虽然其泛化能力不强,与当今普遍使用模型相比,其分类任务做的并不是很多。但是,最为一种原始的分类算法,我们有必要研究其模型架构,模型推导,模型学习过程等等。同时,按照刘建平老师的提示,感知器的学习,对支持向量机有莫大的帮助。在看完刘老师的文章后,作者发现,确实如此。广大读者如果了解支持向量机,看完该文章,你就会发现其中的奇妙之处。

一:感知机算法模型

1,思想:在二位空间内,尝试找到一条直线,使得将样本进行二分类,放在高维空间中,就是找到一个超平面,将所有二元类别进行分类,
2,前提:所有样本数据可分,但这也严重限制了感知机的使用场景,他的竞争对手在面对线性不可分的情况时,比如SVM在面对线性不可分时可以使用核函数来实现数据高维空间可分,神经网络可以使用隐层和非线性激活函数来达到数据可分。
3,模型:感知机是二分类的线性分类模型,由输入特征 x 得到输出类别1或-1的映射函数:
在这里插入图片描述
4,模型数学解释
假设我们有m个样本,每个样本对应n个维度和一个二元类别输出,如下:
在这里插入图片描述
我们的目的是找到一个超平面,即:
在这里插入图片描述
让其中一类样本满足θ0+θ1x1+θ2x2…θnxn>0,让另一类样本都满足θ0+θ1x1+θ2x2…θnxn<0,从而达到线性可分,如果数据线性可分,那么这个超平面肯定不是唯一的,也就是说感知机模型可以有多个解。
为了简化这个超平面的写法,我们增加一个x0 = 1,这样,这个超平面可以写成如下:
在这里插入图片描述
进一步用向量表示为xθ = 0,其中θ为(n+1)x1的向量,x为(n+1)x1的向量, * 为内积,后面我们都用向量来表示超平面。从而感知机的模型可以定义为y = sign(θx),其中sign为符号函数,即:
在这里插入图片描述

二:感知机模型损失函数

为了方便后面定义损失函数,我们将满足θ*x>0的样本输出类别取值为1,将满足θ *x<0的样本输出类别取值为-1,这样取值的好处在于,后面正确分类的样本就会满足y *x *θ>0,而错误分类的样本则满足y * θ * x<0,我们损失函数的优化目标就是期望所有误分类样本到超平面的距离之和最小。
由于y * θ * x<0 所以对每个误分类样本i,到超平面的距离为:
在这里插入图片描述
在这里插入图片描述

其中||θ 2 ||指的是L2范数。假设我们所有误分类样本的集合为M,则所有误分类样本到超平面的距离为:
在这里插入图片描述
这样我们就得到了感知机模型的初步损失函数,我们研究可以发现,分子分母同时都有θ ,当分子的θ 扩大n倍时,分母的L2范数也会扩大n倍,也就是说分子分母有固定的倍数关系,那么我们可以固定分子或者分母为1, 然后求另一个即分子自己或者分母的倒数的最小化作为损失函数(弱固定分子为1,就求分母的倒数最小化来作为损失函数,如果固定分母为1,就求分子的最小化来作为损失函数),在感知机模型中,我们采用固定分母为1,保留分子作为损失函数,所以,最终的损失函数简化为:
在这里插入图片描述
如果大家了解过支持向量机,就发现支持向量机采用的是固定分子为1,然后求1/||θ||2的最大化。采用不同的损失函数主要与它的后面的优化算法有关系。

三:感知机模型的损失函数优化方法

从上的的推导数学过程可以得到感知器算法的损失函数,这个损失函数可以用梯度下降和拟牛顿法来结局,常用的是梯度下降法。但是普通的梯度下降法BGD是行不通的,原因在于我们的损失函数有限定,只有误分类的样本才能参与损失函数的迭代优化,所以我们只能采用随机梯度下降法SGD或者小批量梯度下降法MBGD。感知机算法采用的是SGD,这意味着我们每次需要用一个误分类的样本点来更新梯度
损失函数基于θ 的偏导数为:
在这里插入图片描述
θ的梯度下降迭代公式应该为:
在这里插入图片描述
由于我们采用随机梯度下降,所以每次仅仅采用一个误分类的样本来计算梯度,假设采用第i个样本来更新梯度,则简化后的θ向量的梯度下降迭代公式为:
在这里插入图片描述
其中α为步长,y(i)为样本输出1或者-1,x(i)为(n+1)x1的向量。

四. 感知机模型的算法实现步骤

这里我们对感知机模型基于梯度下降来求θ的算法来做一个总结
算法的输入为m个样本,每个样本有n个维度并且对应一个二分类输出–1或者-1,如下:
在这里插入图片描述
输出为超平面的模型系数θ向量
算法的执行步骤如下:
1,初始化所有x0为1,选定θ的初始值和步长α的初始值,可以将初始θ设置为0,α设置为1,由于感知机的解不唯一,使用这两个初始值会影响最终的θ的迭代结果。
2,在训练集中选择一个误分类点,用向量表示即(x(i),y(i)),这个点应该满足:y(i)θ∙x(i)≤0
3,对向量θ进行一次随机梯度下降迭代,跟心θ的梯度
4,检查训练集中是否还有误分类点,如果没有,算法结束,此时的θ向量则为最终结果,如果有,继续第2步。

五:对偶形式的感知机模型

上一节的感知机模型的算法形式我们一般称为感知机模型的算法原始形式。对偶形式是对算法执行速度的优化。具体是怎么优化的呢? 
通过上一节感知机模型的算法原始形式θ=θ+αy(i)x(i)可以看出,我们每次梯度的迭代都是选择的一个样本来更新θ向量。最终经过若干次的迭代得到最终的结果。对于从来都没有误分类过的样本,他被选择参与θ迭代的次数是0,对于被多次误分类而更新的样本j,它参与θ迭代的次数我们设置为mj。如果令θ向量初始值为0向量, 这样我们的θ向量的表达式可以写为:
在这里插入图片描述
其中mj为样本(x(j),y(j))在随机梯度下降到当前的这一步之前因误分类而更新的次数。
 每一个样本(x(j),y(j))的mj的初始值为0,每当此样本在某一次梯度下降迭代中因误分类而更新时,mj的值加1。
 在这里插入图片描述
 由于步长α为常量,我们令βj=αmj,这样θ向量的表达式为:
 在这里插入图片描述
 在每一步判断误分类条件的地方我们用y(i)θ∙x(i)<0的变种:
 在这里插入图片描述
来判断误分类。注意到这个判断误分类的形式里面是计算两个样本x(i)和x(j)的内积,而且这个内积计算的结果在下面的迭代次数中可以重用。如果我们事先用矩阵运算计算出所有的样本之间的内积,那么在算法运行时, 仅仅一次的矩阵内积运算比多次的循环计算省时。 计算量最大的判断误分类这儿就省下了很多的时间,,这也是对偶形式的感知机模型比原始形式优的原因。
样本的内积矩阵称为Gram矩阵,它是一个对称矩阵,记为 G=[x(i)∙x(j)],这里,我们给出对偶形式的感知机模型的实现步骤:
算法的输入为m个样本,每个样本对应于n维特征和一个二元类别输出1或者-1,如下:
在这里插入图片描述
输出为分离超平面的模型系数θ向量
算法的执行步骤如下:

1) 定义所有x0为1,步长α初值,设置β的初值0。可以将α设置为1。要注意的是,由于感知机的解不唯一,使用的步长初值会影响θ向量的最终迭代结果。

2) 计算所有样本内积形成的Gram矩阵G。
 2) 在训练集里面选择一个误分类的点(x(i),y(i)),这个点应该满足
 在这里插入图片描述
在检查是否满足时可以通过查询Gram矩阵的gij 的值来快速计算是否小于0。
 3) 对β向量的第i个分量进行一次更新:βi=βi+α
 4)检查训练集里是否还有误分类的点,如果没有,算法结束,此时的θ向量最终结果为下式。如果有,继续第2步。
 在这里插入图片描述
  其中βj 为β向量的第j个分量。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值