简介
感知机(perceptron)是二分类的线性分类模型,简单理解为一个超平面把两个类别的数据切成两半。
它是SVM、神经网络的基础,相当于加减乘除,所以必须学一下,最好理解透彻。
按照统计学习方法三要素来学习:模型、策略、算法。
模型
定义比较冗长,自己去看,只说核心点,模型函数:
f
(
x
)
=
s
i
g
n
(
w
T
⋅
x
+
b
)
f(x)=sign(w^T \cdot x+b)
f(x)=sign(wT⋅x+b)
其中
w
w
w是权值向量,
b
b
b是偏置。
用人话来说, w T x + b w^Tx+b wTx+b就是个多项式,展开就是 b + w 1 x 1 + w 2 x 2 + ⋯ b+w_1x_1+w_2x_2+\cdots b+w1x1+w2x2+⋯
上面的 w = ( w 1 , w 2 , ⋯ ) T w=(w_1,w_2,\cdots)^T w=(w1,w2,⋯)T, x = ( x 1 , x 2 , ⋯ ) T x=(x_1,x_2,\cdots)^T x=(x1,x2,⋯)T,至于为什么把 w w w和 x x x规定成列向量,我想到一个点,就是在线性代数方程组的情况下,输出 y y y是一列的,然后这样把 x x x规定成列向量,好看一点。
比如,这样排列:
b
+
(
w
1
w
2
⋮
)
T
(
x
1
x
2
⋮
)
=
(
y
1
y
2
⋮
)
b + \begin {pmatrix} w_1 \\ w_2 \\ \vdots \end {pmatrix} ^T \begin {pmatrix} x_1 \\ x_2 \\ \vdots \end {pmatrix}= \begin {pmatrix} y_1 \\ y_2 \\ \vdots \end {pmatrix}
b+⎝⎜⎛w1w2⋮⎠⎟⎞T⎝⎜⎛x1x2⋮⎠⎟⎞=⎝⎜⎛y1y2⋮⎠⎟⎞
这样一一对应,感觉就很棒。
s
i
g
n
sign
sign函数:
s
i
g
n
(
x
)
=
{
+
1
,
x
≥
0
−
1
,
x
<
0
sign(x)= \begin {cases} +1, & x \ge 0\\[2ex] -1, & x \lt 0 \end {cases}
sign(x)=⎩⎨⎧+1,−1,x≥0x<0
这个函数过于简单,不再赘述。
策略
策略就是学习策略,说人话就是找到最合适的 w w w和 b b b,怎么定义这个最合适,就是策略。
感知机使用损失函数作为学习策略,使损失函数降到最低。
感知机在样本空间里是一个超平面,很容易想到的损失函数就是被误分类的点到这个超平面的距离之和,这个和等于0的时候,就是没有误分类点了。
那么对于样本空间任意一点
x
0
x_0
x0,到超平面
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0的距离,由初中数学知识可得:
1
∣
∣
w
∣
∣
∣
w
T
⋅
x
0
+
b
∣
\frac 1 {||w||} |w^T\cdot x_0 + b|
∣∣w∣∣1∣wT⋅x0+b∣
其中,
∣
∣
w
∣
∣
||w||
∣∣w∣∣是
w
w
w的
L
2
L_2
L2范数,
∣
∣
w
∣
∣
=
w
1
2
+
w
2
2
+
⋯
||w||=\sqrt {w_1^2+w_2^2+ \cdots}
∣∣w∣∣=w12+w22+⋯
由模型的定义知,对于正确分类点来说,
w
T
x
i
+
b
≥
0
w^Tx_i+b\ge0
wTxi+b≥0时,
y
i
=
+
1
y_i=+1
yi=+1;当
w
T
x
i
+
b
<
0
w^Tx_i+b\lt0
wTxi+b<0时,
y
i
=
−
1
y_i=-1
yi=−1。那么对于误分类点来说,情况就是反的,即
w
T
x
i
+
b
≥
0
w^Tx_i+b\ge0
wTxi+b≥0时,
y
i
=
−
1
y_i=-1
yi=−1;当
w
T
x
i
+
b
<
0
w^Tx_i+b\lt0
wTxi+b<0时,
y
i
=
+
1
y_i=+1
yi=+1,因此,在误分类点的距离公式中加入
y
y
y,就得到误分类点
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi)到超平面的距离:
−
1
∣
∣
w
∣
∣
y
i
(
w
T
⋅
x
i
+
b
)
-\frac 1 {||w||} y_i(w^T\cdot x_i + b)
−∣∣w∣∣1yi(wT⋅xi+b)
误分类点的集合为
M
M
M,则所有误分类点到超平面的距离之和为:
−
1
∣
∣
w
∣
∣
∑
x
i
∈
M
y
i
(
w
T
⋅
x
i
+
b
)
-\frac 1 {||w||} \sum_{x_i \in M} y_i(w^T\cdot x_i + b)
−∣∣w∣∣1xi∈M∑yi(wT⋅xi+b)
在计算损失函数的时候,可以忽略掉这里的
1
∣
∣
w
∣
∣
\frac 1 {||w||}
∣∣w∣∣1,可以忽略的原因我在CSDN、百度、知乎、其他博客都找了一下,原因大致归为两点:
① 1 ∣ ∣ w ∣ ∣ \frac 1 {||w||} ∣∣w∣∣1的符号一直为正数,而这里的loss function是误分类点驱动的,即正分类点对于loss function没有影响,可以认为这里的loss function和 1 ∣ ∣ w ∣ ∣ \frac 1 {||w||} ∣∣w∣∣1不相关,直接忽略掉。
② 基本和第一点一致,就是算法的终止条件是距离之和为0,和分母没有关系。
按照我自己的理解,那个分母,会影响超平面的位置,但是不会影响到超平面正确将数据点分割开,即可认为对模型的结果没有影响,而且可以简化运算,就直接忽略了。
于是损失函数就变为:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
T
x
+
b
)
L(w,b) = -\sum_{x_i \in M} y_i(w^T x + b)
L(w,b)=−xi∈M∑yi(wTx+b)
其中
M
M
M代表所有误分类点的集合。
那么现在模型的求解,转变成了最优化 L ( w , b ) L(w,b) L(w,b)函数。
算法
书中给的最优的方法是梯度下降法,这里不介绍梯度下降法的具体过程,只进行使用。
原始形式
用
L
(
w
,
b
)
L(w,b)
L(w,b)对
w
w
w和
b
b
b分别求偏导得到:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} &…
根据梯度下降法,随机选取一个误分类点
(
x
i
,
y
i
)
(x_i, y_i)
(xi,yi),对
(
w
,
b
)
(w,b)
(w,b)进行更新:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} w…
其中
η
(
0
<
η
≤
1
)
\eta(0\lt \eta \le 1)
η(0<η≤1)为步长,在机器学习里叫学习率,可以自己设定。
综上所述,算法步骤描述如下:
- 选取初值 w 0 w_0 w0和 b 0 b_0 b0
- 在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
- 如果 y i ( w T x i + b ) ≤ 0 y_i(w^Tx_i+b)\le0 yi(wTxi+b)≤0,使用公式KaTeX parse error: Undefined control sequence: \eqref at position 1: \̲e̲q̲r̲e̲f̲{1}来更新 w w w和 b b b的值
- 跳回到第2步,直至训练集中没有误分类点
然后自己去动手做一遍《统计学习方法》的例2.1,基本上就彻底就闹明白感知机怎么玩的了。
对偶形式
先说为什么会有对偶形式:方便计算,真的很方便计算,手推一遍例2.2,就知道这玩意有多方便计算了,不管是手推还是计算机来算,对偶形式的计算量比原始形式小的多的多,就是比原始形式稍微难以理解一点。
在原始形式里,由公式KaTeX parse error: Undefined control sequence: \eqref at position 1: \̲e̲q̲r̲e̲f̲{1},每一次迭代,
w
w
w和
b
b
b都会有一个增量,假设模型一共迭代
n
n
n次,设
α
i
=
n
η
\alpha_i=n\eta
αi=nη,则最后的学习到的参数可以表示为:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} w…
则模型转换为:
f
(
x
)
=
s
i
g
n
(
∑
j
=
1
N
α
j
x
j
y
j
⋅
x
+
b
)
f(x)=sign(\sum_{j=1}^{N}\alpha_jx_jy_j\cdot x+b)
f(x)=sign(j=1∑Nαjxjyj⋅x+b)
其中
α
=
(
α
1
,
α
2
,
⋯
,
α
N
)
T
\alpha = (\alpha_1,\alpha_2,\cdots,\alpha_N)^T
α=(α1,α2,⋯,αN)T。
算法也转换为:
-
令初始值 α = 0 , b = 0 \alpha=0,b=0 α=0,b=0
-
在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
-
如果 y i ( ∑ j = 1 N α j x j y j ⋅ x i + b ) ≤ 0 y_i(\sum_{j=1}^{N}\alpha_jx_jy_j\cdot x_i+b)\le0 yi(∑j=1Nαjxjyj⋅xi+b)≤0,用下列公式更新参数:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} \… -
跳回到第2步,直至训练集中没有误分类点
一定一定要去手动推一遍例2.1和例2.2,不行就推两遍,肯定会懂的。