第一讲中我们学习了一个机器学习系统的完整框架,包含以下3部分:训练集、假设集、学习算法

  一个机器学习系统的工作原理是:学习算法根据训练集,从假设集合H中选择一个最好的假设g,使得g与目标函数f尽可能低接近。H称为假设空间,是由一个学习模型的参数决定的假设构成的一个空间。而我们这周就要学习一个特定的H——感知器模型。

  感知器模型在神经网络发展历史中占有特殊地位,并且是第一个具有完整算法描述的神经网络学习算法(称为感知器学习算法:PLA)。这个算法是由一位心理学家Rosenblatt在1958年提出来的,因此它也叫做Rosenblatt感知器。感知器是用于线性可分模式分类的最简单的神经网络模型,它由一个具有可调突触权值和偏置的神经元组成。用于调节神经网络中参数的算法最早出现在Rosenblatt(1958,1962)提出的用于其脑感知模型的一个学习过程中(即PLA)。Rosenblatt证明了当输入数据的模式是线性可分的时候,感知器学习算法能够在有限步迭代后收敛,并且决策面是位于两类之间的超平面。算法的收敛性证明被称为感知器收敛定理。那么首先介绍一下什么是感知器。

下图是一个感知器的示意图:

(图摘自Neural Networks and Learning Machines,3rd Edition)

一个感知器由三个部分组成:

1)突触权值(即图中的$w_1,w_2,...,w_m$)

2)求和单元,用突触权值对输入进行加权并加上偏置,得到诱导局部域(v)

3)激活函数(即图中的hard limiter)用于限制诱导局部域输出的振幅,在感知器中,使用符号函数来限制输出(当v>0时输出为1,反之为-1)

以上神经元称为McCulloch-Pitts模型,可以用两条数学公式概括:

\[ v = \sum_{i=1}^m w_i x_i + b \]

\[ y = \phi(v) = \begin{cases} 1 & if \quad v >0\\ -1 & otherwise\end{cases} \]

关于偏置的作用,直观上可以这样理解,当$\sum_{i=1}^m w_i x_i >-b$时输出为1,当$\sum_{i=1}^m w_i x_i \leq -b$时输出为-1,这里$-b$实际上是一个阈值,而求和单元求和的结果可以认为是一个根据输入特征进行打分的函数,突触权值是特征的重要性或者可以理解为每个特征的分数,当分数超过阈值时,我们给它分到+1代表的类,不超过则分到-1.是不是有点像老师改卷的过程?权值是每道题的分数,输入是学生每道题的对错情况,输出是这个学生最后的总分,当这个总分超过一个阈值(比如60分)时,给他pass,否则不给他pass。

我们可以把偏置$b$看作一个特殊的突触单元,$x_0=+1$,$w_0=b$,分别加入到输入向量和权值向量中。这样,感知器的输出可以表示为一个更为简洁的形式$f(x)=\sum_{i=0}^m w_ix_i$,又可以简化为一个向量形式,即$f(x)=w^Tx$,其中$w=(w_0,w_1,...,w_m)^T$,$x=(x_0,x_1,...,x_m)^T$它们都是m+1维的向量。不过为了方便后面的推导,还是把它拆开来写:$f(x)=w^Tx+b$

感知器模型实际上定义了一组超平面$w^Tx+b=0$,称为分离超平面。感知器模型实际上是关于$w,b$的函数,这个超平面将空间分为两半,一半是由满足$w^Tx+b> 0$的点(标记为+1)组成,另一半由$w^Tx+b\leq 0$定义(标记为-1)。给定一个点$x_i$,我们可以用以下的决策函数预测它的标号:

$$ f(x) = sign(w^Tx+b) $$

其中sign是符号函数,当括号里的项大于时,输出为+1;小(等)于0时,输出为-1.给定一个训练数据集$\mathcal{D}=\{(x_1,y_1),...,(x_n,y_n)\}$的情形下,我们的目标是尽可能地满足$f(x_i)=y_i$,但一开始由于我们事先不知道超平面长什么样,难免会分错,而PLA算法告诉我们的是,我们可以利用这些错分的点来修正权值向量$w,b$,使之往正确的位置靠近。为此,我们首先需要定义一个函数,来衡量一次预测错误的程度,这个函数称为损失函数。一个合理的选择是误分类点的总数,但是这个函数不是$w,b$的可导函数,因此我们用了另一个函数作为替代,即误分类点到超平面的总距离,这个准则的好处是关于$w,b$可导,因此可以使用梯度下降算法来优化。下面我来解释一下为什么用误分类点到超平面的距离来作为损失函数。

下图是一个二维的超平面

上图中,点x到超平面的距离是

$$ \frac{1}{\left\|w\right\|}|w^Tx+b| $$

推导过程:

由图中的关系有:$x+y=z$,由于$y$与法向量$w$共线,可设$y=\lambda w$,则$z=x+\lambda w$

因为$z$在超平面上,故$w^Tz+b=0$,得到$w^Tx+\lambda w^Tw + b = 0$

于是有$\lambda = \frac{-(w^Tx+b)}{w^Tw}$

距离为$d=|y|=|\lambda|\left\|w\right\|=\frac{1}{\left\|w\right\|}|w^Tx+b|$

直观上来理解,误分类点离超平面越远,我们就需要花越多的代价将$w,b$纠正,因此损失函数较大。而我们的目标就是使这种损失在平均意义上最小,即

$$ L(w,b)=\sum_{x_i\in M} -y_i(w^Tx_i+b) $$

其中$M$是误分类点的集合,$-y_i(w^Tx_i+b)$实际上是$|w^Tx_i+b|(x_i\in M)$,因为对于误分类的点来说,$y_i$和$w^Tx_i+b$的符号一定是相反的,所以$-y_i(w^Tx_i+b)$一定是正数,实际上,$y_i(w^Tx_i+b)$有一个专门的名字,称为函数间隔,这个概念在SVM中也有出现。这里我们的目标是最小化L,方法是用L的梯度来修正w和b。

我们求$L$关于$w,b$的梯度:

$ \frac{\partial L}{\partial w}=-\sum_{x_i\in M}y_ix_i $

$ \frac{\partial L}{\partial b} =-\sum_{x_i\in M}y_i$

这里,因为一次更新采用所有样本太费时,我们一次从分错的样本中随机挑选出一个来更新,此方法称为随机梯度下降算法。对应w,b的更新式为

$$ w \leftarrow w + \eta y_ix_i $$

$$ b \leftarrow b + \eta y_i $$

式中$\eta$为学习率,在实现时,可以先随机生成一个排列,再遍历这个序列直到遇到第一个分错的样本,。

为了方便后面的推导,把$b$加入$w$,令$w=(w,-b)$,$x=(x,1)$,则$f(x)=w^Tx$,通常把$w$称为权重向量。对应的更新式为

$$w \leftarrow w + \eta y_ix_i$$

这个更新式就是感知器学习算法PLA的核心。

下面是PLA算法的完整描述:

输入:训练集T,学习率$\eta$

输出:w,b;感知器模型$f(x)=sign(w^Tx+b)$

过程:

(1)初始化$w_0=0$

(2)选取数据$(x_i,y_i)$

(3)如果$y_i(w^Tx_i+b)\leq 0$

$$w \leftarrow w + \eta y_ix_i$$

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

注意到,误分类点有这样一个性质:$y_i(w^Tx_i+b)\leq 0$。最后得到的超平面一定是能够将所有正/负样本分离开来的,我们把这种性质叫做线性可分性

设最终收敛的权重向量是$w_f$,这一性质可以表示为:对于所有的样本点,都有

$$ y_iw_f^Tx_i \geq 0 $$

这个算法看起来很简洁,有人会问,这么简单的算法真的起作用吗,能收敛吗?  答案是肯定的。也就是说,可以证明算法一定能收敛,并且可以求出收敛次数的上限。

假设第t次迭代时w的值为$w(t)$,下面来证明这个结论。在证明过程中,引入几个记号。

(1)$R=\max_{1\leq i\leq N}\left\|x_i\right\|$

(2)$\gamma=\min\{y_iw_f^Tx_i\}$

证明过程:

首先考察$\cos\theta(t)=\frac{w(t)^Tw_f}{\left\|w(t)\right\|\left\|w_f\right\|}$的分子:

$$w(t)^Tw_f = (w(t-1)+\eta y_i(t-1)x_i(t-1))^Tw_f = w(t-1)^Tw_f + \eta y_i(t-1) w_f^Tx_i(t-1) \geq w(t-1)^Tw_f + \eta \gamma\geq w(t-2)^Tw_f+2\eta\gamma\geq\cdots\geq t\eta\gamma$$

另一方面,

$$\left\|w(t)\right\|^2=\left\|w(t-1)\right\|^2+\eta^2y_i(t-1)^2\left\|x_i(t-1)\right\|^2+2\eta y_i(t-1)w(t-1)^Tx_i(t-1)\leq \left\|w(t-1)\right\|^2+\eta^2R^2\leq\cdots\leq t\eta^2R^2$$

$$ \left\|w(t)\right\|\leq \sqrt{t}\eta R$$

因此,$$\cos\theta(t) \geq \frac{t\gamma}{\left\|w_f\right\|\sqrt{t}\eta R}=\sqrt{t}(\frac{\gamma}{\left\|w_f\right\|\eta R})$$

由此我们可以知道$\cos\theta(t)$的下限是关于$\sqrt{t}$单调递增的函数,而$\cos\theta(t)$最多不超过1,因此随着迭代次数的增加,这个下限会越来越趋近于1,直至收敛。由于下限不超过1,我们可以近似求得收敛需要的次数:$\sqrt{t}(\frac{\gamma}{\left\|w_f\right\|\eta R})\leq 1\Longrightarrow t\leq\frac{\left\|w_f\right\|^2\eta^2R^2}{\gamma^2}$,也就是说,最大迭代次数不超过$ceil(\frac{\left\|w_f\right\|^2\eta^2R^2}{\gamma^2})$。但由于t有上限,这表明算法会停止,而结合算法停止的条件是没有误分类点,那么算法收敛时找到的超平面一定是线性可分的。

注意:不要认为$w(t)$一定会收敛于$w_f$,因为感知器的可行解不是唯一的,差几度也是可以的。

线性可分告诉我们$w(t)^Tw_f$增长的很快,而用错误修正$w$告诉我们$\left\|w(t)\right\|$增长的很慢,两者一综合可以得出结论,$w(t)$越来越靠近$w_f$,直至算法停止

总结一下PLA算法:

优点:易于实现,效率高, 对于任意维度都适用

缺点:

(1)事先不知道数据是否线性可分,需要找到一个$w_f$,但需要线性可分才找的到$w_f$,于是陷入循环论证

(2)即使知道数据是线性可分的,我们也无法知道算法什么时候能停下来,因为我们不知道$w_f$

线性可分是一种比较理想的情况,真实世界中这样的数据并不多见。一方面现实中的数据维度一般都远大于二维,维数越多,数据的分布就越复杂,线性可分的可能性就越小;另一方面,即使target function是线性的,由于数据采集过程中的噪声导致的非线性也是非常有可能的。这样一来,感知器模型就无法广泛地应用了,于是有人提出了能够应用于非线性可分数据的感知器:Pocket PLA。它是一类贪心算法,先在“口袋”里保存一条最好的线$w_g$,然后每次随机挑一个错误修正$w$得到$w(t+1)$,并与$w_g$比较哪一条更好,如果比$w_g$更好,就令$w_g=w(t+1)$,否则继续循环,直到到达一定循环次数为止。

pocket算法比PLA慢,这是因为要比较两条线哪条更好,需要遍历所有数据,计算两条线各自犯的错误是多少。

Coursera机器学习基石 第2讲:感知器的更多相关文章

  1. Coursera机器学习基石 第1讲:The Learning Problem

    这门课的授课老师是个台湾人,师从Caltech的Yaser S. Abu-Mostafa,他们共同编撰了<Learning From Data>这本书.Yaser S. Abu-Mosta ...

  2. Coursera 机器学习基石 第4讲 学习的可行性

    这一节讲述的是机器学习的核心.根本性问题——学习的可行性.学过机器学习的我们都知道,要衡量一个机器学习算法是否具有学习能力,看的不是这个模型在已有的训练数据集上的表现如何,而是这个模型在训练数据外的数 ...

  3. 机器学习基石第一讲:the learning problem

    博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) Andrew Ng的Machine Learning比較简单,已经看完.林田轩的机器 ...

  4. 機器學習基石(Machine Learning Foundations) 机器学习基石 课后习题链接汇总

    大家好,我是Mac Jiang,非常高兴您能在百忙之中阅读我的博客!这个专题我主要讲的是Coursera-台湾大学-機器學習基石(Machine Learning Foundations)的课后习题解 ...

  5. Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

    (一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为 ...

  6. 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法

    这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...

  7. python机器学习——感知器

    最近在看机器学习相关的书籍,顺便把每天阅读的部分写出来和大家分享,共同学习探讨一起进步!作为机器学习的第一篇博客,我准备从感知器开始,之后会慢慢更新其他内容. 在实现感知器算法前,我们需要先了解一下神 ...

  8. 神经网络与机器学习第3版学习笔记-第1章 Rosenblatt感知器

    神经网络与机器学习第3版学习笔记 -初学者的笔记,记录花时间思考的各种疑惑 本文主要阐述该书在数学推导上一笔带过的地方.参考学习,在流畅理解书本内容的同时,还能温顾学过的数学知识,达到事半功倍的效果. ...

  9. 机器学习:Python实现单层Rosenblatt感知器

    如果对Rosenblatt感知器不了解,可以先查看下相关定义,然后对照下面的代码来理解. 代码中详细解释了各步骤的含义,有些涉及到了数学公式的解释. 这篇文章是以理解Rosenblatt感知器的原理为 ...

随机推荐

  1. Ruby 踩坑 “Failed to build gem native extension”

    ruby新手,总是会出现这样那样的问题,这里先记录下,希望能解决你得问题. 首先是安装ruby 环境,楼主愚钝,在公司和自己的电脑上来来回回整了好几天,每次安装 gem 包的时候总是报错,错误信息大致 ...

  2. Spring Cloud实战之初级入门(六)— 服务网关zuul

    目录 1.环境介绍 2.api网关服务 2.1 创建工程 2.3 api网关中使用token机制 2.4 测试 2.5 小结 3.一点点重要的事情 1.环境介绍 好了,不知不觉中我们已经来到了最后一篇 ...

  3. MySQL 5.7 解压版 安装教程(图文详细)[Windows]

    最近在学习中用到了MySQL数据库,在安装过程中遇到了不少问题,在翻了大半天百度后,问题基本都解决了,所以写一篇MySQL 5.7 解压版的图文详细安装教程. 至于为什么我会选择解压版而不是安装版,一 ...

  4. css美化checkbox

  5. JavaEE之HttpServletResponse

    HttpServletResponse概述 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应r ...

  6. 用css3+js写了一个钟表

    有一天看到css3旋转这个属性,突发奇想的写了一个钟表(没做浏览器兼容),来一起看看是怎么写的吧! 先给个成品图,最终结果是个样子的(动态的). 首先,思考了一下页面的布局,大致需要4层div,最底层 ...

  7. iview table数据排序不正确

    在使用iview的table组件时,要做排序 代码: sortable: true,sortMethod: (a, b, type) => { if (type === 'desc') { re ...

  8. Repeat Number(数论)

    Repeat Number 题目描述: Definition: a+b = c, if all the digits of c are same ( c is more than ten), then ...

  9. springboot 使用webflux响应式开发教程(一)

    什么是webFlux 左侧是传统的基于Servlet的Spring Web MVC框架,右侧是5.0版本新引入的基于Reactive Streams的Spring WebFlux框架,从上到下依次是R ...

  10. Raspberry 安装vstudio

    Visual Studio Code微软公司推出的一款轻量级的Visual Studio风格的跨平台的IDE.当然,除了Windows,OSX,还能在树莓派上使用.目前树莓派上可用的IDE真不多,VS ...