感知机是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,取+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 ϵ R n w\epsilon R^n wϵRn叫做权值(weight)或权值向量(weight vector), b ϵ R b\epsilon R bϵR叫做偏置(bias)。 w ⋅ x w\cdot x w⋅x表示w与x的内积。
s i g n ( x ) = { + 1 , x ⩾ 0 − 1 , x < 0 sign(x)=\left\{\begin{matrix}+1 &,x\geqslant 0 \\ -1 &,x<0 \end{matrix}\right. sign(x)={+1−1,x⩾0,x<0
感知机只对线性可分数据集(linearly separable data set)有效。
损失函数的选择:一个自然的选择是误分类的总数。但是,这样的损失函数不是参数w,b的连续可导函数,不宜优化。另一个选择是误分类点到超平面S的总局和。
输入空间 R n R^n Rn中任意一点 x 0 x_0 x0到超平面S的距离:(二维推导可采用两个直角三角形面积相等)
1 ∥ w ∥ ∣ w ⋅ x 0 + b ∣ \frac{1}{\left \| w \right \|}\left | w\cdot x_0+b \right | ∥w∥1∣w⋅x0+b∣
∥ w ∥ \left \| w \right \| ∥w∥是w的 L 2 L_2 L2范数。
对于误分类的数据 ( x i , y i ) (x_i,y_i) (xi,yi)来说(去掉绝对值,考虑符号正负),误分类点到S的距离为:
− 1 ∥ w ∥ y i ( w ⋅ x i + b ) -\frac{1}{\left \| w \right \|}y_i\left ( w\cdot x_i+b \right ) −∥w∥1yi(w⋅xi+b)
设误分点集合为M,所有误分点到S平面的总距离为:
− 1 ∥ w ∥ ∑ x i ϵ M y i ( w ⋅ x 0 + b ) -\frac{1}{\left \| w \right \|}\sum_{x_i\epsilon M}y_i\left ( w\cdot x_0+b \right ) −∥w∥1xiϵM∑yi(w⋅x0+b)
不考虑 1 ∥ w ∥ \frac{1}{\left \| w \right \|} ∥w∥1,就得到感知机损失函数。
为什么可以不考虑 1 ∥ w ∥ \frac{1}{\left \| w \right \|} ∥w∥1?
1、 1 ∥ w ∥ \frac{1}{\left \| w \right \|} ∥w∥1不影响 y i ( w ⋅ x 0 + b ) y_i\left ( w\cdot x_0+b \right ) yi(w⋅x0+b)正负的判断,因此不影响算法的中间过程。感知机是被误分类驱动的。
2、 1 ∥ w ∥ \frac{1}{\left \| w \right \|} ∥w∥1不影响最终的学习结果。感知机最终期望的结果是所有点被正确分类,即 − 1 ∥ w ∥ ∑ x i ϵ M y i ( w ⋅ x 0 + b ) -\frac{1}{\left \| w \right \|}\sum_{x_i\epsilon M}y_i\left ( w\cdot x_0+b \right ) −∥w∥1∑xiϵMyi(w⋅x0+b)的分子部分为零。可以看出 1 ∥ w ∥ \frac{1}{\left \| w \right \|} ∥w∥1不影响最终结果。
所以,感知机损失函数定义为:
L ( x , b ) = − ∑ x i ϵ M y i ( w ⋅ x 0 + b ) L(x,b)=-\sum_{x_i\epsilon M}y_i\left ( w\cdot x_0+b \right ) L(x,b)=−xiϵM∑yi(w⋅x0+b)
感知机问题转化为求解损失函数的最优化问题,最优化的方法是随机梯度下降法。
首先,任意选取一个超平面 w 0 , b 0 w_0,b_0 w0,b0,然后用梯度下降法不断极小化目标函数。极小化过程中不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。
(感知机学习算法是对上述损失函数进行极小化,求得w和b。但是用普通的基于所有样本的梯度和的均值的批量梯度下降法(BGD)是行不通的,原因在于我们的损失函数里面有限定,只有误分类的M集合里面的样本才能参与损失函数的优化。所以我们不能用最普通的批量梯度下降,只能采用随机梯度下降(SGD))
假设误分类点集合M是固定的,那么损失函数 L ( x , b ) L(x,b) L(x,b)的梯度为:
▽ w L ( w , b ) = − ∑ x i ϵ M y i x i \bigtriangledown_wL(w,b)=-\sum_{x_i\epsilon M}y_ix_i ▽wL(w,b)=−xiϵM∑yixi
▽ b L ( w , b ) = − ∑ x i ϵ M y i \bigtriangledown_bL(w,b)=-\sum_{x_i\epsilon 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\leftarrow w+\eta y_ix_i w←w+ηyixi
b ← w + η y i b\leftarrow w+\eta y_i b←w+ηyi
η \eta η,( 0 < η ≤ 1 0<\eta \leq 1 0<η≤1)是步长又称为学习速率(learning rate)。
算法步骤:(感知机学习算法的原始形式)
输入:悬链数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) } T =\{ {(x_1,y_1),(x_2,y_2),...(x_N,y_N)}\} T={(x1,y1),(x2,y2),...(xN,yN)},其中 x i ϵ χ = R n x_i\epsilon\chi= R^n xiϵχ=Rn, y i ϵ { − 1 , + 1 } , i = 1 , 2 , . . . , N y_i \epsilon\{-1,+1\},i=1,2,...,N yiϵ{−1,+1},i=1,2,...,N;学习率 η \eta η( 0 < η ≤ 1 0<\eta \leq 1 0<η≤1);
输出:w,b;感知机模型 f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w\cdot x+b) f(x)=sign(w⋅x+b)。
(1)选取初值 w 0 , b 0 w_0,b_0 w0,b0;
(2)在训练数据集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi);
(3)如果 y i ( w ⋅ x i + b ) ≤ 0 y_i\left ( w\cdot x_i+b \right )\leq0 yi(w⋅xi+b)≤0,
w ← w + η y i x i w\leftarrow w+\eta y_ix_i w←w+ηyixi
b ← w + η y i b\leftarrow w+\eta y_i b←w+ηyi
(4)转至(2),直至训练集中没有误分类点。
感知机学习算法由于采用不同的初值或选取不同的误分类点,解可以不同。
对偶形式的基本想法是,将w,b表示为实习 x i x_i xi和 y i y_i yi的线性组合形式,通过求解其系数而求得的w和b。
在原始算法的基础上,不失一般性,可以假设初始值选取初值 w 0 , b 0 w_0,b_0 w0,b0均为0。对误分点通过
w ← w + η y i x i w\leftarrow w+\eta y_ix_i w←w+ηyixi
b ← w + η y i b\leftarrow w+\eta y_i b←w+ηyi
逐步修改w,b,设修改n次,最后学习到的w,b可以表示为:
w = ∑ i = 1 N α i y i x i w=\sum_{i=1}^{N}\alpha_iy_ix_i w=i=1∑Nαiyixi
b = ∑ i = 1 N α i y i b=\sum_{i=1}^{N}\alpha_iy_i b=i=1∑Nαiyi
α i = n i η \alpha_i=n_i\eta αi=niη
算法:(感知机学习的对偶形式)
输入:悬链数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) } T =\{ {(x_1,y_1),(x_2,y_2),...(x_N,y_N)}\} T={(x1,y1),(x2,y2),...(xN,yN)},其中 x i ϵ χ = R n x_i\epsilon\chi= R^n xiϵχ=Rn, y i ϵ { − 1 , + 1 } , i = 1 , 2 , . . . , N y_i \epsilon\{-1,+1\},i=1,2,...,N yiϵ{−1,+1},i=1,2,...,N;学习率 η \eta η( 0 < η ≤ 1 0<\eta \leq 1 0<η≤1);
输出:w,b;感知机模型 f ( x ) = s i g n ( ∑ i = 1 N α i y i x i ⋅ x + b ) f(x)=sign(\sum_{i=1}^{N}\alpha_iy_ix_i\cdot x+b) f(x)=sign(∑i=1Nαiyixi⋅x+b)。其中 α = ( α 1 , α 2 , . . . , α N ) T \alpha =(\alpha_{1},\alpha_{2},...,\alpha_{N})^{T} α=(α1,α2,...,αN)T。
(1) α ← 0 , b ← 0 \alpha \leftarrow 0,b\leftarrow 0 α←0,b←0;
(2)在训练数据集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi);
(3)如果 y i ( ∑ i = 1 N α i y i x i ⋅ x i + b ) ≤ 0 y_i\left (\sum_{i=1}^{N}\alpha_iy_ix_i\cdot x_i+b \right )\leq0 yi(∑i=1Nαiyixi⋅xi+b)≤0,
α i ← α i + η \alpha_{i}\leftarrow \alpha_{i}+\eta αi←αi+η
b ← b + η y i b\leftarrow b+\eta y_i b←b+ηyi
(4)转至(2),直至训练集中没有误分类点。
对偶形式中训练实例仅以内积的形式出现。为了方便,可以预先将悬链集中实例内积计算出来,并以矩阵的形式储存,这个矩阵就是Gram矩阵。
G = [ x i ⋅ x j ] N × N G=\left[x_i\cdot x_j\right]_{N \times N} G=[xi⋅xj]N×N
在向量维数(特征数)过高时,计算内积非常耗时,应选择对偶形式算法加速。
在向量个数(样本数)过多时,每次计算累计和就没有必要,应选择原始算法
当训练数据集线性可分时,感知机学习算法原始形式和对偶形式的迭代是收敛的,存在多个解。