本文主要介绍了两块内容:(1)感知机模型;(2)一种感知机优化算法。
感知机(Perceptron)模型介绍
公式1:h(x)=sign((i=1∑nwixi)−threshold)
其中(x1,x2,...,xn)代表n维特征,(w1,w2,...,wn,threshold)代表感知机模型的参数。
为了简化计算,我们将阈值threshold当做w0 ,引入一个x0=−1的特征与w0相乘,这样h(x)公式就可做如下变换:
公式2:h(x)=sign((i=1∑nwixi)−threshold)=sign(i=0∑nwixi)=sign(w⊤x)
几何解释
(∑i=1nwixi)−threshold=0是一个超平面,其中(w1,w2,...,wn)是该超平面的法向量,−threshold是超平面的截距。
优化算法(Perceptron Learning Algorithm, PLA)
理想情况下,我们的目标是找到一个超平面将空间中的正负类完全分开。
我们采取的优化策略思想为逐点修正。首先在平面上随意取一条直线,看看哪些点分类错误。然后开始对第一个错误点就行修正,即变换直线的位置,使这个错误点变成分类正确的点。接着,再对第二个、第三个等所有的错误分类点就行直线纠正,直到所有的点都完全分类正确了,就得到了最好的直线。
具体更新法则如下图:

这个更新法则其实可以这么理解:
假设超平面为:w⊤x+b=0
首先空间中任意一个xr点到超平面s的距离:∣w⊤xr+b∣/∣∣w∣∣
误分类点xi到s的距离:−yi∗(w⊤xi+b)/∣∣w∣∣
那么感知机的损失函数为:L(w,b)=−∑yi(w⊤xi+b)/∣∣w∣∣,其中(xi,yi)是误分类点。
不考虑系数∣∣w∣∣可得到损失函数:L(w,b)=−∑yi(w⊤xi+b),其中(xi,yi)是误分类点。
(为什么可以忽略系数∣∣w∣∣:因为感知机只要正确分类,loss即可为0,加不加∣∣w∣∣对最终结果没有影响)
利用梯度下降法更新参数:
首先求损失函数对w和b的梯度:
∂L(w,b)/∂w=−∑yixi
∂L(w,b)/∂b=−∑yi
更新w和b值
w=w+η∑yixi
b=b+η∑yi
这个与上述更新法则已经很接近了
那么实际的更新法则比上面讲的要笨一点,它没有统揽全局的本事,是通过一个一个看错误数据来优化参数的。
1)选取初始参数w0,b0;
2)从误分类点中随机选取一组:(xi,yi);
3)更新w=w+ηyixi,b=b+ηyi;
4)再挑选误分类点,再更新,直到没有误分类点。
非线性可分情况
首先初始化权重,并计算出错分点的个数。
然后对错误点进行修正,更新参数,更新方法与线性可分情况下的一致,并计算更新参数后模型的错分点个数,与之前错分点个数比较,取错分点个数较小的参数。
之后,再经过n次迭代,不断比较当前错分点个数与之前最少的错分点个数,选择错分点较小的参数值保存。
直到迭代次数完成后,选取错分点个数最少的参数。
理想情况感知机收敛证明



以上可以得出随着T变大,wf与模型参数向量内积更大;并且wf与模型参数向量夹角更小;说明模型参数向量与wf越来越接近。
而且,PLA最终会停下来(因为T有上界),实现对线性可分的数据集完全分类。