感知机原理小结

感知机原理小结  感知机由Rosenblatt于1957年提出,是神经网络和支持向量机的基础。这里先简单介绍一下什么是感知机。本篇博客为《统计学方法》第二章和博客《感知机原理小结》的总结。感知机模型  感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,分别取+1+1+1和−1−1-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。这还是很…


Jetbrains全系列IDE稳定放心使用

  感知机由Rosenblatt于1957年提出,是神经网络和支持向量机的基础。这里先简单介绍一下什么是感知机。本篇博客为《统计学方法》第二章和博客《感知机原理小结》的总结。

感知机模型

  感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,分别取 +1 + 1 和 −1 − 1 二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。这还是很容易理解的,以二维平面为例,假设平面中存在着 ′∘′ ′ ∘ ′ 和 ′×′ ′ × ′ 两种形状的点,感知机要做的是就是找到一条直线,将两类点分割开,如下图所示。这里要注意的是,感知机只适合于线性可分的数据,所以它是一个线性模型。

感知机原理小结

  假设现在我们训练集有 m m 个样本,每个样本对应于
n

n
维特征和一个二元类别输出:

x(i)=(x(i)1,x(i)2,…,x(i)n),y(i)∈[−1,+1] (i=1,2,…,m) x ( i ) = ( x 1 ( i ) , x 2 ( i ) , … , x n ( i ) ) , y ( i ) ∈ [ − 1 , + 1 ]   ( i = 1 , 2 , … , m )

我们现在的目标就是找到一个超平面

S S
(为了表达简洁,后面都用向量形式了):


w⋅x+b=0

w ⋅ x + b = 0

其中

w w
是超平面的法向量,


b

b

是超平面的截距,这个超平面将特征空间划分为两个部分:

  对于

y(i)=−1 y ( i ) = − 1
的样本,

w⋅x(i)+b<0 w ⋅ x ( i ) + b < 0
;

  对于

y(i)=+1 y ( i ) = + 1
的样本,

w⋅x(i)+b>0 w ⋅ x ( i ) + b > 0
。

从而实现分类的目的。这就是感知机模型,可以表示为从输入空间到输出空间的函数:

f(x)=sign(w⋅x+b) f ( x ) = s i g n ( w ⋅ x + b )

其中权值

w∈Rn w ∈ R n
和偏置

b∈R b ∈ R
是感知机模型参数,比如二维平面中

w w
就是一个二维向量。



s i g n ( x )

是符号函数,即

sign(x)={
+1,−1,x≥0x<0
s i g n ( x ) = { + 1 , x ≥ 0 − 1 , x < 0

一旦学习到了

w w
和



b

的值,我们就可以利用

f(x(i)) f ( x ( i ) )
来判断新的样本属于哪一类别。

感知机学习策略

  感知机学习的目标是求得一个能够将训练集正类和负类样本点完全正确分开的分离超平面。为了确定超平面的参数 w w 和

b
,我们需要定义损失函数并将损失函数最小化。
  我们自然而然能想到的一个选择是最小化误分类点的总数,即 0−1 0 − 1 损失,但这样的损失函数不是参数 w,b w , b 的连续可导函数,难以优化。另一个选择是最小化误分类点到超平面 S S 的总距离,这正是感知机所采用的。
  先回顾一下空间任一点

x ( i )
到平面 w⋅x+b w ⋅ x + b 的距离公式:

|w⋅x(i)+b|∥w∥2 | w ⋅ x ( i ) + b | ‖ w ‖ 2

然后对于误分类的数据点 (x(i),y(i)) ( x ( i ) , y ( i ) ) ,总是满足 y(i)f(x(i))<0 y ( i ) f ( x ( i ) ) < 0 ,所以误分类点到超平面S的距离为:

−−y(i)(w⋅x(i)+b)∥w∥2 − − y ( i ) ( w ⋅ x ( i ) + b ) ‖ w ‖ 2

记误分类点的集合为 M M ,那么所有误分类点到超平面

S
的总距离为:

−1∥w∥2∑x(i)∈My(i)(w⋅x(i)+b) − 1 ‖ w ‖ 2 ∑ x ( i ) ∈ M y ( i ) ( w ⋅ x ( i ) + b )

由于我们总能通过缩放 w,b w , b 使得在不改变超平面的的情况下使 ∥w∥2=1 ‖ w ‖ 2 = 1 ,为了简化损失函数,我们不妨令 ∥w∥2=1 ‖ w ‖ 2 = 1 ,于是得到了感知机的损失函数最终形式如下:

L(w,b)=−∑x(i)∈My(i)(w⋅x(i)+b)(1) (1) L ( w , b ) = − ∑ x ( i ) ∈ M y ( i ) ( w ⋅ x ( i ) + b )

这个损失函数就是感知机学习的经验风险函数,显然 L(w,b) L ( w , b ) 是非负的,如果没有误分类点,损失函数值为0。误分类点越少,误分类点距离超平面越近,损失函数值就越小。
  最后一句话总结,感知机学习的策略是在假设空间中选取使损失函数式(1)最小的模型参数 w,b w , b ,即感知机模型。

感知机学习算法

  感知机学习问题就是损失函数式(1)的最优化问题,可以用随机梯度下降求解。下面介绍一下感知机学习算法的原始形式和对偶形式。

原始形式

  给定训练集 T T ,感知机学习的目标是:



(1) min w , b L ( w , b ) = − ∑ x ( i ) ∈ M y ( i ) ( w ⋅ x ( i ) + b )

其中 M M 是训练集中误分类点的集合。感知机学习算法是误分类驱动的,具体采用SGD,首先随机选取一个超平面

w 0 , b 0
,然后每次随机选取一个误分类点进行梯度下降。
  损失函数的梯度由

∇wL(w,b)∇bL(w,b)=−∑x(i)∈My(i)x(i)=−∑x(i)∈My(i) ∇ w L ( w , b ) = − ∑ x ( i ) ∈ M y ( i ) x ( i ) ∇ b L ( w , b ) = − ∑ x ( i ) ∈ M y ( i )

给出。然后每轮迭代选取一个误分类点 (x(i),y(i)) ( x ( i ) , y ( i ) ) 对 w,b w , b 进行更新:

wb=w−η∇wL(w,b)=w+ηy(i)x(i)=b−η∇bL(w,b)=b+ηy(i)(2) (2) w = w − η ∇ w L ( w , b ) = w + η y ( i ) x ( i ) b = b − η ∇ b L ( w , b ) = b + η y ( i )

其中 η η 为学习率。整个过程直观的解释是,每次遇到误分类点就调整 w,b w , b ,使超平面向误分类点的一侧移动,以减小改误分类点与超平面间的距离,直到超平面越过该点使其被正确分类。感知机学习算法存在许多解,这不仅依赖于 w,b w , b 初始值的选择,也依赖于误分类点的选择顺序。为了得到唯一的超平面,需要对分离超平面增加约束条件,这就是线性支持向量机的思想。
  最后提一下感知机的两点性质:
  (1) 当数据集线性可分的时候,学习算法一定收敛,即可以找到一个将数据点完全正确分开的超平面,而且误分类的次数是有上界的,即经过有限次的搜索一定可以找到最优分离超平面;
  (2) 当数据集不是线性可分的时候,学习算法不收敛,可能会发生震荡。

对偶形式

  这里顺便解释一下什么是对偶。对偶就是从一个不同的角度去解答相似问题,但是问题的解是相通的,甚至是一样一样的。那为什么感知机已经有原始形式了还要特地提出一个对偶形式?吃饱了撑着?不,这里引入对偶主要是为了减小计算量(特征维度越高越明显),至于为什么能减少计算量,等推导完对偶形式就自然而然出来了。
  感知机对偶形式的基本思路是,将 w w 和

b
表示为样本 x(i) x ( i ) 标记 y(i) y ( i ) 的线性组合的形式,这样就可以通过求解其系数而求得 w w 和

b
。
  不失一般性,我们可以假设初始值 w0,b0 w 0 , b 0 均为0,然后使用式(2)逐步调整 w,b w , b ,设现在迭代 n n 次,

w , b
关于 (x(i),y(i)) ( x ( i ) , y ( i ) ) 的增量分别是 αiy(i)x(i) α i y ( i ) x ( i ) 和 αiy(i) α i y ( i ) ,最后学习到的 w,b w , b 可以分别表示为:

wb=∑i=1nαiy(i)x(i)=∑i=1nαiy(i)(3) (3) w = ∑ i = 1 n α i y ( i ) x ( i ) b = ∑ i = 1 n α i y ( i )

这里 αi=niη α i = n i η , ni n i 表示到目前为止第 i i 个样本点由于误分类而进行更新的次数,即一开始每个样本的

n i = 0
,每次当这个样本误分类进行一次梯度下降更新时, ni n i 就加1。样本点更新次数越多,意味着它距离分离超平面就越近,也就越难正确分类。换句话说,这样的样本点对学习结果影响最大。
  然后,每次判断误分类点时,判断条件 y(i)(w⋅x(i)+b)≤0 y ( i ) ( w ⋅ x ( i ) + b ) ≤ 0 就变成了 y(i)(∑nj=1αiy(j)x(j)⋅x(i)+b)≤0 y ( i ) ( ∑ j = 1 n α i y ( j ) x ( j ) ⋅ x ( i ) + b ) ≤ 0 。这种形式有一个好处,就是在训练过程中,训练样本仅以内积 x(j)⋅x(i) x ( j ) ⋅ x ( i ) 的形式出现。我们可以预先将样本内积算出来并以矩阵的形式存储,在后面的迭代过程中这个结果将会被重复利用。这个样本内积矩阵也就是所谓的Gram矩阵:

G=[x(i)⋅y(j)]N×N G = [ x ( i ) ⋅ y ( j ) ] N × N

  现在来分析一下对偶为什么比原始形式好。
  (1) 第一个原因在上面提到了,就是计算量小。我们在每次迭代过程中都必须判断各个样本点是否误分类,在原始形式中我们利用 y(i)(w⋅x(i)+b)≤0 y ( i ) ( w ⋅ x ( i ) + b ) ≤ 0 判断,因为每次 w w 都有变化,所以每次都需要计算特征向量

x ( i )
和 w w 的乘积。在对偶形式中我们利用

y ( i ) ( ∑ j = 1 n α i y ( j ) x ( j ) ⋅ x ( i ) + b ) ≤ 0
来判断,这里索引Gram矩阵就能得到样本内积 x(j)⋅x(i) x ( j ) ⋅ x ( i ) ,且Gram矩阵可以预先计算好,之后迭代中的计算就全部可以通过查表的方式得到了,这相比原始形式每次迭代都需要计算 w⋅x(i) w ⋅ x ( i ) ,减少了大量的计算时间。
  (2) 内积形式很方便我们引入支持向量机的核方法,用来解决数据集线性不可分时的情况。
  
  最后总结一下感知机的对偶形式,它本质上就是用样本 x(i) x ( i ) 标记 y(i) y ( i ) 的线性组合去表达原始形式中的 w,b w , b ,如式(3)所示。这种形式的表达可以引入样本内积,减少计算量。然后对偶形式中要更新的模型参数就只有一个 αi=ηni α i = η n i 了,我们每次用一个误分类样本 x(i) x ( i ) 对参数进行更新,只需要将相应的 ni n i 加1,即

αi=η(ni+1)=αi+η(4) (4) α i = η ( n i + 1 ) = α i + η

这就是对偶形式的参数更新规则,和原始的随机初始化参数不同, αi α i 被初始化为0(因为 ni n i 一开始都为0)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184355.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 直插电阻类型_假插芯和真插芯的区别

    直插电阻类型_假插芯和真插芯的区别插件电阻也称为电阻器(Resistor)在日常生活中一般直接称为电阻。是一个限流元件,将电阻接在电路中后,电阻器的阻值是固定的一般是两个引脚,它可限制通过它所连支路的电流大小。插件电阻具体讲解大全:  固定电阻、可调电阻、特种电阻(敏感电阻)  不能调节的,我们称之为定值电阻或固定电阻,而可以调节的,我们称之为可调电阻.常见的可调电阻是滑动变阻器,例如收音机音量调节的装置是个圆形的滑动…

    2022年8月21日
  • 继电器模块典型电路图

    继电器模块典型电路图当控制端电压为0时,Q1基极电压为(12-0.7=11.3V),改变R1的大小便可改变基极电流,当基极电流足够大时,三极管饱合。为了验证以上的分析,我们搭了一个电路,R1取4.7K,此时基极电流为2.4ma,测得Q1ec电压为0.2V,继电器两端电压为11.8V。注意:R1的取值不能太小,要保证基极电流在安全范围,也不能太大,要保证三极管能完全饱合,这个可以通过电压和电阻算出

    2022年6月24日
  • 查看Linux内核版本的命令_ubuntu 查看内核

    查看Linux内核版本的命令_ubuntu 查看内核有朋友在使用Linux的过程中要查看Linux的内核版本号,这要怎么看呢?也有朋友文要怎么查看linux系统版本信息呢?下面和小编一起了解一下吧。一、查看linux内核版本号1:登录linux,在终端输入cat/proc/version2:登录linux,在终端输入uname-a即列出linux的内核版本号。二、查看linux系统版本信息1:登录到linux服务器执行lsb_rele…

    2022年8月23日
  • 2021.5clion激活码[在线序列号]

    2021.5clion激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
  • OpenWrite 博客群发使用步骤[通俗易懂]

    OpenWrite 博客群发使用步骤[通俗易懂]OpenWrite,做最懂自媒体的工具平台。主要是群发软件、博客导流公众号阅读全文工具媒体发布平台、博客群发平台、软文推广平台软文推广发布、博客发布官网引流科技小工具微信公众号Markdown编辑器、多平台免费图床配置Markdown编辑器的免费简洁流畅、文章一键群发等的免费自媒体运营工具助手注意:当前版本必须使用Chrome浏览器,并安装插件「OpenWrite助手」https://openwrite.cn/plugin-chrome/1、点击指定渠道图标,在新窗口登录渠道的账号

    2022年7月13日
  • Python:利用python代码编程实现将视频的avi格式转换为MP4格式

    Python:利用python代码编程实现将视频的avi格式转换为MP4格式​Python:利用python代码编程实现将视频的avi格式转换为MP4格式目录利用python代码编程实现将视频的avi格式转换为MP4格式T1、ffmpeg命令在dos内实现T2、python代码编程实现利用python代码编程实现将视频的avi格式转换为MP4格式T1、ffmpeg命令在dos内实现ffmpeg-y-iF:\File_Anaconda\project_py37\RealTimeImageAnimation\output\FamilyBa_HuGe.a

    2022年10月17日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号