感知机是用于二分类的线性模型,输入是实例的特征,输出是类别。感知机模型目标是找到将数据线性划分的分离超平面。
感知机模型
假设输入空间为:
X
⊆
R
n
\mathcal X\sube \bf R^n
X⊆Rn,输出空间为:
Y
=
{
+
1
,
−
1
}
\mathcal Y=\{+1,-1\}
Y={+1,−1},且有
x
∈
X
,
y
∈
Y
x \in \mathcal X, y \in \mathcal Y
x∈X,y∈Y。感知机的模型如下:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign (w\cdot x+b)
f(x)=sign(w⋅x+b)
其中sign是指示函数:
s
i
g
n
(
x
)
=
{
0
,
x
≥
0
1
,
x
<
0
sign(x) = \begin{cases} 0,\qquad x \geq 0 \\1, \qquad x < 0\end{cases}
sign(x)={0,x≥01,x<0
训练完成后的感知机模型为下面的线性方程:
w
⋅
x
+
b
=
0
w\cdot x+b=0
w⋅x+b=0
上面的公式表示一个划分超平面:
w是超平面的法向量,b是超平面的截距。感知机的目标就是找到合适的参数w和b,使得划分超平面可以区分正负两个类别。
感知机损失函数
假定有数据集如下:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
}
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
…
,
N
;
0
<
η
⩽
1
T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}\\ x_i\in \mathcal X=\mathbf R^n, y_i\in \mathcal Y\it =\{-1,+1\}, i=1,2,\dots,N; \ \ 0<\eta\leqslant 1
T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N; 0<η⩽1
若训练集线性可分,损失函数可以用所有误分类点到超平面S的总距离表示。对某个样本而言,到超平面的距离为:
1
∣
∣
w
∣
∣
∣
w
⋅
x
0
+
b
∣
\frac{1}{||w||}|w\cdot x_0 + b|
∣∣w∣∣1∣w⋅x0+b∣
对于误分类点,总有
w
⋅
x
0
+
b
w\cdot x_0 + b
w⋅x0+b 与
y
i
y_i
yi 符号相反,故有:
−
y
i
(
w
⋅
x
0
+
b
)
>
0
-y_i(w\cdot x_0 + b)>0
−yi(w⋅x0+b)>0
进而可以得到误分类点到超平面的距离:
−
1
∣
∣
w
∣
∣
y
i
(
w
⋅
x
0
+
b
)
-\frac{1}{||w||} y_i(w\cdot x_0 + b)
−∣∣w∣∣1yi(w⋅x0+b)
假设误分类点构成集合M,则误分类点到超平面的距离之和为:
−
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)
令
∣
∣
w
∣
∣
=
1
||w||=1
∣∣w∣∣=1,得到损失函数:
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)
感知机参数学习
学习算法的原始形式
目标是找到最佳的参数w,b,使得损失函数最小化:
min
w
,
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
\min\limits_{w,b} L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)
w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b)
可以采用随机梯度下降法来优化参数,首先需要求w和b的偏导数:
∂
L
(
w
,
b
)
∂
w
=
−
∑
x
i
∈
M
x
i
y
i
∂
L
(
w
,
b
)
∂
b
=
−
∑
x
i
∈
M
y
i
\frac{\partial L(w,b)}{\partial w} = -\sum_{x_i \in M} x_i y_i\\ \frac{\partial L(w,b)}{\partial b} = -\sum_{x_i \in M} y_i
∂w∂L(w,b)=−xi∈M∑xiyi∂b∂L(w,b)=−xi∈M∑yi
然后更新参数,其中
η
\eta
η为学习率:
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_i
w←w+ηyixib←b+ηyi
算法流程如下:
输入: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , … , N ; 0 < η ⩽ 1 T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}\\ x_i\in \mathcal X=\mathbf R^n , y_i\in \mathcal Y\it =\{-1,+1\}, i=1,2,\dots,N; \ \ 0<\eta\leqslant 1 T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N; 0<η⩽1
输出: w , b ; f ( x ) = s i g n ( w ⋅ x + b ) w,b;f(x)=sign(w\cdot x+b) w,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(w\cdot x_i+b)\leqslant 0
yi(w⋅xi+b)⩽0,则更新参数:
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_i
w←w+ηyixib←b+ηyi
4,转至(2),直至训练集中没有误分类点
学习算法的对偶形式
上面的原始学习算法,我们通过以下方式更新参数:
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_i
w←w+ηyixib←b+ηyi
由于我们把w和b都初始化为0,所以每次更新w和b实际上都是在对
η
y
i
x
i
\eta y_ix_i
ηyixi和
η
y
i
\eta y_i
ηyi的累加。对偶形式的基本思想是,用实例
x
i
x_i
xi和标记
y
i
y_i
yi来表示w和b。对于某个误分类的样本i,可能需要
n
i
n_i
ni次对w,b的迭代才能使之正确分类,令
α
i
=
n
i
η
\alpha_i = n_i\eta
αi=niη则有:
w
=
∑
i
=
1
N
n
i
η
y
i
x
i
=
∑
i
=
1
N
α
i
y
i
x
i
b
=
∑
i
=
1
N
n
i
η
y
i
=
∑
i
=
1
N
α
i
y
i
w = \sum_{i=1}^Nn_i\eta y_i x_i = \sum_{i=1}^N\alpha_i y_i x_i \\ b = \sum_{i=1}^Nn_i\eta y_i = \sum_{i=1}^N\alpha_i y_i
w=i=1∑Nniηyixi=i=1∑Nαiyixib=i=1∑Nniηyi=i=1∑Nαiyi
上面的式子就能够仅仅用
x
i
x_i
xi和标记
y
i
y_i
yi的线性组合来表示w和b,于是算法流程更新为:
输入: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , … , N ; 0 < η ⩽ 1 T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}\\ x_i\in \mathcal{X}=\mathbf{R}^n , y_i\in \mathcal{Y} =\{-1,+1\}, i=1,2,\dots, N; 0< \eta \leqslant 1 T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N;0<η⩽1
输出:
α
,
b
;
f
(
x
)
=
s
i
g
n
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
+
b
)
α
=
(
α
1
,
α
2
,
⋯
,
α
N
)
T
\alpha ,b; f(x)=sign\left(\sum_{j=1}^N\alpha_jy_jx_j\cdot x+b\right)\\ \alpha=(\alpha_1,\alpha_2,\cdots,\alpha_N)^T
α,b;f(x)=sign(j=1∑Nαjyjxj⋅x+b)α=(α1,α2,⋯,αN)T
- α ← 0 , b ← 0 \alpha \leftarrow 0,b\leftarrow 0 α←0,b←0
- 训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
- 如果 y i ( ∑ j = 1 N α j y j x j ⋅ x + b ) ⩽ 0 y_i\left(\sum_{j=1}^N\alpha_jy_jx_j\cdot x+b\right) \leqslant 0 yi(∑j=1Nαjyjxj⋅x+b)⩽0
α i ← α i + η b ← b + η y i \alpha_i\leftarrow \alpha_i+\eta \\ b\leftarrow b+\eta y_i αi←αi+ηb←b+ηyi
- 转至(2),直至训练集中没有误分类点