《统计学习方法》(1)——感知机
1958年,Rosenblatt等人成功研制了代号为Mark I的感知机(perceptron),这是历史上首个神经网络的学习功能用于模式识别的装置,标志着神经网络进入了新的历史阶段。
\quad
1、感知机
感知机是二分类的线性分类模型,输入为实例的特征向量,输出是实例的类别,可以是-1和1。
试想一下我们有一数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
n
,
y
n
)
}
T = \{(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)\}
T={(x1,y1),(x2,y2),…,(xn,yn)},其中
x
i
∈
R
n
,
y
i
=
1
o
r
−
1
,
i
=
1
,
2
,
3
,
…
,
n
.
x_i\in R^n,\quad y_i = 1\: or \: -1, \quad i=1,2,3,\dots,n.
xi∈Rn,yi=1or−1,i=1,2,3,…,n.并且假设该数据集是线性可分的,那我们想能否在n维空间找到一个超平面
ω
T
x
+
b
=
0
\omega^Tx + b = 0
ωTx+b=0,该平面将数据集划分为两个部分,一部分是
y
i
=
1
y_i = 1
yi=1,另一部分
y
i
=
1
y_i = 1
yi=1。如下图所示:
这个超平面将T中的数据分为两类,即有:
ω
T
x
i
+
b
>
0
,
y
i
=
1
;
ω
T
x
i
+
b
<
0
,
y
i
=
−
1.
\omega^Tx_i + b >0,\quad y_i = 1; \quad \omega^Tx_i + b < 0,\quad y_i = -1.
ωTxi+b>0,yi=1;ωTxi+b<0,yi=−1.
从上图我们也可以看出,如果把斜率
ω
\omega
ω和截距
b
b
b稍微移动一点,也是可以分离两类数据的,所以感知机模型并不唯一。
同时我们也容易知道当一个特征向量
x
i
x_i
xi被误分类时,就有
y
i
(
ω
T
x
i
+
b
)
<
0
y_i(\omega^Tx_i + b) < 0
yi(ωTxi+b)<0成立。
下面我们就可以给出感知机的定义:
\quad
2、感知机的学习策略与算法
上面我们已经得出感知机的一般形式,关键就在于如何找出模型参数 ω \omega ω和 b b b,这里我们要使用损失函数 L ( ω , b ) L(\omega,b) L(ω,b),我们希望找到使得损失函数 L ( ω , b ) L(\omega,b) L(ω,b)最小的 ω \omega ω和 b b b。
所以现在的问题就是如何定义损失函数,以及如何找到参数
ω
\omega
ω和
b
b
b。我们希望得到的损失函数是关于参数
ω
\omega
ω和
b
b
b的连续可偏导函数,这样求函数的极值比较方便,常用的损失函数是函数间隔
L
(
ω
,
b
)
=
−
∑
x
i
∈
M
y
i
(
ω
T
x
i
+
b
)
L(\omega,b) = -\sum_{x_i \in M} y_i(\omega^T x_i +b)
L(ω,b)=−xi∈M∑yi(ωTxi+b)其中M为误分点的集合。那么求参数问题就转化为求极小化损失函数问题,即
m
i
n
ω
,
b
L
(
ω
,
b
)
min_{\omega,b}\: L(\omega,b)
minω,bL(ω,b).
至于为什么不用几何间隔 :
−
1
∣
∣
ω
∣
∣
∑
x
i
∈
M
y
i
(
ω
T
x
i
+
b
)
-\cfrac {1}{||\omega||} \sum_{x_i \in M} y_i(\omega^T x_i +b)
−∣∣ω∣∣1xi∈M∑yi(ωTxi+b)其中
∣
∣
ω
∣
∣
=
∑
i
=
1
n
w
i
2
||\omega|| = \sqrt{\sum_{i=1}^n \: w_i^2}
∣∣ω∣∣=∑i=1nwi2为
L
2
L_2
L2范数。我想可以有以下理解:
首先要明确的一点是损失函数是以误分类驱动的,当无误分类点时,损失函数为0;其次对线性可分的数据集,一定是能找到分离超平面的,也就是说一定能找到 ω \omega ω和 b b b,使得损失函数为0,在这个意义下极小化损失函数这种表述并不准确(因为我们就是要损失函数为0), 1 ∣ ∣ ω ∣ ∣ \frac {1}{||\omega||} ∣∣ω∣∣1并不影响我们的结果。再者 1 ∣ ∣ ω ∣ ∣ \frac {1}{||\omega||} ∣∣ω∣∣1也不影响符号,所以我们完全可以不考虑它。
在确定了损失函数之后,感知机学习的策略就是在假设空间(即线性模型空间)中选取使损失函数最小的模型参数 ω \omega ω和 b b b。这就转化为最优化问题,而其求解的方法就是随机梯度下降法。
感知机学习算法如下:
输入:训练数据
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
n
,
y
n
)
}
T = \{(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)\}
T={(x1,y1),(x2,y2),…,(xn,yn)},其中
x
i
∈
R
n
,
y
i
=
1
o
r
−
1
,
i
=
1
,
2
,
3
,
…
,
n
.
x_i\in R^n,\quad y_i = 1\: or \: -1, \quad i=1,2,3,\dots,n.
xi∈Rn,yi=1or−1,i=1,2,3,…,n. 学习率为
η
∈
(
0
,
1
]
\eta \in (0,1]
η∈(0,1].
输出:
ω
\omega
ω和
b
b
b;
感知机模型
f
(
x
)
=
s
i
g
n
(
ω
T
x
+
b
)
f(x) = sign(\omega^Tx +b)
f(x)=sign(ωTx+b).
1、选取初试值 ω 0 , b 0 \omega_0,b_0 ω0,b0(一般都取0);
2、在训练集中选取一个数据 ( x i , y i ) (x_i,y_i) (xi,yi);
3、若数据 ( x i , y i ) (x_i,y_i) (xi,yi)是误分点,即 y i ( ω T x i + b ) ≤ 0 y_i(\omega^Tx_i + b) \le 0 yi(ωTxi+b)≤0
L ( ω , b ) = − y i ( ω T x i + b ) ▽ ω L ( ω , b ) ) = − y i x i ▽ b L ( ω , b ) ) = − y i \begin{aligned} L(\omega,b) = -y_i(\omega^Tx_i + b)\\ \bigtriangledown_\omega L(\omega,b)) = -y_ix_i\\ \bigtriangledown_b L(\omega,b)) = -y_i \end{aligned} L(ω,b)=−yi(ωTxi+b)▽ωL(ω,b))=−yixi▽bL(ω,b))=−yi \quad 我们根据负梯度方向更新参数:
ω ← ω + η y i x i b ← b + η y i \begin{aligned} \omega \gets \omega + \eta y_i x_i\\ b \gets b+\eta y_i \:\:\:\:\: \end{aligned} ω←ω+ηyixib←b+ηyi
4转至第二步,直到没有误分点为止。
\quad
3、感知机的收敛性
首先,对于线性可分的数据集,一定是有分离超平面的(这一点是由线性可分的数据集的定义保证的)。那么现在就有另一个问题,就是根据随机梯度下降法,一共需要多少次能找到,Novikoff定理告诉我们,经过有限次迭代就可以找到分离超平面和感知机模型,定理如下:
4、总结
1、感知机模型简单,易于实现;
2、局限性很大,需要是线性可分的数据集,对于非线性可分的情形不适用,比如无法解决异或问题;
3、感知机模型不唯一,依赖于初值的选择,也依赖于迭代过程中误分类点的选择顺序;
4、由于考虑的是函数间隔而不是几何间隔,有些情况下,数据点可能离分离超平面非常近,从某种程度上说这样的分类效果并不是特别好,这个问题会在支持向量机中得到很好的解决。
更多内容见公众号大数据与AI小白