打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
机器学习十七:感知机
AI

  菌

  感知机可以说是最古老的分类方法之一了,今天看来它的分类模型在大多数时候泛化能力不强,但是它的原理却值得好好研究。

  因为研究透了感知机模型,既可以发展成支持向量机(通过简单地修改一下损失函数)、又可以发展成神经网络(通过简单地堆叠),所以它也拥有一定的地位。

  所以这里对感知机的原理做一个简介

  感知机模型

  感知机的思想很简单,比如我们在一个平台上有很多的男孩女孩,感知机的模型就是尝试找到一条直线,能够把所有的男孩和女孩隔离开。下面这张动图或许能够给观众老爷们一些直观感受:


  放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有的二元类别隔离开。

  当然你会问,如果我们找不到这么一条直线的话怎么办?找不到的话那就意味着类别线性不可分,也就意味着感知机模型不适合你的数据的分类。

  使用感知机一个最大的前提,就是数据是线性可分的。这严重限制了感知机的使用场景。它的分类竞争对手在面对不可分的情况时,比如支持向量机可以通过核技巧来让数据在高维可分,神经网络可以通过激活函数和增加隐藏层来让数据可分。

  用数学的语言来说,如果我们有m个样本,每个样本对应于n维特征和一个二元类别输出,如下:


  我们的目标是找到这样一个超平面,即:


  让其中一种类别的样本都满足


  让另一种类别的样本都满足


  从而得到线性可分。如果数据线性可分,这样的超平面一般都不是唯一的,也就是说感知机模型可以有多个解。

  为了简化这个超平面的写法,我们增加一个特征x0=1 ,这样超平面为


  进一步用向量来表示为:


  ,其中θ为(n+1)x1的向量,x为(n+1)x1的向量, ∙.

  后面我们都用向量来表示超平面。

  但除了 θ 称为权值,还有 b 称为偏置,故超平面的完整表达为:θ*x+b=0

  而感知机的模型可以定义为y=sign(θ∙x+b) 其中:


  如果我们将sign称之为激活函数的话,感知机与logistic regression的差别就是感知机激活函数是sign,logistic regression的激活函数是sigmoid。

  sign(x)将大于0的分为1,小于0的分为-1;sigmoid将大于0.5的分为1,小于0.5的分为0。因此sign又被称为单位阶跃函数,logistic regression也被看作是一种概率估计。


  感知机代价函数

  好了,上面我们已经知道感知机模型了,我们也知道他的任务是解决二分类问题,也知道了超平面的形式,那么下面关键是如何学习出超平面的参数w,b,这就需要用到我们的学习策略。

  我们知道机器学习模型,需要首先找到损失函数,然后转化为最优化问题,用梯度下降等方法进行更新,最终学习到我们模型的参数w,b。

  我们很自然的会想到用误分类点的数目来作为损失函数,是的误分类点个数越来越少嘛,感知机本来也是做这种事的,只需要全部分对就好。

  但是不幸的是,这样的损失函数并不是w,b连续可导(你根本就无法用函数形式来表达出误分类点的个数),无法进行优化。

  于是我们想转为另一种选择,误分类点到超平面的总距离(直观来看,总距离越小越好):

  距离公式如下:


  而我们知道每一个误分类点都满足


  因为当我们数据点正确值为+1的时候,你误分类了,那么你判断为-1,则算出来(w*x0+b)<>-yi(w*x+b)>0

  当数据点是正确值为-1的时候,你误分类了,那么你判断为+1,则算出来(w*x0+b>0),所以满足-yi(w*x+b)>0

  则我们可以将绝对值符号去掉,得到误分类点的距离为:


  因为你知道,所以可以直接将绝对值去掉。那么可以得到总距离为(其中M为误分类点的数目):


  这样我们就得到了初步的感知机模型的损失函数。

  不考虑w范数分之一,我们可以得到损失函数为(之后我们会详细介绍范数):


  总结一下!

  感知机的模型是f(x)=sign(w*x+b),它的任务是解决二分类问题,要得到感知机模型我们就需要学习到参数w,b。

  则这个时候我们需要一个学习策略,不断的迭代更新w,b,所以我们需要找到一个损失函数。

  很自然的我们想到用误分类点的数目来表示损失函数,但是由于不可导,无法进行更新,改为误分类点到超平面的距离来表示,然后不考虑1/||w||,得到我们最终的损失函数!


  为什么可以不考虑1/||w||,不用总距离表达式作为损失函数呢?

  感知机的任务是进行二分类工作,它最终并不关心得到的超平面离各点的距离有多少(所以我们最后才可以不考虑||w||),只是关心我最后是否已经正确分类正确(也就是考虑误分类点的个数),比如说下面红色与绿线,对于感知机来说,效果任务是一样好的。


  但是在SVM的评价标准中(绿线是要比红线好的,这个在学习向量机时你就会明白)

  所以我们可以不考||w||,直接去掉它,因为这个时候我们只考虑误分类点,当一个误分类点出现的时候,我们进行梯度下降,对w,b进行改变即可!

  这也回到了我们最初始想要把误分类点的个数作为损失函数

  引入距离,只是将它推导出一个可导的形式!(最后说一句,我个人认为不去掉||w||,也是一样可以得到最后的正确分类超平面,就是直接用距离来当做损失函数也是可以的,可能是求梯度比较复杂,或者是感知机本身就是用误分类点来区分,就没用这个损失函数了)


  学习算法

  上面我们讲到了感知机的损失函数:


  其中M是所有误分类的点的集合。这是一个凸函数,可以用梯度下降法或者拟牛顿法来解决,常用的是梯度下降法。

  但是用普通的基于所有样本的梯度和的均值的批量梯度下降法(BGD)是行不通的

  原因在于我们的损失函数里面有限定,只有误分类的M集合里面的样本才能参与损失函数的优化

  所以我们不能用最普通的批量梯度下降,只能采用随机梯度下降(SGD)或者小批量梯度下降(MBGD)。

  而感知机模型选择的是采用随机梯度下降,这意味着我们每次仅仅需要使用一个误分类的点来更新梯度。

  而损失函数基于 w 与 b 的的偏导数为:



  那么梯度下降公式为:


  好了,到这里我们可以给出整个感知机学习过程算法!如下:

  (1)选定初值w0,b0,(相当于初始给了一个超平面)

  (2)在训练集中选取数据(xi,yi)(任意抽取数据点,判断是否所有数据点判断完成没有误分累点了,如果没有了,直接结束算法,如果还有进入(3))

  (3)如果yi(w*xi+b)<>

  那么进行参数更新!更新方式如下:


  其中 n为步长在统计学习中又称为学习率

  (4)转到(2),直到训练集中没有误分类点


  AI

  菌

  关于感知机的理论知识就这样了,关于收敛性的证明与算法的对偶形式,感兴趣的同学可以进一步了解。

  虽然它现在已经不是一个在实践中广泛运用的算法,还是值得好好的去研究一下。感知机算法对偶形式为什么在实际运用中比原始形式快,也值得好好去体会。

  参考文献:李航—统计学习方法


  不失初心,不忘初衷
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
感知机(Perceptron)是怎么实现“知错能改”的?
简单易学的机器学习算法
感知机
优化背后的数学基础
线性分类模型(一):线性判别模型分析
逻辑回归数学原理推导
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服