Coursera机器学习基石 第2讲:感知器
2015-01-31 17:38
120 查看
转自:http://www.cnblogs.com/wacc/p/3848418.html
第一讲中我们学习了一个机器学习系统的完整框架,包含以下3部分:训练集、假设集、学习算法
一个机器学习系统的工作原理是:学习算法根据训练集,从假设集合H中选择一个最好的假设g,使得g与目标函数f尽可能低接近。H称为假设空间,是由一个学习模型的参数决定的假设构成的一个空间。而我们这周就要学习一个特定的H——感知器模型。
感知器模型在神经网络发展历史中占有特殊地位,并且是第一个具有完整算法描述的神经网络学习算法(称为感知器学习算法:PLA)。这个算法是由一位心理学家Rosenblatt在1958年提出来的,因此它也叫做Rosenblatt感知器。感知器是用于线性可分模式分类的最简单的神经网络模型,它由一个具有可调突触权值和偏置的神经元组成。用于调节神经网络中参数的算法最早出现在Rosenblatt(1958,1962)提出的用于其脑感知模型的一个学习过程中(即PLA)。Rosenblatt证明了当输入数据的模式是线性可分的时候,感知器学习算法能够在有限步迭代后收敛,并且决策面是位于两类之间的超平面。算法的收敛性证明被称为感知器收敛定理。那么首先介绍一下什么是感知器。
下图是一个感知器的示意图:
![](http://images.cnitblog.com/blog/583155/201412/071443235149205.png)
(图摘自Neural Networks and Learning Machines,3rd Edition)
一个感知器由三个部分组成:
1)突触权值(即图中的w1,w2,...,wm)
2)求和单元,用突触权值对输入进行加权并加上偏置,得到诱导局部域(v)
3)激活函数(即图中的hard limiter)用于限制诱导局部域输出的振幅,在感知器中,使用符号函数来限制输出(当v>0时输出为1,反之为-1)
以上神经元称为McCulloch-Pitts模型,可以用两条数学公式概括:
v=∑i=1mwixi+b
y=ϕ(v)={1−1ifv>0otherwise
关于偏置的作用,直观上可以这样理解,当∑mi=1wixi>−b时输出为1,当∑mi=1wixi≤−b时输出为-1,这里−b实际上是一个阈值,而求和单元求和的结果可以认为是一个根据输入特征进行打分的函数,突触权值是特征的重要性或者可以理解为每个特征的分数,当分数超过阈值时,我们给它分到+1代表的类,不超过则分到-1.是不是有点像老师改卷的过程?权值是每道题的分数,输入是学生每道题的对错情况,输出是这个学生最后的总分,当这个总分超过一个阈值(比如60分)时,给他pass,否则不给他pass。
我们可以把偏置b看作一个特殊的突触单元,x0=+1,w0=b,分别加入到输入向量和权值向量中。这样,感知器的输出可以表示为一个更为简洁的形式f(x)=∑mi=0wixi,又可以简化为一个向量形式,即f(x)=wTx,其中w=(w0,w1,...,wm)T,x=(x0,x1,...,xm)T它们都是m+1维的向量。不过为了方便后面的推导,还是把它拆开来写:f(x)=wTx+b
感知器模型实际上定义了一组超平面wTx+b=0,称为分离超平面。感知器模型实际上是关于w,b的函数,这个超平面将空间分为两半,一半是由满足wTx+b>0的点(标记为+1)组成,另一半由wTx+b≤0定义(标记为-1)。给定一个点xi,我们可以用以下的决策函数预测它的标号:
f(x)=sign(wTx+b)
其中sign是符号函数,当括号里的项大于时,输出为+1;小(等)于0时,输出为-1.给定一个训练数据集D={(x1,y1),...,(xn,yn)}的情形下,我们的目标是尽可能地满足f(xi)=yi,但一开始由于我们事先不知道超平面长什么样,难免会分错,而PLA算法告诉我们的是,我们可以利用这些错分的点来修正权值向量w,b,使之往正确的位置靠近。为此,我们首先需要定义一个函数,来衡量一次预测错误的程度,这个函数称为损失函数。一个合理的选择是误分类点的总数,但是这个函数不是w,b的可导函数,因此我们用了另一个函数作为替代,即误分类点到超平面的总距离,这个准则的好处是关于w,b可导,因此可以使用梯度下降算法来优化。下面我来解释一下为什么用误分类点到超平面的距离来作为损失函数。
下图是一个二维的超平面
![](http://images.cnitblog.com/blog/583155/201412/071547285454960.png)
上图中,点x到超平面的距离是
1∥w∥|wTx+b|
推导过程:
由图中的关系有:x+y=z,由于y与法向量w共线,可设y=λw,则z=x+λw
因为z在超平面上,故wTz+b=0,得到wTx+λwTw+b=0
于是有λ=−(wTx+b)wTw
距离为d=|y|=|λ|∥w∥=1∥w∥|wTx+b|
直观上来理解,误分类点离超平面越远,我们就需要花越多的代价将w,b纠正,因此损失函数较大。而我们的目标就是使这种损失在平均意义上最小,即
L(w,b)=∑xi∈M−yi(wTxi+b)
其中M是误分类点的集合,−yi(wTxi+b)实际上是|wTxi+b|(xi∈M),因为对于误分类的点来说,yi和wTxi+b的符号一定是相反的,所以−yi(wTxi+b)一定是正数,实际上,yi(wTxi+b)有一个专门的名字,称为函数间隔,这个概念在SVM中也有出现。这里我们的目标是最小化L,方法是用L的梯度来修正w和b。
我们求L关于w,b的梯度:
∂L∂w=−∑xi∈Myixi
∂L∂b=−∑xi∈Myi
这里,因为一次更新采用所有样本太费时,我们一次从分错的样本中随机挑选出一个来更新,此方法称为随机梯度下降算法。对应w,b的更新式为
w←w+ηyixi
b←b+ηyi
式中η为学习率,在实现时,可以先随机生成一个排列,再遍历这个序列直到遇到第一个分错的样本,。
为了方便后面的推导,把b加入w,令w=(w,−b),x=(x,1),则f(x)=wTx,通常把w称为权重向量。对应的更新式为
w←w+ηyixi
这个更新式就是感知器学习算法PLA的核心。
下面是PLA算法的完整描述:
输入:训练集T,学习率η
输出:w,b;感知器模型f(x)=sign(wTx+b)
过程:
(1)初始化w0=0
(2)选取数据(xi,yi)
(3)如果yi(wTxi+b)≤0
w←w+ηyixi
(4)跳至(2),直至训练集中没有误分类点
注意到,误分类点有这样一个性质:yi(wTxi+b)≤0。最后得到的超平面一定是能够将所有正/负样本分离开来的,我们把这种性质叫做线性可分性。
设最终收敛的权重向量是wf,这一性质可以表示为:对于所有的样本点,都有
yiwTfxi≥0
这个算法看起来很简洁,有人会问,这么简单的算法真的起作用吗,能收敛吗? 答案是肯定的。也就是说,可以证明算法一定能收敛,并且可以求出收敛次数的上限。
假设第t次迭代时w的值为w(t),下面来证明这个结论。在证明过程中,引入几个记号。
(1)R=max1≤i≤N∥xi∥
(2)γ=min{yiwTfxi}
证明过程:
首先考察cosθ(t)=w(t)Twf∥w(t)∥∥∥wf∥∥的分子:
w(t)Twf=(w(t−1)+ηyi(t−1)xi(t−1))Twf=w(t−1)Twf+ηyi(t−1)wTfxi(t−1)≥w(t−1)Twf+ηγ≥w(t−2)Twf+2ηγ≥⋯≥tηγ
另一方面,
∥w(t)∥2=∥w(t−1)∥2+η2yi(t−1)2∥xi(t−1)∥2+2ηyi(t−1)w(t−1)Txi(t−1)≤∥w(t−1)∥2+η2R2≤⋯≤tη2R2
∥w(t)∥≤t√ηR
因此,
cosθ(t)≥tγ∥∥wf∥∥t√ηR=t√(γ∥∥wf∥∥ηR)
由此我们可以知道cosθ(t)的下限是关于t√单调递增的函数,而cosθ(t)最多不超过1,因此随着迭代次数的增加,这个下限会越来越趋近于1,直至收敛。由于下限不超过1,我们可以近似求得收敛需要的次数:t√(γ∥∥wf∥∥ηR)≤1⟹t≤∥∥wf∥∥2η2R2γ2,也就是说,最大迭代次数不超过ceil(∥∥wf∥∥2η2R2γ2)。但由于t有上限,这表明算法会停止,而结合算法停止的条件是没有误分类点,那么算法收敛时找到的超平面一定是线性可分的。
注意:不要认为w(t)一定会收敛于wf,因为感知器的可行解不是唯一的,差几度也是可以的。
线性可分告诉我们w(t)Twf增长的很快,而用错误修正w告诉我们∥w(t)∥增长的很慢,两者一综合可以得出结论,w(t)越来越靠近wf,直至算法停止
总结一下PLA算法:
优点:易于实现,效率高, 对于任意维度都适用
缺点:
(1)事先不知道数据是否线性可分,需要找到一个wf,但需要线性可分才找的到wf,于是陷入循环论证
(2)即使知道数据是线性可分的,我们也无法知道算法什么时候能停下来,因为我们不知道wf
线性可分是一种比较理想的情况,真实世界中这样的数据并不多见。一方面现实中的数据维度一般都远大于二维,维数越多,数据的分布就越复杂,线性可分的可能性就越小;另一方面,即使target function是线性的,由于数据采集过程中的噪声导致的非线性也是非常有可能的。这样一来,感知器模型就无法广泛地应用了,于是有人提出了能够应用于非线性可分数据的感知器:Pocket PLA。它是一类贪心算法,先在“口袋”里保存一条最好的线wg,然后每次随机挑一个错误修正w得到w(t+1),并与wg比较哪一条更好,如果比wg更好,就令wg=w(t+1),否则继续循环,直到到达一定循环次数为止。
![](http://images.cnitblog.com/blog/583155/201412/092150343068886.png)
pocket算法比PLA慢,这是因为要比较两条线哪条更好,需要遍历所有数据,计算两条线各自犯的错误是多少。
第一讲中我们学习了一个机器学习系统的完整框架,包含以下3部分:训练集、假设集、学习算法
一个机器学习系统的工作原理是:学习算法根据训练集,从假设集合H中选择一个最好的假设g,使得g与目标函数f尽可能低接近。H称为假设空间,是由一个学习模型的参数决定的假设构成的一个空间。而我们这周就要学习一个特定的H——感知器模型。
感知器模型在神经网络发展历史中占有特殊地位,并且是第一个具有完整算法描述的神经网络学习算法(称为感知器学习算法:PLA)。这个算法是由一位心理学家Rosenblatt在1958年提出来的,因此它也叫做Rosenblatt感知器。感知器是用于线性可分模式分类的最简单的神经网络模型,它由一个具有可调突触权值和偏置的神经元组成。用于调节神经网络中参数的算法最早出现在Rosenblatt(1958,1962)提出的用于其脑感知模型的一个学习过程中(即PLA)。Rosenblatt证明了当输入数据的模式是线性可分的时候,感知器学习算法能够在有限步迭代后收敛,并且决策面是位于两类之间的超平面。算法的收敛性证明被称为感知器收敛定理。那么首先介绍一下什么是感知器。
下图是一个感知器的示意图:
![](http://images.cnitblog.com/blog/583155/201412/071443235149205.png)
(图摘自Neural Networks and Learning Machines,3rd Edition)
一个感知器由三个部分组成:
1)突触权值(即图中的w1,w2,...,wm)
2)求和单元,用突触权值对输入进行加权并加上偏置,得到诱导局部域(v)
3)激活函数(即图中的hard limiter)用于限制诱导局部域输出的振幅,在感知器中,使用符号函数来限制输出(当v>0时输出为1,反之为-1)
以上神经元称为McCulloch-Pitts模型,可以用两条数学公式概括:
v=∑i=1mwixi+b
y=ϕ(v)={1−1ifv>0otherwise
关于偏置的作用,直观上可以这样理解,当∑mi=1wixi>−b时输出为1,当∑mi=1wixi≤−b时输出为-1,这里−b实际上是一个阈值,而求和单元求和的结果可以认为是一个根据输入特征进行打分的函数,突触权值是特征的重要性或者可以理解为每个特征的分数,当分数超过阈值时,我们给它分到+1代表的类,不超过则分到-1.是不是有点像老师改卷的过程?权值是每道题的分数,输入是学生每道题的对错情况,输出是这个学生最后的总分,当这个总分超过一个阈值(比如60分)时,给他pass,否则不给他pass。
我们可以把偏置b看作一个特殊的突触单元,x0=+1,w0=b,分别加入到输入向量和权值向量中。这样,感知器的输出可以表示为一个更为简洁的形式f(x)=∑mi=0wixi,又可以简化为一个向量形式,即f(x)=wTx,其中w=(w0,w1,...,wm)T,x=(x0,x1,...,xm)T它们都是m+1维的向量。不过为了方便后面的推导,还是把它拆开来写:f(x)=wTx+b
感知器模型实际上定义了一组超平面wTx+b=0,称为分离超平面。感知器模型实际上是关于w,b的函数,这个超平面将空间分为两半,一半是由满足wTx+b>0的点(标记为+1)组成,另一半由wTx+b≤0定义(标记为-1)。给定一个点xi,我们可以用以下的决策函数预测它的标号:
f(x)=sign(wTx+b)
其中sign是符号函数,当括号里的项大于时,输出为+1;小(等)于0时,输出为-1.给定一个训练数据集D={(x1,y1),...,(xn,yn)}的情形下,我们的目标是尽可能地满足f(xi)=yi,但一开始由于我们事先不知道超平面长什么样,难免会分错,而PLA算法告诉我们的是,我们可以利用这些错分的点来修正权值向量w,b,使之往正确的位置靠近。为此,我们首先需要定义一个函数,来衡量一次预测错误的程度,这个函数称为损失函数。一个合理的选择是误分类点的总数,但是这个函数不是w,b的可导函数,因此我们用了另一个函数作为替代,即误分类点到超平面的总距离,这个准则的好处是关于w,b可导,因此可以使用梯度下降算法来优化。下面我来解释一下为什么用误分类点到超平面的距离来作为损失函数。
下图是一个二维的超平面
![](http://images.cnitblog.com/blog/583155/201412/071547285454960.png)
上图中,点x到超平面的距离是
1∥w∥|wTx+b|
推导过程:
由图中的关系有:x+y=z,由于y与法向量w共线,可设y=λw,则z=x+λw
因为z在超平面上,故wTz+b=0,得到wTx+λwTw+b=0
于是有λ=−(wTx+b)wTw
距离为d=|y|=|λ|∥w∥=1∥w∥|wTx+b|
直观上来理解,误分类点离超平面越远,我们就需要花越多的代价将w,b纠正,因此损失函数较大。而我们的目标就是使这种损失在平均意义上最小,即
L(w,b)=∑xi∈M−yi(wTxi+b)
其中M是误分类点的集合,−yi(wTxi+b)实际上是|wTxi+b|(xi∈M),因为对于误分类的点来说,yi和wTxi+b的符号一定是相反的,所以−yi(wTxi+b)一定是正数,实际上,yi(wTxi+b)有一个专门的名字,称为函数间隔,这个概念在SVM中也有出现。这里我们的目标是最小化L,方法是用L的梯度来修正w和b。
我们求L关于w,b的梯度:
∂L∂w=−∑xi∈Myixi
∂L∂b=−∑xi∈Myi
这里,因为一次更新采用所有样本太费时,我们一次从分错的样本中随机挑选出一个来更新,此方法称为随机梯度下降算法。对应w,b的更新式为
w←w+ηyixi
b←b+ηyi
式中η为学习率,在实现时,可以先随机生成一个排列,再遍历这个序列直到遇到第一个分错的样本,。
为了方便后面的推导,把b加入w,令w=(w,−b),x=(x,1),则f(x)=wTx,通常把w称为权重向量。对应的更新式为
w←w+ηyixi
这个更新式就是感知器学习算法PLA的核心。
下面是PLA算法的完整描述:
输入:训练集T,学习率η
输出:w,b;感知器模型f(x)=sign(wTx+b)
过程:
(1)初始化w0=0
(2)选取数据(xi,yi)
(3)如果yi(wTxi+b)≤0
w←w+ηyixi
(4)跳至(2),直至训练集中没有误分类点
注意到,误分类点有这样一个性质:yi(wTxi+b)≤0。最后得到的超平面一定是能够将所有正/负样本分离开来的,我们把这种性质叫做线性可分性。
设最终收敛的权重向量是wf,这一性质可以表示为:对于所有的样本点,都有
yiwTfxi≥0
这个算法看起来很简洁,有人会问,这么简单的算法真的起作用吗,能收敛吗? 答案是肯定的。也就是说,可以证明算法一定能收敛,并且可以求出收敛次数的上限。
假设第t次迭代时w的值为w(t),下面来证明这个结论。在证明过程中,引入几个记号。
(1)R=max1≤i≤N∥xi∥
(2)γ=min{yiwTfxi}
证明过程:
首先考察cosθ(t)=w(t)Twf∥w(t)∥∥∥wf∥∥的分子:
w(t)Twf=(w(t−1)+ηyi(t−1)xi(t−1))Twf=w(t−1)Twf+ηyi(t−1)wTfxi(t−1)≥w(t−1)Twf+ηγ≥w(t−2)Twf+2ηγ≥⋯≥tηγ
另一方面,
∥w(t)∥2=∥w(t−1)∥2+η2yi(t−1)2∥xi(t−1)∥2+2ηyi(t−1)w(t−1)Txi(t−1)≤∥w(t−1)∥2+η2R2≤⋯≤tη2R2
∥w(t)∥≤t√ηR
因此,
cosθ(t)≥tγ∥∥wf∥∥t√ηR=t√(γ∥∥wf∥∥ηR)
由此我们可以知道cosθ(t)的下限是关于t√单调递增的函数,而cosθ(t)最多不超过1,因此随着迭代次数的增加,这个下限会越来越趋近于1,直至收敛。由于下限不超过1,我们可以近似求得收敛需要的次数:t√(γ∥∥wf∥∥ηR)≤1⟹t≤∥∥wf∥∥2η2R2γ2,也就是说,最大迭代次数不超过ceil(∥∥wf∥∥2η2R2γ2)。但由于t有上限,这表明算法会停止,而结合算法停止的条件是没有误分类点,那么算法收敛时找到的超平面一定是线性可分的。
注意:不要认为w(t)一定会收敛于wf,因为感知器的可行解不是唯一的,差几度也是可以的。
线性可分告诉我们w(t)Twf增长的很快,而用错误修正w告诉我们∥w(t)∥增长的很慢,两者一综合可以得出结论,w(t)越来越靠近wf,直至算法停止
总结一下PLA算法:
优点:易于实现,效率高, 对于任意维度都适用
缺点:
(1)事先不知道数据是否线性可分,需要找到一个wf,但需要线性可分才找的到wf,于是陷入循环论证
(2)即使知道数据是线性可分的,我们也无法知道算法什么时候能停下来,因为我们不知道wf
线性可分是一种比较理想的情况,真实世界中这样的数据并不多见。一方面现实中的数据维度一般都远大于二维,维数越多,数据的分布就越复杂,线性可分的可能性就越小;另一方面,即使target function是线性的,由于数据采集过程中的噪声导致的非线性也是非常有可能的。这样一来,感知器模型就无法广泛地应用了,于是有人提出了能够应用于非线性可分数据的感知器:Pocket PLA。它是一类贪心算法,先在“口袋”里保存一条最好的线wg,然后每次随机挑一个错误修正w得到w(t+1),并与wg比较哪一条更好,如果比wg更好,就令wg=w(t+1),否则继续循环,直到到达一定循环次数为止。
![](http://images.cnitblog.com/blog/583155/201412/092150343068886.png)
pocket算法比PLA慢,这是因为要比较两条线哪条更好,需要遍历所有数据,计算两条线各自犯的错误是多少。
相关文章推荐
- Coursera机器学习基石 第2讲:感知器
- 听课笔记(第一讲):台湾国立大学的《机器学习基石》(Coursera 版)
- Coursera 机器学习基石 第4讲 学习的可行性
- NTU-Coursera机器学习:机器学习基石 (Machine Learning Foundations)
- Coursera机器学习基石 第1讲:The Learning Problem
- Coursera课程-机器学习基石作业一Q18-Q20(pocket on D算法 for PLA/C++ edition)
- 林轩田--机器学习基石&机器学习技法
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业四 Q13-20 MATLAB实现
- 机器学习基石 7.2 VC Dimension of Perceptrons
- 機器學習基石(Machine Learning Foundations) 机器学习基石 课后习题链接汇总
- 【机器学习基石】在何时可以使用机器学习(1~4章)
- 机器学习基石第三讲:types of learning
- 机器学习基石第四讲:feasibility of learning
- coursera_机器学习_吴恩达_week2
- 机器学习基石笔记2——在何时可以使用机器学习(2)
- 台湾大学林轩田机器学习基石笔记(一)
- coursera-斯坦福-机器学习-吴恩达-第11周笔记-ORC系统
- 台大林轩田老师关于coursera机器学习课程的声明
- Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 1——简单的线性回归模型和梯度下降
- 机器学习之Coursera Andrew Ng 《Machine Learning》 week 6 test 2