本文是在对李航老师《统计学习方法》第二章感知机,学习后的读书笔记与个人的一些理解,内容如果有错,欢迎大家指正,我们一起进步:)
感知机模型
输入空间
X,输出空间
Y={−1,+1},
x∈X,y∈Y,w为权值,b是偏量,sign(·)是符号函数
感知机模型为:
f(x)=sign(w⋅x+b)
其实,更好理解地看这个模型其实就是在对我们的输入数据计算后与某个标准进行比较从而对其分类。
w是一个向量分别对应着输入的每个属性,它作为权值,可以简单地理解为一个打分的标准,我们将
w⋅x视为某个输入数据的得分,某个属性我们认为比较重要就为其赋予更大的权值,那么这个属性的变动就会引起得分的更大变动,所以属具有更大权值那么就具有对结果更大的影响力。
而将
−b视为一个分类的标准
w⋅x>−b与
w⋅x<−b呈现的是这个输入是否达到了我们设定的某个标准,据此达到了是一类,未达到是另一类。移动不等式,添加符号函数
sign(⋅),前面的达到标准与未达标准就对应着+1和-1的输出。
式
(1)中最重要的部分就是
w⋅x+b,当
w⋅x+b=0这表示着一个界限,区分开
w⋅x>−b和
w⋅x<−b的输入。这个界限就是一个超平面,它是由所有满足
w⋅x+b=0的点组成,那么就不难知道超平面上的任意向量
x1x2
(
x1,x2是超平面上的任意两点)满足:
x1x2
⋅w=0
有:
===(x2−x1)⋅wx2⋅w+b−b−x1⋅w(x2⋅w+b)−(x1⋅w+b)0
由此知道
w是超平面的法向量。
当然
w与
b并非我们自己可以直接按照喜好而定,它来源于数据,我们是通过已知数据,来得出最好的
w,b参数,使得由参数确定出的超平面能够很好地划分这些输入,找到
w,b就是感知机学习要做的。
感知机学习策略
数据集T={(
x1,y1),(
x2,y2),···,(
xN,yN)},并且假定这个数据集是线性可分的
上面的前提中提到了线性可分,用下面的图稍作解释:
(xi,yi)就是上面的一个点
yi代表着这个数据的真实标记,
yi=+1→o
& yi=−1→x,可见图1中用一条直线可以完全分开所有数据,那么图1中的数据集就是线性可分的,而图2中无论是红线还是蓝线都无法完全分开两种类别,那么图2的数据就是线性不可分的,用线性可分的数据集就表明完美的超平面即
w⋅x+b=0是存在的,我们有可能可以找到它。
我们感知机学习的目标就是要找出一个能将训练集正负实例点完全分开的超平面,而前面的假设前提(线性可分)已经为此奠定了基础。找到这样一个超平面其实就是找到理想的
w,b参数,为此需要确定一个学习策略,即定义损失函数并将损失函数最小化。
我们选择误分类点到超平面的总距离作为损失函数,也就是下图绿色线条代表距离的总和:
那么如何表示呢?我们首先就是要明确一个点到超平面的距离,有了这个距离总和就是很简单能求到的了。
那么首先假定空间里任意一点为
x0,该点在超平面上的投影是
x1(投影就是过
x1做一条垂直于超平面的线,该线与超平面的交点就是这个
x0),所以
x1x0
=x0−x1与
w是平行的向量,可以有以下推导:
==∣∣w⋅x1x0
∣∣=∣w⋅(x0−x1)∣=∣wx0+b−wx1−b∣=∣wx0+b∣∣∣w∣∣⋅∣∣x1x0
∣∣ 两线平行,∣∣x1x0
∣∣为向量长度d,就是点到超平面距离∣∣w∣∣⋅d⇒ ∣∣w∣∣⋅d=∣∣wx0+b∣∣d=∣∣w∣∣1∣wx0+b∣
带着绝对值的式子在很多时候都不好用,我们知道对于误分类点他的标签
y与我们判定的公式
wx+b是异号的,所以
−yi(wxi+b)>0于是我们用这个式子取代绝对值:
d=−∣∣w∣∣1yi(wxi+b)
误分类点的集合为
M,那么总的误分类点距离为:
−∣∣w∣∣1xi∈M∑yi(w⋅xi+b)(3)
损失函数我们希望再简化,因而去掉
∣∣w∣∣1,最终损失函数为:
L(w,b)=−xi∈M∑yi(w⋅xi+b)(4)
至于为什么去掉
∣∣w∣∣1综合一下网上的意见然后给出点我自己的看法:
-
式(3)与式(4)的损失函数都具有相同的最小值:
根据策略,我们所要做的就是将损失函数极小化,而两个式子很容易知道他们的最小值都是0,也就是说在去掉
∣∣w∣∣1得到式(4)后依然能达到策略对于未去掉
∣∣w∣∣1的要求;
-
式(3)与式(4)具有相同的极小化策略:
损失函数极小化的过程是随机梯度下降法,它使用每次选择一个点来对w,b进行优化,尽管这种局部极小化可能会出现在优化一个点的时候另一个点的损失函数会增大,但是经过后面要提到的算法收敛检验发现经过这样的有限次迭代后会找到一个完美超平面,也就是说有限次迭代后终将会优化到所有误分类点的损失函数都为0,即不存在误分类点,那么这也就表明局部最小化也能带来所有误分类点的损失函数为0的结果,而这样的结果不会因为一个
∣∣w∣∣1而被影响
综上可见,去掉
∣∣w∣∣1后其实得到的结果是没变的,所以简化运算,最终损失函数定为:
L(w,b)=−xi∈M∑yi(w⋅xi+b)
感知机学习算法
开始说算法前,我觉得有必要了解一下随机梯度下降法,如果已经了解可以直接跳到感知机学习算法的原始形式。
形象一点说这个方法就类似于处于山顶上的人如何走向最低处,理想的想法就是四处探看找到下降最快的方向迈出一步,不断探看不断迈出,最终会到达山底。而这个下降最快的方向就是梯度的反方向。那么类比到损失函数中,损失函数最初的值就相当于处在山顶的位置,而通过计算梯度就能找到下降最快的方向,更新参数
w,b就像是在迈出步子走向山底,不断重复,我们就找到最小值。
但是我们的损失函数计算的样本点是来自于误分类的点,我们没办法从全局进行梯度下降,所以选择随机梯度下降法,也就是每次计算单个误分类样本点的梯度然后对参数
w,b进行优化,通过后面的收敛证明发现对于感知机,随机梯度下降法是能找到完美超平面的。
但是这里还有一个问题,那就是为什么梯度的反方向是函数下降最快的方向呢:
下图表示一个输入空间,可见这个输入的变量是个二维的向量,有属性
x,y(属性虽然用
x(1),x(2)表示更好,但是现在这里讲的大多相关于高数的知识,用xy更熟悉一些,但这个y要与标签区分开哟)
首先假设我们有一个函数
z=f(x,y)并且存在一条蓝色的线它与
x轴的夹角为
α,它在这个二维的空间里就表示着一个方向。我们现在要做的就是求函数
z=f(x,y)在蓝线方向上的方向导数。
方向导数,其实描述的也就是在某个方向上函数的变化率,如图我们得到一个初始点为
(x0,y0),在蓝线上变化
ρ的长度,达到点
(y0+△y, x0+△x),可见在
x轴与
y轴上的变化分别是
△x与
△y,根据导数的定义我们可以写出
z在
x方向上的偏导:
△x→0lim△xf(x0+△x,y0)−f(x0,y0)=∂x∂z
将左边的分母乘到右边得到:
△x→0limf(x0+△x,y0)−f(x0,y0)=∂x∂z△x(7)
若此时以
(x0+△x,y0)为起点,同上根据
z在
y方向上的偏导可以写出:
△y→0limf(x0+△x,y0+△y)−f(x0+△x,y0)=∂y∂z△y(8)
把式(7)与式(8)相加能得到:
△x→0lim△y→0limf(x0+△x,y0+△y)−f(x0,y0)=∂x∂z△x+∂y∂z△y
△x→0与
△y→0等价于
ρ→0,然后将上式两边同时除以
ρ得到:
ρ→0limρf(x0+△x,y0+△y)−f(x0,y0)=∂x∂zρ△x+∂y∂zρ△y
再化简可得:
ρ→0limρf(x0+△x,y0+△y)−f(x0,y0)=∂x∂zcosα+∂y∂zsinα
上式的左边就是在蓝线上的方向导数,根据式子的右边设
G=(∂x∂z,∂y∂z), I=(cosα,sinα),
G就是梯度,
I是方向导数的方向,是个单位向量,这个方向在图里就是那条蓝线,我们现在就是要找到一个
I的方向使得在这个点
(x0,y0)处沿此方向有最大的变化,那么再写一下:
方向导数=G⋅I=∣G∣⋅∣I∣cosθ
θ就是
G与
I的之间的夹角,那么可见当
G与
I同向时,即
θ为0方向导数最大为正,可知
G的方向就是在该点函数增大最快的方向,那么
θ为
π,即与
G的方向相反,此时在该点沿该方向函数下降最快。
感知机学习算法的原始形式
有了上面的了解,我们其实就已经知道了这个学习算法最重要的一步,那就是对于参数的更新。按照前面所说,
w,b应该向着梯度的反方向更新。
在个误分点对参数更新,首先写出损失函数:
L(w,b)=−yi(w⋅xi+b)
对参数求导得到梯度:
▽wL(w,b)▽bL(w,b)=−yixi=−yi
要知道
w不是一个数而是一个向量,每一个
w的分量对
L求导,其偏导数组成了梯度向量
yixi,其实对这个损失函数而言其梯度应该将上面这两个式子的结果写到一起,但是为了方便更新参数,结果我们分开看。
我们以
η作为步长对参数
w,b更新,然后沿梯度相反方向移动
η,在式子中就表示为
参数−梯度:
w←w+η yixib←b +η yi
那么总的算法流程就如下:
(1) 选取初值
w0,b0
(2) 在训练集中遍历选取数据
(xi,yi),这里的
(xi,yi)不一定代表误分类的点
(3) 如果
yi(w⋅xi+b)≤0:
w←w+η yixib←b +η yi
这一步就是判断(2)得到的点是否是误分类点,然后如果是那么就对其更新
(4) 否则转至(2)直到训练集中没有误分类点
算法收敛性
虽然我们知道单个点损失函数存在最小值为0,但是由单个点对
w,b进行更新,损失函数最小化是局部下降的,也就是说在对某个点梯度下降时,可能会新增其他误分类点,或者其他点的损失函数增大。那么存在这个点更新后损失函数减小但同时另一个点损失函数又增大的情况,所以现在证明即使存在这种情况我们的算法还是收敛的,我们还是能得到最终完美的超平面。
- 为了方便推导把
b并入
w,x中,
b=b⋅1,
b并在
w的最后一个,
1并在
x的最后一个,写成
w^=(wT,b), x^=(xT,1)
- 假设存在满足条件
∣∣w^opt∣∣=1的超平面将所有的数据全部完全分开
- 设
R=max1≤i≤N∣∣x^i∣∣
证明:
我们知道完美超平面是能将所有数据正确分开,即没有误分类点,标签
yi与输出
f(xi)是同号的,那么也就是说
wopt,bopt对于所有的训练集数据满足下面的式子
yi(w^opt⋅x^i)=yi(wopt⋅xi+bopt)>0
所以存在:
γ=imin{yi(wopt⋅xi+bopt)}γ>0
使得:
yi(w^opt⋅x^i)=yi(wopt⋅xi+bopt)≥γ(15)
最初始的超平面是
w0=0,b0=0那么更新参数
k次后得到的超平面就是
wk,bk,我们知道:
wk←wk−1+η yixibk←bk−1 +η yi
则会有:
w^k=w^k−1+η yix^i
(别忘了
w^,x^的含义)
于是可以得到式子:
w^k⋅w^opt=(w^k−1+η yix^i)w^opt=w^k−1⋅w^opt+η yix^iw^opt
将式(15)代入上面的式子中:
w^k⋅w^opt=(w^k−1+η yix^i)w^opt=w^k−1⋅w^opt+η yix^iw^opt≥w^k−1⋅w^opt+η γ
对于上面的式子我们依然可以求得带有
w^k−2⋅w^opt的不等式:
w^k⋅w^opt≥w^k−1⋅w^opt+η γ≥w^k−2⋅w^opt+2η γ
不断向下类推:
w^k⋅w^opt≥w^k−1⋅w^opt+η γ≥w^k−2⋅w^opt+2η γ⋅⋅⋅⋅⋅⋅≥w^2⋅w^opt+(k−2)η γ≥w^1⋅w^opt+(k−1)η γ≥w^0⋅w^opt+(k−0)η γ
初始超平面前面说过,定为
w^0=0,所以a上式表示为:
w^k⋅w^opt≥kη γ(17)
对于
w^k有:
∣∣w^k∣∣2=∣∣w^k−1+η yix^i∣∣2=∣∣w^k−1∣∣2+∣∣η yix^i∣∣2+2η yiw^k−1x^i
第二个等号后的式子尾项,因为上式中的
yi,x^i是误分类点,所以
yi,w^kx^i是异号的,所以是一个负数,中间的
∣∣η yix^i∣∣2由于
yi在平方下没有实际的影响,所以不用管他,而
R=max1≤i≤N∣∣x^i∣∣,所以有:
∣∣w^k∣∣2≤∣∣w^k−1∣∣2+η2 ∣∣x^i∣∣2≤∣∣w^k−1∣∣2+η2 R2≤∣∣w^k−2∣∣2+2η2 R2⋅⋅⋅⋅⋅⋅≤∣∣w^2∣∣2+(k−2)η2 R2≤∣∣w^1∣∣2+(k−1)η2 R2≤∣∣w^0∣∣2+kη2 R2≤kη R2
得到:
∣∣w^k∣∣2≤kη R2
式(17)可写成:
kη γ≤w^k⋅w^opt
由于向量积小于等于向量模的积(
a⋅b=∣∣a∣∣⋅∣∣b∣∣cosα),所以:
kη γ≤w^k⋅w^opt≤∣∣w^k∣∣⋅∣∣w^opt∣∣
由于
∣∣w^opt∣∣=1而
∣∣w^k∣∣≤k
η R,所以:
kη γ≤w^k⋅w^opt≤∣∣w^k∣∣⋅∣∣w^opt∣∣≤k
η R⇓k≤γ2R2
R与
γ都是一个有限的值,因而
k是存在上界的,这就说明只要存在完美的超平面那么参数更新的次数
k必然是有限的,也就是在有限次更新后必然能找到这个完美的超平面。
感知机学习算法的对偶形式
由前面的内容,可以知道,当前的参数
w,b来自于误分类点的更新,即:
w←w+η yixib←b +η yi
那么如果某个误分类点
(xi,yi)多次被选中,那么它对当前参数就进行了
n次更新,它更新带来的影响是使
w,b改变如下:
△w=nη yixi△b=nη yi
更新过程中被选中的每一个误分类点都可以如上被表示,将他们全部加起来,就可以表示由初始的
w0,b0到当前的
w,b之间的总变化程度。而为了不失一般性,初始值
w0,b0均设为0,那么有:
w=w0+n1η y1x1+n2η y2x2+⋅⋅⋅+niη yixi
上面的式子包含了训练集所有的点,如果某个点从来没有被选中去更新参数,那么它前面的
n自然等于0。我们把上式中的
niη改写为
αi,而
w0=0,那么上面的式子可以写为:
w=i=1∑Nαiyixi
同理得b为:
b=i=1∑Nαiyi
于是可以将感知机模型改写为
f(x)=sign(∑j=1Nαjyjxj⋅x+b)
那么对偶形式的算法其实和原始形式很像:
(1) 选取初值
α=0,b=0
(2) 在训练集中遍历选取数据
(xi,yi),这里的
(xi,yi)不一定代表误分类的点
(3) 如果
yi(∑j=1Nαjyjxj⋅x+b)≤0:
αi←αi+ηb←b +η yi
这一步就是判断(2)得到的点是否是误分类点,然后如果是那么就对其更新
(4) 否则转至(2)直到训练集中没有误分类点