感知机(Perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别(-1和+1),属于判别模型。其目标是求出将训练数据进行线性划分的分离超平面,基于误分类的损失函数,利用梯度下降法对损失函数进行极小化求得感知机模型。其优点是简单易于实现,分为对偶形式与原始形式。
感知机函数:
f ( x ) = s i g n ( w ⋅ x + b ) f(x) = sign(w \cdot x +b) f(x)=sign(w⋅x+b)
其中, w w w和 b b b为感知机模型参数, w ∈ R n w \in R^n w∈Rn叫作权值(weight)或权值限量, b ∈ R b \in R b∈R叫作偏置(bias), w ⋅ x w \cdot x w⋅x表示 w w w和 x x x的内积, s i g n sign sign是符号函数,即
s i g n ( x ) = { + 1 , x ≥ 0 − 1 , x < 0 sign(x) = \begin{cases} +1, x \geq0 \\\\ -1,x<0 \end{cases} sign(x)=⎩⎪⎨⎪⎧+1,x≥0−1,x<0
感知机的几何解释: w ⋅ x + b = 0 w \cdot x+b=0 w⋅x+b=0。对应于特征空间 R n R^n Rn的一个超平面的法向量,b是超平面的截距。这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别被分为正、负两类。因此,超平面S称为分离超平面。
感知机的学习,就是通过学习求得参数 w , b w,b w,b,并对新的输入数据给出其对应的输出类别,即计算结果大于0分类到+1,小于0分类到-1。
由于采用误分类点的总数作为损失函数时,其不是参数 w , b w,b w,b连续可导函数,不易优化。因此采用的是误分类点到超平面S的总距离。
输入空间 R n R^n Rn中任一点 x 0 x_{0} x0到超平面S的距离为 1 ∥ w ∥ y i ( w ⋅ x i + b ) \frac{1}{\|w\|}y_{i}(w \cdot x_{i} +b) ∥w∥1yi(w⋅xi+b),这里 ∥ w ∥ \|w\| ∥w∥是 w w w的 L 2 L_{2} L2范数。
因此,误分类点 x i x_{i} xi到超平面S的距离是 − 1 ∥ w ∥ y i ( w ⋅ x i + b ) -\frac{1}{\|w\|}y_{i}(w \cdot x_{i} +b) −∥w∥1yi(w⋅xi+b),这样,假设超平面S的误分类点集合为M,那么所有误分类点到超平面S的总距离为
− 1 ∥ w ∥ ∑ x i ∈ M y i ( w ⋅ x i + b ) -\frac{1}{\|w\|}\sum_{x_{i}\in M}y_{i}(w \cdot x_{i} + b) −∥w∥1xi∈M∑yi(w⋅xi+b)
不考虑 1 ∥ w ∥ \frac{1}{\|w\|} ∥w∥1,就得到感知机学习的损失函数。
给定训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\} T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中, x i ∈ X = R n x_{i} \in X = R^n xi∈X=Rn, y i ∈ Y = { + 1 , − 1 } y_{i} \in Y = \{+1,-1\} yi∈Y={+1,−1}, i = 1 , 2 , ⋯   , N i = 1,2,\cdots,N i=1,2,⋯,N。感知机学习的损失函数定义为
L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) L(w,b) = - \sum_{x_{i} \in M}y_{i}(w \cdot x_{i} + b) L(w,b)=−xi∈M∑yi(w⋅xi+b)
在介绍感知机的损失函数优化前,先简单说下梯度下降法。
**梯度下降法(Gradient descent)**是一个一阶最优化算法,那通常也称为最速下降法。 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。
任意选取一个超平面 w 0 , b 0 w_{0},b_{0} w0,b0,利用随机梯度下降法不断地极小化目标函数(一次随机选取一个误分类点使其梯度下降),这样通过迭代可以期待损失函数L(w,b)不断减小,直到为0。
假设误分类点集合 M M M是固定的,那么损失函数L(w,b)的梯度由以下给出
▽ w L ( w , b ) = − ∑ x i ∈ M y i x i \bigtriangledown_{w}L(w,b) = - \sum\limits_{x_{i}\in M}y_{i}x_{i} ▽wL(w,b)=−xi∈M∑yixi
▽ b L ( w , b ) = − ∑ x i ∈ M y i \bigtriangledown_{b}L(w,b) = - \sum\limits_{x_{i}\in M}y_{i} ▽bL(w,b)=−xi∈M∑yi
随机选取一个误分类点 ( x i , y i ) (x_{i},y_{i}) (xi,yi),对w,b进行更新:
w ← w + η y i x i w\gets w +\eta y_{i}x_{i} w←w+ηyixi
b ← b + η y i b\gets b +\eta y_{i} b←b+ηyi
式中 η ( 0 < η ≤ 1 ) \eta(0<\eta \leq 1) η(0<η≤1)是步长,又称为学习率(learning rate).
因此,也得到了感知机的算法。
选取初始值 w 0 , b 0 w_{0},b_{0} w0,b0,选择 ( x i , y i ) (x_{i},y_{i}) (xi,yi),计算 y i ( w ⋅ x i + b ) y_{i}(w\cdot x_{i} +b) yi(w⋅xi+b)的值,当一个实例点被误分类时,即该值小于等于0,对参数 w , b w,b w,b进行更新,直到训练集中没有误分类点。
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T = \{(x_{1},y_{1}),(x_{2},y_{2}),\cdots,(x_{N},y_{N})\} T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中 x i ∈ X = R n x_{i} \in X = R^{n} xi∈X=Rn, y i ∈ Y = { − 1 , + 1 } y_{i} \in Y = \{-1,+1\} yi∈Y={−1,+1}, i = 1 , 2 , ⋯   , N i = 1,2,\cdots, N i=1,2,⋯,N;学习率 η ( 0 < η ≤ 1 ) \eta(0<\eta\leq1) η(0<η≤1);
输出: w , b w,b w,b;感知机模型 f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w\cdot x+b) f(x)=sign(w⋅x+b).
选取初值 w 0 , b 0 w_{0},b_{0} w0,b0
在训练集中选取数据 ( x i , y j ) (x_{i},y_{j}) (xi,yj)
如果 y i ( w ⋅ x i + b ) ≤ 0 y_{i}(w\cdot x_{i} + b) \leq 0 yi(w⋅xi+b)≤0
w ← w + η y i x i w\gets w +\eta y_{i}x_{i} w←w+ηyixi
b ← b + η y i b\gets b +\eta y_{i} b←b+ηyi
转至2,直至训练集中没有误分类点。
设训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T = \{(x_{1},y_{1}),(x_{2},y_{2}),\cdots ,(x_{N},y_{N})\} T={(x1,y1),(x2,y2),⋯,(xN,yN)}是线性可分的,其中 x i ∈ X = R n x_{i}\in X= R^n xi∈X=Rn, y i ∈ Y = { + 1 , − 1 } y_{i}\in Y= \{+1,-1\} yi∈Y={+1,−1}, i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,⋯,N,则
存在满足条件 ∥ w ^ o p t ∥ = 1 \Vert\hat{w}_{opt} \Vert=1 ∥w^opt∥=1的超平面 w ^ o p t ⋅ x ^ = w o p t ⋅ x + b o p t = 0 \hat{w}_{opt}\cdot \hat{x} = w_{opt}\cdot x+b_{opt}=0 w^opt⋅x^=wopt⋅x+bopt=0将训练集完全正确分开;且存在 γ > 0 \gamma>0 γ>0,对所有 i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,⋯,N
y i ( w ^ o p t ⋅ x i ^ ) = y i ( w o p t ⋅ x i + b o p t ) ≥ γ y_{i}(\hat{w}_{opt}\cdot \hat{x_{i}} )= y_{i}(w_{opt}\cdot x_{i}+b_{opt}) \geq \gamma yi(w^opt⋅xi^)=yi(wopt⋅xi+bopt)≥γ
令R= max 1 ≤ i ≤ N ∥ x i ^ ∥ \max\limits_{1\leq i \leq N}\Vert\hat{x_{i}}\Vert 1≤i≤Nmax∥xi^∥,则感知机算法在训练集上的误分类次数k满足不等式
k < = ( R γ ) 2 k <=( \frac{R}{\gamma})^2 k<=(γR)2
由于训练集线性可分,存在超平面可将训练集完全正确分开,取此超平面为
w ^ o p t ⋅ x ^ = w ^ o p t ⋅ x i + b o p t = 0 \hat{w}_{opt} \cdot \hat{x} = \hat{w}_{opt} \cdot x_{i}+ b_{opt} = 0 w^opt⋅x^=w^opt⋅xi+bopt=0
使 ∥ w ^ o p t ∥ = 1 \|\hat{w}_{opt}\| = 1 ∥w^opt∥=1
因为完全分类正确
y i ( w ^ o p t ⋅ x ^ ) = y i ( w ^ o p t ⋅ x i + b o p t ) > 0 y_{i}(\hat{w}_{opt} \cdot \hat{x}) = y_{i}(\hat{w}_{opt} \cdot x_{i}+ b_{opt}) \gt 0 yi(w^opt⋅x^)=yi(w^opt⋅xi+bopt)>0
所以存在
γ = min i { y i ( w ^ o p t ⋅ x i + b o p t ) } \gamma = \min_{i}\{y_{i}(\hat{w}_{opt} \cdot x_{i}+ b_{opt})\} γ=imin{yi(w^opt⋅xi+bopt)}
使得
y i ( w ^ o p t ⋅ x ^ ) = y i ( w ^ o p t ⋅ x + b o p t ) ≥ γ y_{i}(\hat{w}_{opt} \cdot \hat{x}) = y_{i}(\hat{w}_{opt} \cdot x+ b_{opt}) \ge \gamma yi(w^opt⋅x^)=yi(w^opt⋅x+bopt)≥γ
w 0 ^ = 0 \hat{w_{0}} = 0 w0^=0, w k − 1 w_{k-1} wk−1:第 k k k个误分类点之前的扩充权重向量 w k − 1 = ( w k − 1 T , b k − 1 ) T w_{k-1}=(w_{k-1}^T,b_{k-1})^T wk−1=(wk−1T,bk−1)T
第 k k k个误分类点 ( x i , y i ) (x_{i},y_{i}) (xi,yi),则
− y i ( w k − 1 ⋅ x i + b k − 1 ) > 0 -y_{i}(w_{k-1} \cdot x_{i} + b_{k-1}) \gt 0 −yi(wk−1⋅xi+bk−1)>0
y i ( w k − 1 ⋅ x i + b k − 1 ) ≤ 0 y_{i}(w_{k-1} \cdot x_{i} + b_{k-1}) \le 0 yi(wk−1⋅xi+bk−1)≤0
误分类点后的更新:
w k ← w k − 1 + η y i x i w_{k}\gets w_{k-1} +\eta y_{i}x_{i} wk←wk−1+ηyixi
b k ← b k − 1 + η y i b_{k}\gets b_{k-1} +\eta y_{i} bk←bk−1+ηyi
即
w k ^ = w k − 1 ^ + η y i x i ^ \hat{w_{k}} = \hat{w_{k-1}} +\eta y_{i}\hat{x_{i}} wk^=wk−1^+ηyixi^
(1) 由 y i ( w o p t ^ ⋅ x i ^ ) = y i ( w o p t ⋅ x i + b o p t ) ≥ γ y_{i}(\hat{w_{opt}} \cdot \hat{x_{i}}) = y_{i}(w_{opt}\cdot x_{i}+b_{opt}) \geq \gamma yi(wopt^⋅xi^)=yi(wopt⋅xi+bopt)≥γ 和 y i ( w o p t ^ ⋅ x i ^ ) = y i ( w k − 1 ⋅ x i ) + b k − 1 ≤ 0 y_{i}(\hat{w_{opt}} \cdot \hat{x_{i}}) = y_{i}(w_{k-1}\cdot x_{i})+b_{k-1} \leq 0 yi(wopt^⋅xi^)=yi(wk−1⋅xi)+bk−1≤0 得,
w k ^ ⋅ w o p t ^ = w k − 1 ^ ⋅ w o p t ^ + η y i ( w o p t ^ w i ^ ) \hat{w_{k}} \cdot \hat{w_{opt}} = \hat{w_{k-1}} \cdot \hat{w_{opt}} + \eta y_{i} (\hat{w_{opt}}\hat{w_{i}}) wk^⋅wopt^=wk−1^⋅wopt^+ηyi(wopt^wi^)
≥ w k − 1 ^ ⋅ w o p t ^ + η γ \ge \hat{w_{k-1}} \cdot \hat{w_{opt}} + \eta \gamma ≥wk−1^⋅wopt^+ηγ
≥ w k − 2 ^ ⋅ w o p t ^ + 2 η γ \ge \hat{w_{k-2}} \cdot \hat{w_{opt}} +2 \eta \gamma ≥wk−2^⋅wopt^+2ηγ
≥ ⋯ \ge \cdots ≥⋯
≥ k η γ \ge k \eta \gamma ≥kηγ
所以, w k ^ ⋅ w o p t ^ ≥ k η γ \hat{w_{k}} \cdot \hat{w_{opt}} \ge k \eta \gamma wk^⋅wopt^≥kηγ
(2) 由 y i ( w o p t ^ ⋅ x i ^ ) = y i ( w k − 1 ⋅ x i ) + b k − 1 ≤ 0 y_{i}(\hat{w_{opt}} \cdot \hat{x_{i}}) = y_{i}(w_{k-1}\cdot x_{i})+b_{k-1} \leq 0 yi(wopt^⋅xi^)=yi(wk−1⋅xi)+bk−1≤0 和 w k ^ = w k − 1 ^ + η y i x i \hat{w_{k}} = \hat{w_{k-1}} + \eta y_{i}x_{i} wk^=wk−1^+ηyixi得,
∥ w k ^ ∥ 2 = ∥ w k − 1 ^ ∥ 2 + 2 η y i w k − 1 ^ x i + η 2 ∥ x i ^ ∥ 2 \|\hat{w_{k}}\|^2 =\|\hat{w_{k-1}}\|^2 + 2 \eta y_{i}\hat{w_{k-1}}x_{i} + \eta^2\|\hat{x_{i}}\|^2 ∥wk^∥2=∥wk−1^∥2+2ηyiwk−1^xi+η2∥xi^∥2
≤ ∥ w k − 1 ^ ∥ 2 + η 2 ∥ x i ^ ∥ 2 \le \|\hat{w_{k-1}}\|^2 + \eta^2\|\hat{x_{i}}\|^2 ≤∥wk−1^∥2+η2∥xi^∥2
≤ ∥ w k − 1 ^ ∥ 2 + η 2 R 2 \le \|\hat{w_{k-1}}\|^2 + \eta^2 R^2 ≤∥wk−1^∥2+η2R2
≤ ∥ w k − 2 ^ ∥ 2 + 2 η 2 R 2 \le \|\hat{w_{k-2}}\|^2 + 2\eta^2 R^2 ≤∥wk−2^∥2+2η2R2
≤ ⋯ \le \cdots ≤⋯
≤ k η 2 R 2 \le k\eta^2 R^2 ≤kη2R2
(3) 由(1) w k ^ ⋅ w o p t ^ ≥ k η γ \hat{w_{k}} \cdot \hat{w_{opt}} \ge k \eta \gamma wk^⋅wopt^≥kηγ 和 ∥ w k ^ ∥ 2 ≤ k η 2 R 2 \|\hat{w_{k}}\|^2 \le k\eta^2 R^2 ∥wk^∥2≤kη2R2,以及 z T u = ∥ z ∥ ⋅ ∥ u ∥ c o s θ ≤ ∥ z ∥ ⋅ ∥ u ∥ z^{T}u = \|z\| \cdot \|u\| cos \theta \le \|z\| \cdot \|u\| zTu=∥z∥⋅∥u∥cosθ≤∥z∥⋅∥u∥得,
k η γ ≤ w k ^ ⋅ w o p t ^ ≤ ∥ w k ^ ∥ ∥ w o p t ^ ∥ ≤ k η R k \eta \gamma \le \hat{w_{k}} \cdot \hat{w_{opt}} \le \|\hat{w_{k}}\|\|\hat{w_{opt}}\| \le \sqrt{k} \eta R kηγ≤wk^⋅wopt^≤∥wk^∥∥wopt^∥≤kηR
因此得,
k = ( R γ ) 2 k = (\frac{R}{\gamma})^2 k=(γR)2
因此,误分类的次数k是有上限的,经过有限次数搜索可以找到将训练数据完全正确分开的分离超平面,即当训练集线性可分时,感知机学习算法原始形式迭代是收敛的。
假设样本点 ( x i , y i ) (x_{i},y_{i}) (xi,yi)在更新过程中被使用了 n i n_{i} ni次,因此从原始形式的学习过程可以得到,最后学习到的w和b可以分别表示为: w = ∑ i = 1 N n i η y i x i w = \sum\limits_{i=1}^Nn_{i}\eta y_{i}x_{i} w=i=1∑Nniηyixi b = ∑ i = 1 N n i η y i b = \sum\limits_{i=1}^Nn_{i}\eta y_{i} b=i=1∑Nniηyi
n i n_{i} ni的含义:如果 n i n_{i} ni的值越大,说明这个样本点经常被误分。而离超平面很近的点,就很容易被误分。因为超平面稍微移动一点,这个点就可能从正变为负,或者从负变为正。
将上述 w w w和 b b b的公式代入原始形式的感知机模型中,可得:
f ( x ) = s i g n ( w ⋅ x + b ) = s i g n ( ∑ j = 1 N n j η y j x j ⋅ x + ∑ j = 1 N n j η y j ) f(x) = sign(w \cdot x + b) = sign(\sum\limits_{j=1}^Nn_{j}\eta y_{j}x_{j} \cdot x + \sum\limits_{j=1}^Nn_{j}\eta y_{j}) f(x)=sign(w⋅x+b)=sign(j=1∑Nnjηyjxj⋅x+j=1∑Nnjηyj)
此时,学习的目标就不再是 w w w和 b b b,而是 n i n_{i} ni, i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,⋯,N。
相应地,训练过程变为:
通过计算,对偶形式和原始形式的结果一致,从对偶形式的公式中可以看出,样本点的特征向量以内积的形式存在于感知机对偶形式的训练算法中,因此如果事先计算好所有的内积(也即Gram矩阵),就可以大大加快计算速度。
在前面我们证明了在线性可分的情况下,PLA是可以停下来并正确分类,但对于非线性可分的情况,实际上并不存在这样的一条线 ( w f ) (w_{f}) (wf),那么之前的推导并不成立,PLA不一定会停下来。所以,PLA虽然实现简单,但也有缺点:
在非线性可分的情况下,我们可以容忍有错误点,取错误点的个数最少时的权重w:
而对于以上的问题,难以求解。但我们可以在每次迭代的时候,计算该直线下得到错误分类点的个数,并与之前的个数作比较,然后取个数较小的直线作为我们当前选择的分类直线。直到迭代次数完成后,选取个数最少的直线对应的w,即为我们最终想要得到的权重值。下图为改进后的pocket PLA算法:
# perceptron
# max_iter: the number of epochs, eta0: learning rate eta
from sklearn.linear_model import Perceptron
ppn = Perceptron(max_iter=40, eta0=0.1, random_state=1)
ppn.fit(X_train_std, y_train)
详细代码见github
本文同步发布在我的github.io