我们经常能在许多模型中看到MLP,那么MLP是什么呢?其实MLP就是多层感知机(Multi-Layer Perceptron),下面我们来跟随小蓝书介绍下感知机。感知机呢其实是一个简单的线性二分类模型,其输入自然是实例的特征向量,输出为类别,可记为+1和-1,属于判别模型。
2.1 感知机模型
定义2.1(感知机):输入空间
χ
⊆
R
n
\chi \subseteq R^n
χ⊆Rn,输出空间
γ
=
{
+
1
,
−
1
}
\gamma =\{+1,-1\}
γ={+1,−1},
x
∈
χ
x \in\chi
x∈χ表示实例的特征向量,
y
∈
γ
y \in \gamma
y∈γ表示实例的类别,则如下映射:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
(2-1)
f(x)=sign(w \cdot x+b)\tag{2-1}
f(x)=sign(w⋅x+b)(2-1)
称为感知机,sign是符号函数。其解释如下:
线性方程
w
⋅
x
+
b
=
0
w \cdot x+b=0
w⋅x+b=0对应特征空间
R
n
R^n
Rn中的一个超平面
S
S
S,
w
w
w是超平面的法向量,
b
b
b是超平面的截距,该超平面自然将特征空间分为两个部分,处于这两部分的点(特征向量)便是两类。
2.2 感知机学习策略(选择loss)
对于一个数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,
x
∈
χ
=
R
n
,
y
∈
γ
=
{
+
1
,
−
1
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},x \in \chi=R^n,y \in \gamma=\{+1,-1\}
T={(x1,y1),(x2,y2),...,(xN,yN)},x∈χ=Rn,y∈γ={+1,−1},若存在一个超平面
S
S
S能够将正实例点和负实例点完全正确地划分到超平面两边就称数据集
T
T
T为线性可分数据集。
现假设训练集是线性可分的,那么现在要用感知机来学习得到一个可以线性划分训练集的一个超平面,即学习得到参数
w
w
w和
b
b
b,这就需要一个学习策略,即找到一个损失函数并将其最小化,那么问题就是如何来衡量分类损失的大小,一个直观的想法是观察误分类点的个数,但是这样选择的话损失函数就不是关于参数的连续可导函数,不易优化,故否决。而最终感知机采用 误分类点到超平面
S
S
S的距离之和 作为损失函数。首先给出输入空间
R
n
R^n
Rn中任一点
x
0
x_0
x0到超平面
S
S
S的距离:
1
∣
∣
w
∣
∣
∣
w
⋅
x
0
+
b
∣
(2-2)
\frac{1}{||w||}|w\cdot x_0 +b|\tag{2-2}
∣∣w∣∣1∣w⋅x0+b∣(2-2)
至于为什么请看推导过程:
因为对于误分类点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)有
−
y
i
(
w
⋅
x
i
+
b
)
>
0
-y_i(w\cdot x_i +b)>0
−yi(w⋅xi+b)>0,那么误分类点到超平面的距离可记为:
−
1
∣
∣
w
∣
∣
y
i
(
w
⋅
x
i
+
b
)
(2-3)
-\frac{1}{||w||}y_i(w\cdot x_i +b)\tag{2-3}
−∣∣w∣∣1yi(w⋅xi+b)(2-3)
假设误分类点的集合为
M
M
M,那么所有误分类点到超平面的距离之和为:
−
1
∣
∣
w
∣
∣
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
(2-4)
-\frac{1}{||w||}\sum_{x_i \in M}y_i(w\cdot x_i +b)\tag{2-4}
−∣∣w∣∣1xi∈M∑yi(w⋅xi+b)(2-4)
不考虑
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1(注:之所以可以不考虑,个人觉得是因为loss的目标肯定是逼近0,那么主要就取决于式(2-4)后面的部分趋于0,因此可以不考虑)
给定一个训练集
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)},得到感知机学习的损失函数:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
(2-5)
L(w,b)=-\sum_{x_i \in M}y_i(w\cdot x_i +b)\tag{2-5}
L(w,b)=−xi∈M∑yi(w⋅xi+b)(2-5)
其为连续可导函数。
2.3 感知机学习算法
之前说到算法就是如何根据loss函数求解需要的参数从而得到模型。小蓝书在介绍算法时分为了两种形式:原始形式和对偶形式(后面的SVM也是)。
2.3.1 原始形式
我们需要求如下最小化问题的解即参数
w
,
b
w,b
w,b:
m
i
n
w
,
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
(2-6)
min_{w,b}L(w,b)=-\sum_{x_i \in M}y_i(w\cdot x_i +b)\tag{2-6}
minw,bL(w,b)=−xi∈M∑yi(w⋅xi+b)(2-6)
M
M
M为误分类点的集合。具体采用的算法是随机梯度下降法(SGD),就是首先选择一个初始的参数值
w
0
,
b
0
w_0,b_0
w0,b0,然后求(2-6)式关于参数的的梯度,用梯度下降来不断更新参数值,随机梯度下降不是一次使
M
M
M中所有误分类点的梯度下降,而是一次只是随机选择一个误分类点使其梯度下降。这里关于俩参数的梯度如下:
∇
w
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
x
i
(2-7)
\nabla_w L(w,b)=-\sum_{x_i \in M}y_ix_i\tag{2-7}
∇wL(w,b)=−xi∈M∑yixi(2-7)
∇
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(2-8)
\nabla_b L(w,b)=-\sum_{x_i \in M}y_i\tag{2-8}
∇bL(w,b)=−xi∈M∑yi(2-8)
然后随机选取一个误分类点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),对参数
w
,
b
w,b
w,b进行更新:
w
←
w
+
η
y
i
x
i
(2-9)
w\leftarrow w+\eta y_ix_i\tag{2-9}
w←w+ηyixi(2-9)
b
←
b
+
η
y
i
(2-10)
b\leftarrow b + \eta y_i\tag{2-10}
b←b+ηyi(2-10)
其中
η
(
0
<
η
≤
1
)
\eta(0<\eta \leq 1)
η(0<η≤1)为步长,又称学习率,这样不断迭代使得Loss趋向于0。直观上的理解就是当一个实例点被误分类时,就会让超平面向着该实例点的方向移动。那么感知机算法的原始形式总结起来如下:
输入:训练集
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 \in \chi =R^n
xi∈χ=Rn,
y
i
∈
γ
=
{
−
1
,
+
1
}
y_i \in \gamma=\{-1,+1\}
yi∈γ={−1,+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)
(1) 选取参数初值
w
0
,
b
0
w_0,b_0
w0,b0
(2) 选取一个误分类点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),即
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
b
←
b
+
η
y
i
w\leftarrow w+\eta y_ix_i\\ b\leftarrow b + \eta y_i
w←w+ηyixib←b+ηyi
(3) 转至(2)直到没有误分类点
如下是小蓝书上的一个简单的例子。
例2.1
给定训练集:正实例点为
x
1
=
(
3
,
3
)
T
,
x
2
=
(
4
,
3
)
T
x_1=(3,3)^T,x_2=(4,3)^T
x1=(3,3)T,x2=(4,3)T,负实例点为
x
3
=
(
1
,
1
)
T
x_3=(1,1)^T
x3=(1,1)T,试用感知机算法的原始形式来求解感知机模型,这里
w
=
(
w
(
1
)
,
w
(
2
)
)
T
,
x
=
(
x
(
1
)
,
x
(
2
)
)
T
w=(w^{(1)},w^{(2)})^T,x=(x^{(1)},x^{(2)})^T
w=(w(1),w(2))T,x=(x(1),x(2))T。
解: 首先毫无疑问构建最优化模型:
m
i
n
w
,
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
+
b
)
min_{w,b}L(w,b)=-\sum_{x_i \in M}y_i(w \cdot x+b)
minw,bL(w,b)=−xi∈M∑yi(w⋅x+b)
接下来就是求解参数
w
,
b
w,b
w,b,这里学习率取
η
=
1
\eta =1
η=1。
首这里参数初值取
w
0
=
(
0
,
0
)
T
,
b
0
=
0
w_0=(0,0)^T,b_0=0
w0=(0,0)T,b0=0。选取点
x
1
=
(
3
,
3
)
T
x_1=(3,3)^T
x1=(3,3)T来更新参数值:
w
1
=
w
0
+
y
1
x
1
=
(
3
,
3
)
T
b
1
=
b
0
+
y
1
=
1
w_1=w_0+y_1x_1=(3,3)^T\\ b_1=b_0+y_1=1
w1=w0+y1x1=(3,3)Tb1=b0+y1=1
此时得到的线性模型为:
w
1
⋅
x
+
b
1
=
3
x
(
1
)
+
3
x
(
2
)
+
1
w_1\cdot x + b_1=3x^{(1)}+3x^{(2)}+1
w1⋅x+b1=3x(1)+3x(2)+1
该模型对于点
x
1
,
x
2
x_1,x_2
x1,x2都可以得到
y
i
(
w
1
⋅
x
i
+
b
1
)
>
0
y_i(w_1\cdot x_i+b_1)>0
yi(w1⋅xi+b1)>0,即正确分类,但对于点
x
3
x_3
x3却有
y
3
(
w
1
⋅
x
3
+
b
1
)
=
−
7
<
0
y_3(w_1\cdot x_3 +b_1)=-7<0
y3(w1⋅x3+b1)=−7<0,即错误分类,因此再用点
x
3
x_3
x3来迭代参数如下:
w
2
=
w
1
+
y
3
x
3
=
(
2
,
2
)
T
b
2
=
b
1
+
y
3
=
0
w_2=w_1+y_3x_3=(2,2)^T\\ b_2=b_1+y_3=0
w2=w1+y3x3=(2,2)Tb2=b1+y3=0
得到这次迭代的线性模型:
w
2
⋅
x
+
b
2
=
2
x
(
1
)
+
2
x
(
2
)
w_2\cdot x+b_2=2x^{(1)}+2x^{(2)}
w2⋅x+b2=2x(1)+2x(2)
如此迭代下去得到:
w
7
=
(
1
,
1
)
T
,
b
7
=
−
3
w_7=(1,1)^T,b_7=-3
w7=(1,1)T,b7=−3
线性模型为:
w
7
⋅
x
+
b
7
=
x
(
1
)
+
x
(
2
)
−
3
w_7\cdot x+b_7=x^{(1)}+x^{(2)}-3
w7⋅x+b7=x(1)+x(2)−3
此时不存在误分类点,分离超平面为
x
(
1
)
+
x
(
2
)
−
3
=
0
x^{(1)}+x^{(2)}-3=0
x(1)+x(2)−3=0,感知机模型为:
f
(
x
)
=
s
i
g
n
(
x
(
1
)
+
x
(
2
)
−
3
)
f(x)=sign(x^{(1)}+x^{(2)}-3)
f(x)=sign(x(1)+x(2)−3)
注:解不唯一
2.3.2 对偶形式(与之后的SVM对应)
对偶形式的想法是:将参数
w
,
b
w,b
w,b表示为实例
x
i
x_i
xi和标签
y
i
y_i
yi的线性组合的形式。在原始形式的算法步骤中通过
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
w,b
w,b。那么假设一共修改了
n
n
n次,则参数
w
,
b
w,b
w,b关于
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的增量分别是
α
i
y
i
x
i
\alpha_iy_ix_i
αiyixi和
α
i
y
i
\alpha_iy_i
αiyi,其中
α
i
=
n
i
η
,
∑
i
=
1
N
n
i
=
n
\alpha_i=n_i\eta,\sum_{i=1}^{N}n_i=n
αi=niη,∑i=1Nni=n。具体步骤如下:
输入:训练集
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 \in \chi =R^n
xi∈χ=Rn,
y
i
∈
γ
=
{
−
1
,
+
1
}
y_i \in \gamma=\{-1,+1\}
yi∈γ={−1,+1}
输出:参数
α
,
b
\alpha,b
α,b,即得到感知机模型
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
=
s
i
g
n
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
+
b
)
f(x)=sign(w\cdot x +b)=sign(\sum_{j=1}^{N}\alpha_jy_jx_j\cdot x +b)
f(x)=sign(w⋅x+b)=sign(∑j=1Nαjyjxj⋅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
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
i
+
b
)
≤
0
y_i(\sum_{j=1}^{N}\alpha_jy_jx_j\cdot x_i +b)\leq 0
yi(∑j=1Nαjyjxj⋅xi+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
(4)转至(2)直到没有误分类点
注意到对偶形式中训练实例
x
i
x_i
xi仅以点积形式出现,所以可以提前把这些点积算好并以矩阵的形式来存好,该矩阵称为Gram矩阵:
G
=
[
x
i
⋅
x
j
]
N
×
N
G=[x_i\cdot x_j]_{N \times N}
G=[xi⋅xj]N×N
例2.2
题干同例2.1,用对偶形式求感知机模型。
解:取
α
i
=
0
,
i
=
1
,
2
,
3
\alpha_i=0,i =1,2,3
αi=0,i=1,2,3因为只有三个实例点,
b
=
0
,
η
=
1
b=0,\eta=1
b=0,η=1
计算Gram矩阵如下:
G
=
[
18
21
6
21
25
7
6
7
2
]
G= \left[ \begin{matrix} 18 & 21 & 6 \\ 21 & 25 & 7 \\ 6 & 7 & 2 \end{matrix} \right]
G=⎣⎡1821621257672⎦⎤
首先发现
y
1
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
1
+
b
)
=
0
y_1(\sum_{j=1}^{N}\alpha_jy_jx_j \cdot x_1+b)=0
y1(∑j=1Nαjyjxj⋅x1+b)=0即达到误分类条件,更新参数:
α
1
←
α
1
+
η
(
η
=
1
)
=
1
b
←
y
1
(
y
1
=
1
)
=
1
\alpha_1 \leftarrow \alpha_1 +\eta(\eta =1 )=1\\ b\leftarrow y_1(y_1=1)=1
α1←α1+η(η=1)=1b←y1(y1=1)=1
如此迭代可得最终超平面和感知机模型。