一、感知机模型:
- 感知机:是二分类的线性分类模型,输入为:实例的特征向量,输出:实例类别(-1和+1)。
- 感知机旨在:学习一个分离超平面,将训练数据进行线性划分。
1、感知机定义
- 假设:输入空间为
X
∈
R
n
X∈R^n
X∈Rn,输出空间为
Y
∈
{
−
1
,
+
1
}
Y∈\{-1,+1\}
Y∈{−1,+1},输入实例的特征向量为:
x
∈
X
x∈X
x∈X它对应于输人空间的一个点。输入空间到输出空间的映射函数:
f ( x ) = s i g n ( w ∗ x + b ) f(x)=sign(w*x+b) f(x)=sign(w∗x+b)被称为感知机;其中 w w w和 b b b是感知机模型的参数。 ∗ * ∗是矩阵乘法(内积运算)。 s i g n sign sign是符号函数:
s i g n ( x ) = { + 1 x ≥ 0 − 1 x < 0 sign(x)= \begin{cases} +1 & x≥0 \\ -1 & x<0 \end{cases} sign(x)={+1−1x≥0x<0 - 感知觉是一个线性分类模型。属于判别模型。其假设空间是定义在特征空间的所有线性分类模型:即函数集合 { f ( x ) = w ∗ x + b } \{f(x)=w*x+b\} {f(x)=w∗x+b}。
2、几何解释
- 感知机中的线性方程: w ∗ x + b = 0 w*x+b=0 w∗x+b=0,表示的是输入空间的一个超平面 S S S, w w w为该超平面的法向量, b b b为法向量的截距。这个超平面将假设空间分为两部分,按照法向量的方向是分为上部分和下部分。严格的来说是三部分:平面上部空间,平面上和平面下部空间。平面上部空间的样本点代入 w ∗ x + b > 0 w*x+b>0 w∗x+b>0, 平面上的样本点: w ∗ x + b = 0 w*x+b=0 w∗x+b=0,平面下部空间样本点代入 w ∗ x + b < 0 w*x+b<0 w∗x+b<0。这样我们根据函数值就可以将样本分类。
- 输入空间为平面时,分离超平面就是一条直线,如下图:
二、 感知机的学习策略:
1、数据集的线性可分性:
- 给定数据集: 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 ∈ X = R n , y i ∈ { + 1 , − 1 } , i = 1 , 2 , … N x_i∈X=R^n,y_i∈\{+1,-1\},i=1,2,…N xi∈X=Rn,yi∈{+1,−1},i=1,2,…N。如果存在超平面 S S S: w ∗ x + b = 0 w*x+b=0 w∗x+b=0,能将训练集的正例和负例完全正确的分离到超平面的两侧,则称数据集 T T T是线性可分的。
2、感知机的学习策略:
- 假设训练数据集线性可分,则感知觉的目标就是学习到一个分离超平面,要确定一个分离超平面,只需确定其中的 w w w和 b b b就可以了。
- 为了得到我们想要的分离超平面,我们需要一个学习策略,即定义一个损失函数并将其最小化。
- 一个很自然的损失函数就是误分类点的总数,但是这样的损失函数不是学习参数 w w w和 b b b的可导函数,不易优化。
- 感知机采样的损失函数是:误分类点到超平面的总距离。样本点 x 0 x_0 x0到超平面 S S S的距离为: 1 ∣ ∣ w ∣ ∣ ∣ w ∗ x 0 + b ∣ \frac{1}{||w||}|w*x_0+b| ∣∣w∣∣1∣w∗x0+b∣
- 不考虑 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} ∣∣w∣∣1,故感知觉的损失函数为: − y i ( w ∗ x i + b ) -y_i (w*x_i+b) −yi(w∗xi+b)
- 总结:给定训练集: 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 ∈ X = R n , y i ∈ + 1 , − 1 , i = 1 , 2 , … N x_i∈X=R^n,y_i∈{+1,-1},i=1,2,…N xi∈X=Rn,yi∈+1,−1,i=1,2,…N.感知机的损失函数为: L ( w , b ) = − ∑ x i ∈ M y i ( w ∗ x i + b ) L(w,b)=-∑_{x_i∈M}y_i (w*x_i+b) L(w,b)=−xi∈M∑yi(w∗xi+b)其中 M M M为误分类的样本集合,即满足 y i ( w ∗ x i + b ) ≤ 0 y_i (w*x_i+b)≤0 yi(w∗xi+b)≤0的样本集合。
- 注意:对于不考虑
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1的原因,书上没有讲,网上版本比较多,我比较认同的一个解释是:
- 感知机的任务是进行二分类工作,它的最终目的是找到一个分离超平面,不是找到最优的那个分离超平面,所以它并不关心得到的超平面离各点的距离是多少,只是关心我最后是否已经正确分类样本,比如说下面红色与绿线,对于感知机来说,效果任务是一样好的:
- 所以我们可以不考虑 w w w的范式,直接去掉它,因为这个时候我们只考虑误分类点,当一个误分类点出现的时候,我们进行梯度下降,对 w , b w,b w,b进行改变即可!跟距离没有什么关系了,因为 w w w的范式始终是大于0,对于我们判断是否为误分类点没有影响!这也回到了我们最初始那个最直观的损失函数:误分类点的个数。引入距离,只是将它变成一个可导的形式!
- 感知机的任务是进行二分类工作,它的最终目的是找到一个分离超平面,不是找到最优的那个分离超平面,所以它并不关心得到的超平面离各点的距离是多少,只是关心我最后是否已经正确分类样本,比如说下面红色与绿线,对于感知机来说,效果任务是一样好的:
- 感知机的学习策略是:在假设空间中选取损失函数最小的模型。
三、 感知机的学习算法:
- 感知机的学习问题转化为求解损失函数的最优化问题,最优化方法是随机梯度下降法。
1、感知机学习算法的原始形式:
- 给定训练集:
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
∈
X
=
R
n
,
y
i
∈
{
+
1
,
−
1
}
,
i
=
1
,
2
,
…
N
x_i∈X=R^n,y_i∈\{+1,-1\},i=1,2,…N
xi∈X=Rn,yi∈{+1,−1},i=1,2,…N.求参数
w
,
b
w,b
w,b。使其以下损失函数(目标函数)极小化问题的解:
min w , b L ( w , b ) = − ∑ x i ∈ M y i ( w ∗ x i + b ) \min_{w,b}L(w,b)=-∑_{x_i∈M}y_i (w*x_i+b) w,bminL(w,b)=−xi∈M∑yi(w∗xi+b)其中 M M M为误分类的样本集合。 - 感知机学习算法为随机梯度下降算法,步骤如下:
- 第一步:任选超平面 w 0 , b 0 w_0,b_0 w0,b0。
- 第二步:从训练集任选一个样本 ( x i , y i ) (x_i,y_i) (xi,yi).
- 第三步:如果
y
i
(
w
∗
x
i
+
b
)
≤
0
y_i (w*x_i+b)≤0
yi(w∗xi+b)≤0,使用梯度下降法不断极小化上面目标函数。
- 极小化过程不是一次性使用 M M M中所有误分类点的梯度下降,而是每次随机选取一个误分类点使其梯度下降。
- 假设集合
M
M
M是固定的,损失函数(目标函数)
L
(
w
,
b
)
L(w,b)
L(w,b)的梯度为:
∇ w L ( w , b ) = − ∑ x i ∈ M y i x i ∇_w L(w,b)=-∑_{x_i∈M}y_i x_i ∇wL(w,b)=−xi∈M∑yixi ∇ b L ( w , b ) = − ∑ x i ∈ M y i ∇_b L(w,b)=-∑_{x_i∈M}y_i ∇bL(w,b)=−xi∈M∑yi - 上面的是损失函数(目标函数)对整个误分类集合
M
M
M的梯度,我们使用的是损失函数(目标函数)对某个误分类点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的梯度:
∇ w L ( w , b ) = − y i x i ∇_w L(w,b)=-y_i x_i ∇wL(w,b)=−yixi ∇ b L ( w , b ) = − y i ∇_b L(w,b)=-y_i ∇bL(w,b)=−yi - 所有随机选取一个误分类点(x_i,y_i),对w和b的更新公式如下:
w ← w − η ∇ w L ( w , b ) = w + η y i x i w←w-η∇_w L(w,b)=w+ηy_i x_i w←w−η∇wL(w,b)=w+ηyixi b ← b − η ∇ b L ( w , b ) = w + η y i b←b-η∇_b L(w,b)=w+ηy_i b←b−η∇bL(w,b)=w+ηyi
其中η为步长
- 第三步:重复第二、三两步直到训练集上没有错误样本点.
- 该算法的直观解释:
- 当一个样本点被误分类时,即位于分离超平面的错误一侧,我们调整 w w w和 b b b的值,使分离超平面向误分类点的一侧移动,以减少误分类点到分类超平面的距离,直至分离超平面越过误分类点使其被正确分类。
2、感知机学习算法的对偶形式:
- 对偶形式的基本想法:将 w w w和 b b b表示为实例 x i x_i xi和标记 y i y_i yi的线性组合的形式,通过求解出线性组合的系数从而得到 w w w和 b b b。
- 在上面的感知机学习算法的原始形式中,如果我们初始化
w
0
=
b
0
=
0
w_0=b_0=0
w0=b0=0。那么最后得到的
w
w
w和
b
b
b可以表示为:
w = ∑ i = 1 N α i y i x i w=∑_{i=1}^N α_i y_i x_i w=i=1∑Nαiyixi b = ∑ i = 1 N α i y i b=∑_{i=1}^N α_i y_i b=i=1∑Nαiyi其中 α i ≥ 0 α_i≥0 αi≥0为整个训练过程样本 ( x i , y i ) (x_i,y_i) (xi,yi)的总步长。这样我们的感知机就可以表示为: f ( x ) = s i g n ( ∑ i = 1 N α i y i x i ∗ x + ∑ i = 1 N α i y i ) f(x)=sign(∑_{i=1}^N α_i y_i x_i *x+∑_{i=1}^N α_i y_i ) f(x)=sign(i=1∑Nαiyixi∗x+i=1∑Nαiyi) - 算法步骤:
α
=
(
α
1
,
α
2
,
…
,
α
N
)
α=(α_1,α_2,…,α_N)
α=(α1,α2,…,αN)
- 第一步:初始化: α = 0 α=0 α=0,
- 第二步:从训练集中选取一个样本 ( x i , y i ) (x_i,y_i) (xi,yi)
- 第三步:如果 y i ( ∑ j = 1 N α j y j x j ∗ x i + ∑ i = 1 N α i y i ) ≤ 0 : y_i (∑_{j=1}^Nα_j y_j x_j *x_i+∑_{i=1}^Nα_i y_i )≤0: yi(∑j=1Nαjyjxj∗xi+∑i=1Nαiyi)≤0: α i ← α i + η α_i←α_i+η αi←αi+η
- 第四步:重复第二/三步,直到没有误分类点。
- 注意:书中的算法过程使用 b b b来代替 ∑ i = 1 N α i y i ∑_{i=1}^Nα_i y_i ∑i=1Nαiyi,但是我个人感觉这样更能体现对偶算法一点。
- 对偶形式中训练实例x_i仅以内积的形式出现,所以我们可以预先将实例之间的内积求出来并保存到矩阵中,这个矩阵叫Gram矩阵: G = [ x i ∗ x j ] N × N G=[x_i*x_j ]_{N×N} G=[xi∗xj]N×N