来源:原始 Jupyter Notebook。内容已转换为网页阅读格式;下载原文件。
感知机(perceptron)是一种非常简单的用于二分类的线性模型,对于线性可分的样本,它对应于输入空间中将样本划分为正负两类的划分超平面,感知机模型在 1957 年由 Rosenblatt 提出,是神经网络和支持向量机的基础。
感知机模型#
在支持向量机的学习中,我们知道,对于一个线性可分的输入空间,存在多个划分超平面可以将训练样本分开,如下图所示:

这样的划分超平面可以写成线性方程的形式:
wTx+b=0一旦将空间划分成两个部分之后,就可以通过 wTx+b 的符号来进行分类:
f(x)=sign(wTx+b)其中,sign 是符号函数,当 wTx+b≥0 时,将其归为正类,当 wTx+b<0 时,将其归为负类。这里的 f(x) 函数被称为 感知机(perceptron)模型。
感知机的损失函数#
输入空间中的某个点到划分超平面的距离可以写成:
r=∥w∥∣wTx+b∣如果某个点 (xi,yi) 被误分类,也就是说当 wTxi+b≥0 时,将其归为负类(yi=−1),当 wTxi+b<0 时,将其归为正类(yi=1),这时我们有:
−yi(wTxi+b)≥0所以对于误分类的点,它到划分超平面的距离可以写成:
r=∥w∥∣wTx+b∣=∥w∥−yi(wTxi+b)我们将所有误分类的点到划分超平面的距离累加,得到感知机的损失函数:
loss=−xi∈M∑yi(wTxi+b)这里我们把 ∥w∥1 省略了,它不影响损失函数的结果,其中 M 表示误分类点的集合,很显然,当没有点被误分类时,损失函数等于 0,感知机算法就是求损失函数最小时的 w、b 参数。
使用随机梯度下降训练感知机#
要使感知机的损失函数最小化,通常使用 随机梯度下降法(stochastic gradient descent),首先选取一个超平面 w0,b0,然后用梯度下降法不断的极小化损失函数,在极小化过程中每次随机选取一个误分类点使其梯度下降。
损失函数的梯度如下:
∇wloss∇bloss=−xi∈M∑yixi=−xi∈M∑yi随机选取一个误分类点 (xi,yi),对 w, b 的更新公式为:
wb:=w+ηyixi:=b+ηyi式中 η 是步长,又叫学习率。通过不断的迭代,损失函数不断减小,直到为 0 。
感知机算法的收敛性#
对于一个线性可分的数据集,感知机学习算法是不是一定收敛呢?这就需要引出 Novikoff 定理 了。
根据 Novikoff 定理,感知机算法在训练集上的误分类次数 k 满足不等式:
k≤(γR)2也就是说,误分类次数是有上界的,经过有限次迭代肯定可以找到将训练数据完全正确分开的超平面。
感知机算法的对偶形式#
f(x)=sign(j=1∑Nαjyjxj⋅x+b)参考《统计学习方法》中的实例。
感知机算法存在的问题#
感知机学习算法存在多个解,采用不同的初始值或者在迭代过程中改变选取误分类点的顺序,求得的解都会不同。为了得到唯一的超平面,需要对超平面增加约束条件,这就是线性支持向量机的想法。
当训练样本不是线性可分的时候,感知机算法不收敛,迭代结果会发生震荡。