感知机:从原理到训练

感知机是个相当简单的模型,但它既可以发展成支持向量机(通过简单地修改一下损失函数)、又可以发展成神经网络(通过简单地堆叠),所以它也拥有一定的地位

为方便,我们统一讨论二分类问题,并将两个类别的样本分别称为正、负样本

感知机能做什么?

感知机能(且一定能)将线性可分的数据集分开。什么叫线性可分?在二维平面上、线性可分意味着能用一条线将正负样本分开,在三维空间中、线性可分意味着能用一个平面将正负样本分开。可以用两张图来直观感受一下线性可分(上图)和线性不可分(下图)的概念:

那么一个感知机将会如何分开线性可分的数据集呢?下面这两张动图或许能够给观众老爷们一些直观感受:

看上去挺捉急的,不过我们可以放心的是:只要数据集线性可分,那么感知机就一定能 “荡” 到一个能分开数据集的地方(文末会附上证明)

那么反过来,如果数据集线性不可分,那么感知机将如何表现?相信聪明的观众老爷们已经猜到了:它将会一直 “荡来荡去”(最后停了是因为到了迭代上限)(然后貌似动图太大导致有残影…… 不过效果也不差所以就将就着看一下吧 ( σ'ω')σ):

如何搭建感知机模型?

为了搭建感知机模型,我们需要知道高维数据的线性可分是指什么。为此我们需要定义 “超平面” 的概念:

其中 w、x 都是 n 维向量,Π 则是 R中的超平面。对于二维平面来说 n=2,上式就可以化为:

此即直线方程。有了 R中超平面的定义后,线性可分的概念也就清晰了:对于一个数据集(xi为输入,yi为标签),如果存在一个超平面Π,能够将D中正负样本(对于某个样本(xi,yi),若 y=1 则称其为正样本,若 yi =-1 则称其为负样本,且标签 y只能取正负 1 这两个值)分开,那么就称 D 是线性可分的。否则,就称是线性不可分的。

对于感知机模型来说,以上的这些信息就足够了。事实上,感知机模型只有 w 和 b 这两个参数,我们要做的就是根据样本的信息来逐步更新 w 和 b、从而使得对应的超平面 Π 能够分开 D。

如何训练感知机模型?

上一节已经说过,感知机模型只有 w 和 b 这两个参数,其中 w 是一个 n 维向量()、则是一个标量()。为了保证收敛性,我们需要将 w 初始化为零向量、将 b 初始化为 0:

class Perceptron:
    def __init__(self):
        self._w = self._b = None
    def fit(self, x, y, lr=0.01, epoch=1000):
        # 将输入的 x、y 转为 numpy 数组
        x, y = np.asarray(x, np.float32), np.asarray(y, np.float32)
        self._w = np.zeros(x.shape[1])
        self._b = 0

上面这个 fit 函数中有个 lr 和 epoch,它们分别代表了梯度下降法中的学习速率和迭代上限
(p.s. 由后文的推导我们可以证明,对感知机模型来说、其实学习速率设为多少都无关紧要)

梯度下降法我们都比较熟悉了。简单来说,梯度下降法包含如下两步:

  • 求损失函数的梯度(求导)
  • 梯度是函数值增长最快的方向我们想要最小化损失函数我们想让函数值减少得最快将参数沿着梯度的反方向走一步

(这也是为何梯度下降法有时被称为最速下降法的原因。梯度下降法被普遍应用于神经网络、卷积神经网络等各种网络中,如有兴趣、可以参见这篇文章

那么对于感知机模型来说,损失函数是什么呢?注意到我们感知机对应的超平面为而我们的样本为正负样本,一个自然的想法就是:

  • (x,y)是正样本
  • (x,y)是负样本

(从几何直观来说,上述定义等价为 “(x,1)在的Π上方”、“(x,-1)在Π的下方”)

注意我们前文提到过

  • (x,y)是正样本
  • (x,y)是负样本

那么一个朴素的损失函数L(x,y)就比较容易写出来了:

  • ,则
  • ,则

综上所述、就有:

  • 损失函数可写为
  • (x,y)被正确分类

从而易知只有错分类的点才会给 L(x,y)贡献梯度(因为正确分类的点及其 “周围” 的 L(x,y)的值为常数 0,从而梯度为 0)。所以训练感知机时,我们只需挑选使得损失函数 L(x,y)最大的一个样本(xi,yi)、用它来计算梯度、然后梯度下降即可(注意如果(xi,yi)是被正确分类的话,说明所有样本都已被正确分类,所以此时应该停止模型的训练【事实上也训练不动了……】)

由于 L(x,y)的形式简洁,所以其求导是平凡的(注意对错分类(xi,yi)样本而言,):

体现在代码上即为:

for _ in range(epoch):    # 计算 w·x+b
    y_pred = x.dot(self._w) + self._b    # 选出使得损失函数最大的样本
    idx = np.argmax(np.maximum(0, -y_pred * y))    # 若该样本被正确分类,则结束训练
    if y[idx] * y_pred[idx] > 0:  
    break   # 否则,让参数沿着负梯度方向走一步
    delta = lr * y[idx]
    self._w += delta * x[idx]
    self._b += delta

至此,感知机模型就大致介绍完了,剩下的则是一些纯数学的东西,大体上不看也是没问题的(趴。

相关数学理论

从数学的角度来说,线性可分性还有一个比较直观的等价定义:正负样本点集的凸包彼此不交。所谓凸包的定义如下:若集合由N个点组成:

那么 S 的凸包 conv(S) 即为:

比如,上文给出过的两个二维数据集的凸包将如下图所示:

左图正负样本点集的凸包不交、所以数据集线性可分,右图的橙色区域即为正负样本点集凸包的相交处、所以数据集线性不可分。

该等价性的证明可以用反证法得出:

1)线性可分 → 凸包不交:线性可分意味着存在 w* 和 b*,使得对任意成立。如果凸包相交的话,就意味着存在某个样本(x*,y*)、使得x*既是正样本输入数据的线性组合、又是负样本输入数据的线性组合:

从而

(式 1)

注意到:

  • yi=1 时
  • yi=-1 时,

所以(注意由凸包的定义我们有

这与式 1 矛盾。

2)凸包不交 → 线性可分:严谨证明需要用到一些奇怪的东西,这里就只提供一个(非常)不严谨的直观说明(欢迎观众老爷们提供更好的证明,现在这个说明我看上去觉得很像是错的)(喂):在正样本点集凸包的边界上取一个离负样本点集凸包 “最近” 的点x*(1)并假设负样本点集凸包边界上离x*(1)“最近” 的点为x*(2)。过x*(1)画一个超平面、使得Π与x*(1)、x*(2)的连线垂直。由凸包的几何性质可知此时(除了x*(1)外)正样本点集都被分到了Π的同一侧、且x*(2)是离Π“最近” 的点,这样只需把Π稍微往负样本点集那边挪一点(什么鬼!)就行了。

然后是前文遗留下来的、感知机模型收敛性的证明。我们知道感知机对应的超平面为:

将其展开的话、就是

所以我们可以将其改写为

其中

如果数据集线性可分的话,就意味着存在、使得对任意、都有;注意到的 scale 不影响超平面、所以我们不妨假设。同时由于数据集D中的样本是有限的,所以这又意味着、使得总有

现在我们初始化为 0 向量(),并开始感知机模型的训练(假设现在是第k步):

1)假设已经将所有样本正确分类,则已证毕。

2)否则,取被误分类的样本,进行参数的更新:。由此易知(注意):

(式 2)

注意是被误分类的、且yi只能取正负 1,所以,从而由式 2 可以推出:

从而

亦即训练步数k是有上界的,这意味着收敛性。而且中不含学习速率η,这说明对感知机模型来说、学习速率设为多少都无关紧要。

最后简单介绍一个非常重要的概念:拉格朗日对偶性(Lagrange Duality)。我们在前三小节介绍的感知机算法,其实可以称为 “感知机的原始算法”;而利用拉格朗日对偶性,我们可以得到感知机算法的对偶形式。鉴于拉格朗日对偶性的原始形式太过纯数学,所以我打算结合具体的算法来介绍、而不打算叙述其原始形式,感兴趣的观众老爷可以参见这里

在有约束的最优化问题中,为了便于求解、我们常常会利用它来将比较原始问题转化为更好解决的对偶问题。对于特定的问题,原始算法的对偶形式也常常会有一些共性存在。比如对于感知机和后文会介绍的支持向量机来说,它们的对偶算法都会将模型的参数表示为样本点的某种线性组合、并把问题转化为求解线性组合中的各个系数。

虽说感知机算法的原始形式已经非常简单,但是通过将它转化为对偶形式、我们可以比较清晰地感受到转化的过程,这有助于理解和记忆后文介绍的、较为复杂的支持向量机的对偶形式。

考虑到原始算法的核心步骤为:

其中、E是当前被误分类的样本点的集合;可以看见、参数的更新是完全基于样本点的。考虑到我们要将参数w和b表示为样本点的线性组合,一个自然的想法就是记录下在核心步骤中、各个样本点分别被利用了多少次、然后利用这个次数来将w和b表示出来。比如说,若设样本点一共在上述核心步骤中被利用了ni次、那么就有(假设初始化参数时):

如果进一步设,则有:

此即感知机模型的对偶形式。需要指出的是,在对偶形式中、样本点里面的x仅以内积的形式()出现;这是一个非常重要且深刻的性质,利用它和后文将进行介绍核技巧、能够将许多算法从线性算法 “升级” 成为非线性算法。

注意到对偶形式的训练过程常常会重复用到大量的、样本点之间的内积,我们通常会提前将样本点两两之间的内积计算出来并存储在一个矩阵中;这个矩阵就是著名的 Gram 矩阵、其数学定义即为:

从而在训练过程中如果要用到相应的内积、只需从 Gram 矩阵中提取即可,这样在大多数情况下都能大大提高效率。

“12小时零基础入门深度学习班”开课啦!

想要挑战AlphaGo却不懂深度学习?

雷锋网AI慕课学院专门打造了《12小时零基础入门深度学习》,fastai中文社区最活跃的四位贡献者亲授,硅谷教学模式带你实操9个深度学习项目!即使零编程基础,也能在这里找到适合你的学习路径!

课程链接:http://www.leiphone.com/special/mooc/01.html

====================================分割线================================

本文作者:AI研习社

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-10-28 18:19:11

感知机:从原理到训练的相关文章

第四范式戴文渊:机器学习教科书的 7 大经典问题

如果希望了解机器学习,或者已经决定投身机器学习,你会第一时间找到各种教材进行充电,同时在心中默认:书里讲的是牛人大神的毕生智慧,是正确无误的行动指南,认真学习就能获得快速提升.但实际情况是,你很可能已经在走弯路. 科技发展很快,数据在指数级增长,环境也在指数级改变,因此很多时候教科书会跟不上时代的发展.有时,即便是写教科书的人,也不见得都明白结论背后的"所以然",因此有些结论就会落后于时代.针对这个问题,第四范式创始人.首席执行官戴文渊近日就在公司内部分享上,向大家介绍了机器学习教材中

深度学习在 iOS 上的实践 —— 通过 YOLO 在 iOS 上实现实时物体检测

本文讲的是深度学习在 iOS 上的实践 -- 通过 YOLO 在 iOS 上实现实时物体检测, 原文地址:Real-time object detection with YOLO 原文作者:Matthijs Hollemans 译文出自:掘金翻译计划 译者:Danny Lau 校对者:Dalston Xu ,DeepMissea 深度学习在 iOS 上的实践 -- 通过 YOLO 在 iOS 上实现实时物体检测 译者注: 在阅读这篇文章之前可能会遇到的一些名词,这里是解释(我自己也查了相当多的资

GAN生成的结果多样性不足怎么办?那就再添一个鉴别器!

近期,澳大利亚迪肯大学图像识别和数据分析中心发表了一篇新的论文,由Tu Dinh Nguyen, Trung Le, Hung Vu, Dinh Phung编写,该论文就生成对抗网络(GAN)的模式崩溃问题进行了讨论并给出了一种新的有效的解决方案 D2GAN,论文译稿由雷锋网 AI 科技评论编辑,原文链接请点击. 这篇文章介绍了一种解决生成对抗网络(GAN)模式崩溃问题的方法.这种方法很直观但是证实有效,特别是当对GAN预先设置一些限制时.在本质上,它结合了Kullback-Leibler(KL

深度学习界明星:生成对抗网络与Improving GAN

2014年,深度学习三巨头之一IanGoodfellow提出了生成对抗网络(Generative Adversarial Networks, GANs)这一概念,刚开始并没有引起轰动,直到2016年,学界.业界对它的兴趣如"井喷"一样爆发,多篇重磅文章陆续发表.2016年12月NIPS大会上,Goodfellow做了关于GANs的专题报告,使得GANs成为了当今最热门的研究领域之一,本文将介绍如今深度学习界的明星--生成对抗网络. 1何为生成对抗网络 生成对抗网络,根据它的名字,可以推

深度学习全网最全学习资料汇总之模型介绍篇

本文旨在加速深度学习新手入门,介绍 CNN.DBN.RNN.RNTN.自动编码器.GAN 等开发者最常用的深度学习模型与架构.雷锋网搜集整理了涉及以上话题的精品文章,供初学者参考. 卷积神经网络 CNN 深度学习元老Yann Lecun详解卷积神经网络 Yann Lecun 的 CNN 话题演讲+ppt. 链接:http://www.leiphone.com/news/201608/zaB48AcZ1AFm1TaP.html 卷积神经网络(CNN)新手指南 翻译自国外的 CNN 教程,解释详细,

随机森林:猜糖豆游戏揭示的机器学习算法

还记得那款老的嘉年华游戏吗,大家一起猜测一个罐子里糖豆的数量?虽然准确猜出糖豆的数量需要一点运气和技巧的组合,事实证明,通过平均所有人的各种各样的猜测,平均结果出奇地接近正确答案. 这是一个被称为"众人的智慧(the wisdom of the crowd)"的典型例子,也是机器学习常用的建模策略之一. 前提条件还是有的:你要有数量足够多的不同的数据,每一个数据都在某些程度上包含所需信号,但数据之间没有任何其他维度的相关性(这样数据的误差往往对称分布在真实结果周围),当然还需要一种合适

(zhuan) 深度学习全网最全学习资料汇总之模型介绍篇

  This blog from : http://weibo.com/ttarticle/p/show?id=2309351000224077630868614681&u=5070353058&m=4077873754872790&cu=5070353058   深度学习全网最全学习资料汇总之模型介绍篇 雷锋网  作者: 三川 2017-02-21 16:38:00 查看源网址 阅读数:4       本文旨在加速深度学习新手入门,介绍 CNN.DBN.RNN.RNTN.自动编码

早教机构三大问题:收费高教师无资格监管盲区

优臻打出的口号是:中国唯一专业开设剖腹产儿发展课程的早教机构. 十年来国内早教机构风起云涌收费高.教师上岗无资格认证.监管成盲区三大问题考量行业发展 "优臻事件"还在继续中,阴云难散. 从今年9月25日,AOKBABY优臻婴童素质中心因拖欠教师20多万元的工资被查封,在读的200多名婴幼儿80多万元学费不明去向.到10月6日,峰回路转,有孩子家长愿意注资收拾这个"烂摊子".再到10月22日"新掌柜"接手,孩子安排复课,学费不退不补,留任8名老师继

【深度学习创作】用《权力的游戏》前五部训练RNN生成第六部(原理解析)

<权力的游戏>(英语:Game of Thrones)是一部中世纪史诗奇幻题材的美国电视连续剧.该剧以美国作家乔治·R·R·马丁的奇幻文学<冰与火之歌>系列作为基础改编创作. 按照作者计划,<冰与火之歌>系列将有7部,目前出版至第5部. 也就是说,从2011年开始,读者对第六部<凛冬的寒风>的等待已经超过了6年.   近日,一位名叫Zack Thoutt的工程师在开源社区Github上发起了这样一个项目:基于<冰与火之歌>前面五部作品,训练RNN