Data-方法-05 感知机

LogicAether
• 阅读 280

Data-方法-05 感知机

The general freedom in academic life is, in my view, one of its most important features. The long vacations are exceedingly attractive as is also the general feeling of freedom in hours of work. - Claude Shannon
  • Data系列:目录配置代码仓库对应实战
  • 对应《统计学习方法(第2版)》第2章、《数据挖掘导论》第5章、《机器学习》第5章。
  • 感知机作为神经网络和支持向量机的基础,可以说占据了这几十年来人工智能的江山。虽然现在很多的书籍中,已经更多地从神经网络的角度来解释感知机,将其归在了神经网络的章节之中。但作为一个能快速单开一章的方法,我又怎么舍得把它放在别的内容之中呢

1. 感知机模型

  • 感知机感知器(preceptron)由Frank Roseblatt于1957年提出,是二分类线性分类模型,属于判别模型。感知机可以说是最简单的人工神经网络,只有一个神经元。
  • 输入:实例的特征向量$x$,输入空间为 $\mathcal{X}\subseteq {\rm R}^n$
  • 输出:实例的类别$y$,输出空间为 $\mathcal{Y}=\{+1,-1\}$
  • 任务:寻找出将训练数据线性划分分离超平面(separating hyperplane),寻找由输入空间到输出空间的函数,

    • $f(x)={\rm sign}(w\cdot x+b)$

      • $w$:权值(weight),神经元的角度看为突触
      • $b$:偏置(bias),神经元的角度看为阈值(threshold)的相反数
    • $f$:激活函数(activvation function),神经元的角度看为细胞体
    • ${\rm sign}$函数:符号函数,也可以写为${\rm sgn}$

      $$ {\rm sign(x)}= \begin{cases} +1,\quad &x\ge0\\ -1,&x<0 \end{cases} $$

  • 分离超平面示意(来自《统计学习方法》):

    Data-方法-05 感知机

2. 感知机学习

【学习策略-损失函数】

  • 感知机学习目标:求一个将训练集正负实例点完全正确分开的分离超平面
  • 学习策略:定义(经验)损失函数并将损失函数,并将损失函数极小化
  • 损失函数的自然选择是误分类点的总数,但由于这样不是参数$w$、$b$的连续可导函数,不易优化,所以没有选择。
  • 感知机学习策略实际选择的是,误分类点到超平面$S$的总距离
  • 任意一点$x_0$到超平面的距离为:$\frac{1}{||w||}|w\cdot x_0+b|$,$||w||$表示L2范数
  • 误分类数据$(x_i,y_i)$有:$y_i(w\cdot x_i+b)<0$

    • 误分类集合为$M$,则总距离为:$-\frac{1}{||w||}y_i(w\cdot x_i+b)$
  • 不考虑$\frac{1}{||w||}$,则感知机学习的损失函数经验风险函数)为:$L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)$

    • 是$w$, $b$的连续可导函数
  • 感知机学习就是在假设空间$\{f|f(x)=w\cdot x+b\}$中选取使损失函数$L(w,b)$最小的模型参数$w,b$,即求解损失函数最优化问题,采用的方法是随机梯度下降法(stochastic gradient descent)。

【学习算法-原始形式】

  • 感知机学习算法是误分类驱动错误驱动的,采用随机梯度下降法进行最优化
  • 简单来说,先任意选择一个超平面$w_0,b_0$,然后每次随机选择一个误分类点通过梯度下降法不断地极小化目标函数
  • 感知机学习算法原始形式:

    • 输入:

      • 训练数据集$T=\{(x_1,y_1),(x_2,y_2)...,(x_N,y_N)\}$,其中$x_i\in\mathcal{X}\subseteq {\rm R}^n$,$y_i\in\mathcal{Y}=\{+1,-1\}$
      • 学习率(learning rate)/步长$\eta$ ($0<\eta\le1$)
    • 输出:

      • $w,b$,感知机模型$f(x)={\rm sign}(w\cdot x+b)$
    • 算法步骤:

      1. 选取初始值$w_0,b_0$;
      2. 在训练集中选取数据$(x_i,y_i)$;
      3. 如果为误分类点,即$y_i(w\cdot x_i+b)\le0$,

        $$ \begin{aligned} &w\leftarrow w+\eta y_ix_i\\ &b\leftarrow b+\eta y_i \end{aligned} $$

      4. 到2步,直至没有误分类点。
  • 感知机学习算法由于采取不同的初值或选取不同的误分类点,解可以不同。

【学习算法-对偶形式】

  • 对偶形式的基本想法是,将$w$和$b$表示为实例$x_i$和标记$y_i$的线性组合的形式,通过求解其系数而得到$w$和$b$。
  • 对偶形式的构造:

    • 在原始形式中,设初始值$w_0$和$b_0$均为0,对误分类点$(x_i,y_i)$进行随机梯度下降,逐步修改$w$和$b$;
    • 设修改$n$次,则$w$和$b$关于$(x_i,y_i)$的增量分别为$\alpha_iy_ix_i$和$\alpha_iy_i$,即$\alpha_i=n_i\eta$;
    • 最后学到的$w,b$可以表示为:

      $$ \begin{aligned} &w=\sum^N_{i=1}\alpha_iy_ix_i\\ &b=\sum^N_{i=1}\alpha_iy_i \end{aligned} $$

  • 感知机学习算法对偶形式:

    • 输入:

      • 训练数据集$T=\{(x_1,y_1),(x_2,y_2)...,(x_N,y_N)\}$,其中$x_i\in\mathcal{X}\subseteq {\rm R}^n$,$y_i\in\mathcal{Y}=\{+1,-1\}$
      • 学习率(learning rate)/步长$\eta$ ($0<\eta\le1$)
    • 输出:

      • $\alpha,b$,感知机模型 $f(x)={\rm sign}(\sum^N_{j=1}\alpha_jy_jx_j\cdot x+b)$,其中$\alpha=(\alpha_1,\alpha_2,...,\alpha_N)^T$
    • 算法步骤:

      1. $\alpha\leftarrow0$,$b\leftarrow0$;
      2. 在训练集中选取数据$(x_i,y_i)$;
      3. 如果为误分类点,即$(\sum^N_{j=1}\alpha_jy_jx_j\cdot x_i+b)\le0$,

        $$ \begin{aligned} &\alpha_i\leftarrow\alpha_i+\eta\\ &b\leftarrow b+\eta y_i \end{aligned} $$

      4. 到2步,直至没有误分类点。
  • 在对偶形式中,训练实例仅以内积形式$x_ix_j$出现,所以可以预先将内积求出并以矩阵形式存储,这个矩阵就是所谓的Gram矩阵:$\textbf{G}=[x_i\cdot x_j]_{N\times N}$。
  • 与原始形式一样,感知机学习算法的对偶形式也是存在多个解。
  • 两个形式的计算示例可以参考《统计学习方法》中的示例。

3. 感知机学习的评价

【线性可分性与收敛性】

  • 对一个数据集$T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}$,若存在某个超平面$S$:$w\cdot x+b=0$ 能将正实例点和负实例点完全正确地划分到超平面的两侧,即对所有$y_i=+1$的实例$i$,有$w\cdot x_i+b>0$;对所有$y_i=-1$的实例$i$,有$w\cdot x_i+b<0$。则称数据集$T$为线性可分数据集(linearly separable data set),否则称之为线性不可分
  • 当数据集线性可分时,感知机学习算法的原始形式和对偶形式迭代都是收敛的(converge);而当训练集线性不可分时,感知机学习算法不收敛,迭代结果会发生震荡(fluctuation)(《统计学习方法》中给出了推导的过程,证明对线性可分数据集,感知机学习的迭代次数是有上限的)。

【感知机与神经元】

  • 从神经网络的角度看,感知机由两层神经元组成,具体的内容可以看《机器学习》中的神经网络部分,或后续的博客。

【感知机的扩展】

  • 感知机的扩展学习包括口袋算法(pocket algorithm)、表决感知机(voted perceptron)、带边缘感知机(preceptron with margin)等。
如今看来,感知机方法很简单,在很多的书中也已经只是神经网络章节中的一小部分,但其用连续可导的损失函数来进行梯度下降更新权值、对偶形式的推广等,确仍然是显得如此的精妙无比。
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
LogicAether
LogicAether
Lv1
我有一瓢酒,可以慰风尘。
文章
4
粉丝
0
获赞
0