感知机(perceptron) 是二类分类的线性分类模型,目的是找一个超平面2022-06-22-感知机 - 图1,将所有的训练数据分开,感知机模型要求输入数据线性可分。我们定义输入空间2022-06-22-感知机 - 图2,每一个x都是用向量表示。输出空间2022-06-22-感知机 - 图3. 我们希望通过训练数据集合,学的权重参数w和偏置参数b,有:
2022-06-22-感知机 - 图4%20%3D%20sign(wx%2Bb)%0A#card=math&code=f%28x%29%20%3D%20sign%28wx%2Bb%29%0A&id=wmBV3)
sign函数是符号函数,表示如下:
2022-06-22-感知机 - 图5

学习策略

感知机学习的目标是求得一个能够将训练集正实例点和 负实例点完全正确分开的分离超平面。为了找出这样的超平面,即确定感知机模型参数2022-06-22-感知机 - 图6, 需要确定一个学习策略,即定义(经验)损失函数并将损失函数极小化。

损失函数的一个自然选择是误分类点的总数。但是,这样的损失函数不是参数2022-06-22-感知机 - 图7的连续可导函数,不易优化。损失函数的另一个选择是最小化误分类点到超平面S的总距离,这是感知机所采用的。

首先,定义点2022-06-22-感知机 - 图8到超平面S的距离表示:
2022-06-22-感知机 - 图9
这里,||w||是w的L2范数。

然后,对于所有误分类的点集合 M 中的2022-06-22-感知机 - 图10#card=math&code=%28xi%2Cy_i%29&id=ziSdy),我们知道有2022-06-22-感知机 - 图11%3E0#card=math&code=-y_i%28wx_i%2Bb%29%3E0&id=Bdf9D)。因此,误分类点2022-06-22-感知机 - 图12到超平面 S 的总距离是:(不考虑2022-06-22-感知机 - 图13,就得到感知机的损失函数)
![](https://cdn.nlark.com/yuque/__latex/3f7970f1c526cc7c594810de26cb83eb.svg#card=math&code=-%5Cfrac%7B1%7D%7B%7C%7Cw%7C%7C%7D%5Csum
%7Bxi%E2%88%88M%7D%7By_i%28w%C2%B7x_i%2Bb%29%7D&id=YxGsI)
因此,我们最小化感知机的损失函数:
![](https://g.yuque.com/gr/latex?min
%7Bw%2Cb%7DL(w%2Cb)%3D-%5Cfrac%7B1%7D%7B%7C%7Cw%7C%7C%7D%5Csum%7Bx_i%20%5Cin%20M%7Dy_i(wx_i%2Bb)%3D-%5Csum%7Bxi%20%5Cin%20M%7Dy_i(wx_i%2Bb)%20%5Ctag%7B3%7D%0A#card=math&code=min%7Bw%2Cb%7DL%28w%2Cb%29%3D-%5Cfrac%7B1%7D%7B%7C%7Cw%7C%7C%7D%5Csum%7Bx_i%20%5Cin%20M%7Dy_i%28wx_i%2Bb%29%3D-%5Csum%7Bx_i%20%5Cin%20M%7Dy_i%28wx_i%2Bb%29%20%5Ctag%7B3%7D%0A&id=mr7fu)

使用梯度下降方法,我们知道有:
2022-06-22-感知机 - 图14%3D-%5Csum%7Bx_i%20%5Cin%20M%7Dy_ix_i%20%5Ctag%7B4%7D%0A#card=math&code=%5CDelta_wL%28w%2Cb%29%3D-%5Csum%7Bxi%20%5Cin%20M%7Dy_ix_i%20%5Ctag%7B4%7D%0A&id=jtWmf)
2022-06-22-感知机 - 图15%3D-%5Csum
%7Bxi%20%5Cin%20M%7Dy_i%20%5Ctag%7B5%7D%0A#card=math&code=%5CDelta_bL%28w%2Cb%29%3D-%5Csum%7Bxi%20%5Cin%20M%7Dy_i%20%5Ctag%7B5%7D%0A&id=Cqd18)
![](https://g.yuque.com/gr/latex?w
%7Bt%2B1%7D%3Dwt-%5Ceta%5CDelta_wL(w%2Cb)%20%5Ctag%7B6%7D%0A#card=math&code=w%7Bt%2B1%7D%3Dwt-%5Ceta%5CDelta_wL%28w%2Cb%29%20%5Ctag%7B6%7D%0A&id=PJFYI)
![](https://g.yuque.com/gr/latex?b
%7Bt%2B1%7D%3Dbt-%5Ceta%5CDelta_bL(w%2Cb)%20%5Ctag%7B7%7D%0A#card=math&code=b%7Bt%2B1%7D%3Db_t-%5Ceta%5CDelta_bL%28w%2Cb%29%20%5Ctag%7B7%7D%0A&id=Xorgr)

其中2022-06-22-感知机 - 图16#card=math&code=%5Ceta%280%3C%5Ceta%20%5Cleq1%29&id=cq3ms)是步长,又叫做学习率,表示参数更新的速度,建议不要太大,防止参数出现震荡,一般情况下学习率随着迭代次数逐渐减小。注意,我们计算损失函数的时候,没有加正则项,但是在实际的代码实现过程中,一定要加上正则项,一般使用L1和L2正则。