感知机(Perceptron)

标签(空格分隔): 监督学习


@ author : duanxxnj@163.com
@ time : 2016-07-04


  • 感知机Perceptron

    • 广义线性模型下的感知机
    • 感知机的原始形式 和 对偶形式
      • 感知机原始形式
      • 感知机的对偶形式
      • 感知机对偶形式中的內积
    • 感知机模型的袋式算法

前面一篇文章是关于LR回归的,其中提到LR回归是一个判别式模型。这里再研究一个判别式模型:感知机。感知机模型在机器学习中有举足轻重的地位,它是SVM和神经网络的基础。

之前的线性回归的概率解释中,假设样本的概率密度函数的参数形式是已知的,然后需要基于样本,使用参数估计的方法来估计概率密度函数的参数值;这里的感知机算法和前一篇文章《LR回归》,都是直接假设判别函数的参数形式是已知的,然后基于训练样本,来估计判别函数的参数值,被称为判别式方法。感知机所得到的是一个线性判别函数。而一般来说,寻找线性判别函数的问题,会被形式化为极小化准则函数的问题,以分类为目的的准则函数可以是样本的风险函数,或者是训练误差。

广义线性模型下的感知机

感知机模型是一个二分类模型,和线性回归模型一样,感知机模型一般会使用一些特征函数ϕ(x)\phi(x),将输入空间映射到新的特征空间中,再进行计算。感知机模型对应于特征空间中将实例划分为正负两类的分离超平面,故而是判别式模型。感知机模型的数学表达式如下:

y(x)=f(wTϕ(x))

y(x)=f(w^T\phi(x))

这里f(⋅)f(\cdot) 叫做激活函数:

f(a)={01a≥0a<0

f(a)= \begin{cases} 0& \text{a$\ge$0}\\ 1& \text{a

在LR模型中,输出的取值为 t∈{1,0}t\in\{1,0\} ,在感知机模型中,输出的取值为 t∈{+1,−1}t\in\{+1,-1\} 。

感知机算法相对来说,十分的简单,其分可以分为原始形式和对偶形式。

模型有了,现在要考虑其损失函数的形式,由于感知机模型的输出是0和1两个离散的值,如果使用基于分类错误的平方误差,会使得损失函数不连续,更别说是否可导了。所以这里使用下面这个损失函数,在后面将SVMSVM的时候就可以知道,这个损失函数其实就是SVMSVM中的函数间隔:

E=−∑n∈MwTϕ(xn)tn

E=-\sum_{n\in M}{w^T\phi(x_n)t_n}

其中,MM是分类错误的样本子集的下标;ϕ(x)\phi(x)是输入变量xx的特征提取函数,一般来说,我们用xx指代输入空间,但是,在实际的问题中,输入空间的变量很难直接用于模型学习,需要在输入空间的基础上再做一个特征变换的操作ϕ(x)\phi(x),将输入空间变换到特征空间,然后用特征空间进行模型的学习。

对于上面的损失函数而言:
当 tn=+1t_n=+1的时候,由于样本被分类错误, wTϕ(xn)<0w^T\phi(x_n),所以 −wTϕ(xn)tn>0-w^T\phi(x_n)t_n>0
当 tn=−1t_n=-1的时候,由于样本被分类错误, wTϕ(xn)>0w^T\phi(x_n)>0,所以 −wTϕ(xn)tn>0-w^T\phi(x_n)t_n>0
故而这里EE始终为正值,当EE取其最小值0的时候,感知机模型就可以将输入样本完全的分开。

当然,这里需要注意一个特殊情况: 如果样本点刚好落在了决策超平面上,那么wTϕ(xn)=0w^T\phi(x_n)=0,这种情况,无论将这个样本点判给哪个类,都无所谓,可以不予考虑。

然后对其求梯度:

∇E(w)=−∑n∈Mϕ(xn)tn

\nabla E(w)=-\sum_{n\in M}{\phi(x_n)t_n}

和线性回归模型一样,有了梯度之后,就可以使用梯度下降法来求解模型的参数了:

wt+1=wt−ηt∇E(w)=wt+ηt∑n∈Mϕ(xn)tn

w_{t+1}=w_{t}-\eta_t \nabla E(w)=w_t + \eta_t \sum_{n\in M}{\phi(x_n)t_n}

这种算法也叫作批处理算法,使用“批处理”这个术语,猪獒是因为每次在修正权值向量的时候,都需要计算成批的样本。与之相对的就是下面的随机梯度下降法,这是一种但样本方法,或者叫做在线学习算法。

或者使用随机梯度下降法,这里的nn是在MM中随机选择的一个:

wt+1=wt+ηtϕ(xn)tn;其中n∈M

w_{t+1}=w_t + \eta_t {\phi(x_n)t_n};其中n\in M

上式中的ηt\eta_t需要满足:

∑k=1∞ηk→∞∑k=1∞η2k<∞

\sum_{k=1}^{\infty}\eta_{k}\to\infty \\\sum_{k=1}^{\infty}\eta_{k}^2

最常见的一个满足上述两个条件的函数为:ηk=1k\eta_{k}=\frac{1}{k}。在很多的教科书上,都会将ηk\eta_{k}取为一个定值,这个是可行的,不过需要你给出一个合适的值,否则的话,算法的性能会比较的差,甚至无法收敛。

感知机的原始形式 和 对偶形式

以上就是广义线性模型下的感知机模型,这个是感知机模型的原始形式,感知机模型最重要的并不是它的原始形式,而是他的对偶形式,这个里的对偶形式就是SVMSVM求解中对偶形式的原型,很好的理解了感知机的对偶形式,那么SVMSVM的对偶形式就可以很好的理解了。

每一个线性规划问题,我们称之为原始问题,都有一个与之对应的线性规划问题我们称之为对偶问题。原始问题与对偶问题的解是对应的,得出一个问题的解,另一个问题的解也就得到了。并且原始问题与对偶问题在形式上存在很简单的对应关系:
- 目标函数对原始问题是极大化,对偶问题则是极小化
- 原始问题目标函数中的系数,是对偶问题约束不等式中的右端常数,而原始问题约束不等式中的右端常数,则是对偶问题中目标函数的系数
- 原始问题和对偶问题的约束不等式的符号方向相反
- 原始问题约束不等式系数矩阵转置后,即为对偶问题的约束不等式的系数矩阵
- 原始问题的约束方程数对应于对偶问题的变量数,而原始问题的变量数对应于对偶问题的约束方程数
- 对偶问题的对偶问题是原始问题

感知机原始形式

这里为了和后面的SVMSVM已经神经网络在公式上相对应,对上面感知机的原始形式做一个重写:

给定一个数据集:T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},其中yi∈{+1,−1}y_i\in \{+1, -1\},将广义线性模型下的损失函数:

E=−∑n∈MwTϕ(xn)tn

E=-\sum_{n\in M}{w^T\phi(x_n)t_n}

重写为:

E=−∑xi∈M(wTxi+b)yi

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

其中bb一般被称为偏置。

那么损失函数的梯度就可以写为:

∇wE(w,b)=−∑xi∈Mxiyi∇bE(w,b)=−∑xi∈Myi

\nabla_w E(w,b)=-\sum_{x_i\in M}{x_iy_i}\\\nabla_b E(w,b)=-\sum_{x_i\in M}{y_i}

其对应的梯度下降法的参数更新方法为:

wt+1=wt−ηt∇wE(w,b)=wt+ηt∑n∈Mxiyibt+1=bt−ηt∇bE(w,b)=bt+ηt∑n∈Myi

w_{t+1}=w_{t}-\eta_t \nabla_w E(w,b)=w_t + \eta_t \sum_{n\in M}{x_iy_i}\\b_{t+1}=b_{t}-\eta_t \nabla_b E(w,b)=b_t + \eta_t \sum_{n\in M}{y_i}

其对应的随机梯度下降法的参数更新方法为:

wt+1=wt+ηtxiyibt+1=bt+ηtyi

w_{t+1}=w_t + \eta_t {x_iy_i}\\b_{t+1}=b_t + \eta_t {y_i}

其中xi∈Mx_i \in M,ηt\eta_t 需要满足的限制条件和前面的一样:

∑k=1∞ηk→∞∑k=1∞η2k<∞

\sum_{k=1}^{\infty}\eta_{k}\to\infty \\\sum_{k=1}^{\infty}\eta_{k}^2

感知机随机梯度下降法的直观解释:对于感知机而言,当一个样本点被误分类之后,被误分类的样本点会位于决策超平面的错误的一侧,这时感知机会调整w,bw,b的值,使决策超平面向该误分类点的一侧移动,移动的尺度由ηt\eta_t 决定,每一次移动,都可以减少误分类点和决策超平面之间的距离,直到决策超平面越过该误分类点,使其被正确分类为止。

对于一个线性可分的数据集而言,感知机经过有限次搜索之后,一定可以找到将训练数据完全正确分开的决策超平面。也就是说,但训练数据集是线性可分的时候,感知机学习算法的原始形式一定是迭代收敛的。

但是,同时需要注意:感知机学习算法存在许多的解,这些解即和感知机初值的选择有关,同时也依赖于迭代过程中随机选择的错误点的选择方法

为了使得感知机可以有一个确定的最优解,就需要为感知机加上一些约束条件,这就是后面要讲的SVMSVM的基本思想。

当训练的数据集线性不可分时,一般的感知机学习算法并不能迭代收敛,其结果会不断的震荡,这个问题在SVMSVM中使用软间隔最大化来解决的。

感知机的对偶形式

感知机算法的对偶式,是针对感知机随机梯度下降法来设计的。其基本思想是:感知机的原始式中,xx 是自变量,yy 是因变量,w,bw,b 是模型的参数,通俗点说,在感知机的原始算法中,是用参数w,bw,b来表示yy和xx的。对偶式就是要把这这个关系反过来,用样本xx和yy的线性组合来表示参数ww和bb。

感知机随机梯度下降法的参数更新方式为:

wt+1=wt+ηtxiyibt+1=bt+ηtyi

w_{t+1}=w_t + \eta_t {x_iy_i}\\b_{t+1}=b_t + \eta_t {y_i}

对于第ii个样本,每次其被分类错误,都会有一次基于xi,yix_i,y_i的权值跟新,那么假设,到最后,整个感知机算法更新结束时,第ii个样本点总共更新了nin_i次。这样就不难得到,最后学习到的w,bw,b分别为:

w=∑i=1Nniηniyixib=∑i=1Nniηniyi

w=\sum_{i=1}^N{n_i \eta_{n_i} y_i x_i}\\b=\sum_{i=1}^N{n_i \eta_{n_i} y_i}

在感知机原始形式中,ηt\eta_{t}和迭代次数 tt 相关,在对偶形式中,ηni\eta_{n_i}是和对应的样本点的权值更新次数nin_i相关。当然,这里的ηni\eta_{n_i}也必须满足:

∑k=1∞ηk→∞∑k=1∞η2k<∞

\sum_{k=1}^{\infty}\eta_{k}\to\infty \\\sum_{k=1}^{\infty}\eta_{k}^2

很容易知道,nin_i越大,说明对应的第ii个样本点更细你的次数就越多,也就意味着这个样本点距离分类超平面越近,其正确分类的难度也就越大,那么,这个点对于模型的影响也就越大。在SVMSVM中,这种点,很有可能就是支持向量。

故而,感知机模型的对偶形式的模型为:

y(x)=f(wTx+b)=f({∑j=1Nnjηnjyjxj}∗x+∑j=1Nnjηnjyj)

y(x)=f(w^Tx+b)=f(\{\sum_{j=1}^N{n_j \eta_{n_j} y_j x_j}\}*x + \sum_{j=1}^N{n_j \eta_{n_j} y_j})

这里f(⋅)f(\cdot) 叫做激活函数:

f(a)={01a≥0a<0

f(a)= \begin{cases} 0& \text{a$\ge$0}\\ 1& \text{a

注意,上式中,为了和样本点(xi,yi)(x_i,y_i)的下标 ii 相区别开来,这里选用的下标是 jj 。

其训练过程为:
在训练集中选取一个样本点(xi,yi)(x_i,y_i),如果该点分类错误,那么该点的权值更新加一次:

yi({∑j=1Nnjηnjyjxj}∗xi+∑j=1Nnjηnjyj)≤0

y_i(\{\sum_{j=1}^N{n_j \eta_{n_j} y_j x_j}\}*x_i + \sum_{j=1}^N{n_j \eta_{n_j} y_j}) \le 0

那么,更新公式为( 注意,这里的下标是 ii ):

ni=ni+1

n_i=n_i+1

这个其实就是想说,在NN个训练样本依次循环的输入到算法中,如果对于某个样本分类错误,那么算法就对该样本点做一次更新。循环上面这个过程,直到所有的样本点都能够分类正确。

感知机对偶形式中的內积

在感知机对偶式的训练过程中,也就是下面这个公式中:

yi({∑j=1Nnjηnjyjxj}∗xi+∑j=1Nnjηnjyj)≤0

y_i(\{\sum_{j=1}^N{n_j \eta_{n_j} y_j x_j}\}*x_i + \sum_{j=1}^N{n_j \eta_{n_j} y_j}) \le 0

上面这个式子可以写成下面这个形式:

yi(∑j=1Nnjηnjyj(xj∗xi)+∑j=1Nnjηnjyj)≤0

y_i(\sum_{j=1}^N{n_j \eta_{n_j} y_j (x_j*x_i)} + \sum_{j=1}^N{n_j \eta_{n_j} y_j}) \le 0

这里(xj∗xi)(x_j*x_i) 表明,样本点的特征向量是以內积的形式存在于感知机对偶形式的训练算法中。为了简化计算过程,可以将训练集合之间的內积提前求出来,然后在训练过程中直接调用,样本点间的內积矩阵也就是所谓的Gram举证。

G=[xi,xj]N∗N

G=[x_i,x_j]_{N*N}

这里的內积,是SVMSVM算法中核方法的原型,也是SVMSVM之所以强大的根本原因。

感知机模型的袋式算法

感知机算法收敛的一个基本条件就是:样本是线性可分的。如果这个条件不成立的话,那么感知机算法就无法收敛。为了在样本线性不可分的情况下,感知机也可以收敛于一个相对理想的解,这里提出感知机袋式算法(Pocket algorithm)。

这个算法分为两个步骤:
1. 随机的初始化权值向量 w0w_0 , 定义一个存储权值向量的袋子 PP,并为这个袋子设计一个计数器 PcP_c,计数器初始化为0。
2. 在第tt次迭代的时候,根据感知机算法计算出其更新的权值wt+1w_{t+1}。用更新后的权值wt+1w_{t+1}测试分类的效果,分类正确的样本数为hh,如果h>Pch>P_c,那么用wt+1w_{t+1}代替wtw_t,并更新 Pc=hP_c=h。否则放弃当前更新。

感知机(Perceptron)相关推荐

  1. 基于感知机Perceptron的鸢尾花分类实践

    文章目录 1. 感知机简介 2. 编写感知机实践 2.1 数据处理 2.2 编写感知机类 2.3 多参数组合运行 3. sklearn 感知机实践 4. 附完整代码 本文将使用感知机模型,对鸢尾花进行 ...

  2. 20151227感知机(perceptron)

    1 感知机 1.1 感知机定义 感知机是一个二分类的线性分类模型,其生成一个分离超平面将实例的特征向量,输出为+1,-1.导入基于误分类的损失函数,利用梯度下降法对损失函数极小化,从而求得此超平面,该 ...

  3. 【监督学习】第三课(机器学习,折半算法,专家算法,感知机perceptron,Winnow,在线学习)

    这里是监督学习第三课,长期更新,求关注! 前两课分别讲了监督学习最简单(普遍)的算法,线性回归,以及knn和常见的问题以及解决方式. 对于线性回归的计算复杂度优化由mn两个参数决定.根据他们的相对大小 ...

  4. 机器学习-感知机perceptron

    在机器学习中,感知机(perceptron)是二分类的线性分类模型,属于监督学习算法.输入为实例的特征向量,输出为实例的类别(取+1和-1).感知机对应于输入空间中将实例划分为两类的分离超平面.感知机 ...

  5. 机器学习理论之(13):感知机 Perceptron;多层感知机(神经网络)

    文章目录 表示学习 (representation Learning) 生物神经元 V.S. 人造神经元 感知机 (Perceptron) 训练感知机(Training Perceptron) 激活函 ...

  6. 感知机perceptron

    定义和模型 (1)f(x)=sign(w⋅x+b)f(x) = sign(w \cdot x+b) \tag{1}f(x)=sign(w⋅x+b)(1) 其中, w和b是模型参数, w向量叫做权重向量 ...

  7. 机器学习笔记 - 什么是感知机(Perceptron)?

    一.什么是感知机? 由Rosenblatt于1958年首次推出的感知机,他提出了基于原始 MCP 神经元的感知机学习规则.可以说是最古老.最简单的ANN算法.在此出版物之后,基于感知机的技术在神经网络 ...

  8. 深度学习感知机(Perceptron)学习笔记

    1. 简介 神经网络由若干神经元组成,这些神经元负责对输入数据进行相似的计算操作.神经网络如下图所示: 图 1 上图中每个圆圈都是一个神经元,每条线表示神经元之间的连接.我们可以看到,上面的神经元被分 ...

  9. 2. 感知机 Perceptron

    1. Perceptron 1.1 模型概述 感知机是一种非常简单的机器学习模型,可以表达为下式 y=w⋅x+by=w\cdot x+by=w⋅x+b 在二维形式上,就是寻找一条线,将平面分成两个部分 ...

  10. 感知机(perceptron):原理、python实现及sklearn.linear_model.Perceptron参数详解

    文章目录 1.感知机模型介绍 2.感知机学习策略 3.感知机学习算法 3.1 原始形式 3.2.1算法收敛性的证明 3.2对偶形式 4.python实现感知机算法 4.1手写感知机算法 4.2 sci ...

最新文章

  1. 03-UITableView索引栏显示自定义图片
  2. 工作405-关于vue组件开发过程中一直报错:This relative module was not found:
  3. 腾讯或联姻优酷,微信嫁女模式引发互联网通婚潮流
  4. Jade/Pug模板引擎
  5. 5-6 AOF15-7 AOF25-8 AOF实验
  6. Sensor框架理解
  7. 对输入的两个整数按大小顺序输出
  8. 强烈推荐-百度网盘不限速下载网站
  9. java 的权限表_JAVA权限表
  10. 360wifi使用方法|360wifi使用教程
  11. SCU2016-04 F题 (大模拟)
  12. 调用摄像头接口方法合集
  13. JAVAEE和项目开发——JSP详解
  14. 微软 Build 2016年开发者大会发布多项功能升级
  15. 基于Springboot2.x+vue3.x整合实现微信扫码登录
  16. 13_冒泡算法(附完整java代码)
  17. pybullet中欧拉角姿态可视化及顺序记录(画机械臂末端坐标)
  18. vivado 使用DocNav查xilinx资料
  19. java开发之经验之谈
  20. 嵌入式与UML建模 mbus通断阀

热门文章

  1. [Poi2003 ][bzoj 2601]MAL猴子捞月
  2. threw ‘java.lang.NullPointerException‘ exception // toString()
  3. 用计算机汇编语言撰写,汇编语言是一种使用助记符号表示机器指令的计算机语言...
  4. win10自带的删除电脑流氓弹窗软件工具怎么用
  5. 海康威视监控推流自建服务器实现网页端无插件1-2秒低延迟实时监控
  6. 小学期破防:BIT计科大二小学期的个人见解以及建议
  7. 小学期学Java有感
  8. tp5 JWT生成token验证接口安全、防止高频请求
  9. 数字信号处理学习笔记[1] 离散信号 奇异信号 抽样定理
  10. 为什么说梯度的反方向是函数下降最快的方向