Perceptron#
1- 之前已经了解到,机器学习的过程是:
- 输入一笔数据,这笔数据由X和Y组成,而x和y服从一个未知的分布f
- 通过learning algorithm A在hypothesis set H中挑选一个合适的g,这个g即是机器学习到的,希望这个g能够很接近f,以至于能替代它。
- 机器学习的模型是由Learning algorithm A和 hypothesis H组成
今天就要学习一个模型,既然是模型,学完后就要清楚地知道它的hypothesis set 和 learning algorithm
1.Perceptron Hypothesis set#
1.1抽象解释#
- 情景:如上图所示,已经了解客户的年龄,工资,工作年限,负债情况等,达到银行的标准,则通过他的信用卡申请。那么如果让机器来做,它要做的是什么呢?
> 回顾机器学习的过程,我们需要有输入数据D(x,y),Hypothesis H, learning algorithm A。那么一一与这个情景对应,应是怎么样呢? - 机器:
- 把每个申请者当做一个向量X,把申请者的信息当做不同维度的特征,则X=(x1,x2,x3,…,xn)
- 把同意申请设为+1,不同意申请设为−1, 则Y:{+1(good),−1(bad)},0忽略
- 银行的标准即为阈值(threshold)
- 不同维度的特征应该有不一样的权重w
那么 H:h(x)=sign((i=1∑nwixi)−threshold)
这个式子可以做一个数学上的简化: h(x)=sign((i=1∑nwixi)−threshold)=sign((i=1∑nwixi)+(−threshold)⋅(+1))=sign(i=0∑nwixi)=sign(wTx)
这里将−threshold 当作w0,1当作x0, 从而将式子整理为两个向量内积的形式
1.2图像意义#

上图是perceptron在二维平面上的展示。
- x 代表平面上的一个点,每个特征代表一个维度,这个图中只有两个特征
- ∘ 代表+1, × 代表−1
- 直线代表h
因此,正的应该在一边,负的应该在另一边 所以,二维的perceptron就是一个线性分类器,当然,可以想象,三维的perceptron也是一个分类器,不过不在是一条线,而是一个面
2.Perceptron Learning Algorithm#
前面已经说了一个模型是由Hypothesis set和Learning Algorithm组成,光知道Hypothesis set是不够的,还需要知道如何从hypothesis set中选取一个合适的g,使g≈f,而这个过程就是learning algorithm所做的。
- 我们的目的是得到一个g,并且g≈f,但我们怎么判断g和f很接近呢?
- 我们知道的就是X和y,所以如果g≈f就会有g(xn)=f(xn)=yn
- 但hypothesis set中有无数条线,怎么办呢?
- 可以想像最开始有一条线,当这条线有错误时,就去修正它,直至它没出错为止
- 如何修正呢?
- 一轮一轮的修正。t=0,1,2…代表在第几轮, 若第t轮中,在一个点上(xn(t),yn(t))使得sign(wtTxn(t))=yn(t),则令wt+1=wt+yn(t)xn(t),直到没有错误。然后将w返回,当作g
- 怎么判断它没有错误了呢?
- 将这些点编号,在每一轮中,按顺序去一个点一个点的检查,或者随机不重复的检查,当这些点全都遍历完,且没有错误的点,则没有错误了
按以上这种方式进行,称为cycle PLA
但依然有些疑问:
- 这样做PLA是否一定会停下来呢?
- 即使停下来,
- 在样本以外的数据上表现怎么样呢?
- 如果不会停呢?
3.Guarantee of PLA#
如果PLA能够停下来,那么所有的点肯定被分成了两部分,即数据被分成了两部分。那么这部分数据就是线性可分(linear separatablility的。反过来,由数据是线性可分一定能推出PLA可以停下来吗?
数据是线性可分,代表存在一条线,可以将数据分成两部分(如下图所示),不妨将这条线表示为wf,既然将数据分成了两部分肯定有 nminynwfTxn>0 ynwfTxn表示的是点到直线的距离。也肯定有 yn(t)wfTxn(t)>nminynwfTxn>0
每次更新的过程: wfTwt=wfT(wt−1+yn(t−1)xn(t−1))≥wfTwt−1+nminynwfTxn≥wfTwt−2+2nminynwfTxn≥wfTwt−3+3nminynwfTxn⋮≥wfTw0+tnminynwfTxn
w0=0,所以
wfTwt≥tnminynwfTxn
根据上式,可以看出wf和wt的内积的确越来越大,但是不一定是越来越靠近,可能只是∣∣wt∣∣变大了
同时,当sign(wtTxn(t))=yn(t)时,wt会改变。易得yn(t)wtTxn(t)≤0⇔sign(wtTxn(t))=yn(t)
∣∣wt∣∣2=∣∣wt−1+yn(t−1)xn(t−1)∣∣2=∣∣wt−1∣∣2+2yn(t−1)wtTxn(t−1)+∣∣yn(t−1)xn(t−1)∣∣2≤∣∣wt−1∣∣2+0+∣∣yn(t−1)xn(t−1)∣∣2≤∣∣wt−1∣∣2+nmax∣∣ynxn∣∣2≤∣∣wt−2∣∣2+2nmax∣∣ynxn∣∣2⋮≤∣∣w0∣∣2+tnmax∣∣ynxn∣∣2≤tnmax∣∣ynxn∣∣2
∣∣wf∣∣wfT∣∣wT∣∣wT≥∣∣wf∣∣tnmax∣∣ynxn∣∣2tnminynwfTxn≥tnmax∣∣ynxn∣∣nminyn∣∣wf∣∣wfTxn=tnmax∣∣xn∣∣nminyn∣∣wf∣∣wfTxn
由此可以看出,wf和wT确实越来越靠近,最终重合,所以 ∣∣wf∣∣wfT∣∣wT∣∣wT≤1 令$ = _n ||x_n||^2= _n y_n _n $
tnmax∣∣xn∣∣nminyn∣∣wf∣∣wfTxn≤1t≤ρ2R2
可以看出t是有上界的,所以当数据是线性可分的时候,PLA最终会停
4.Non-Separable Data#
经过以上的推理,可以知道,当D 是线性可分的时候,PLA 会选取的线会越来越接近wf并最终停止。来总结下PLA算法的优缺点
- pros
- cons
- 需要假定D是线性可分的
- 不能确定多久才能停?(不停可能是还没跑完,也可能是D根本不是线性可分的)
所以,如果D不是线性可分怎么办呢?
3首先机器学习的D的设定并不是完全基于target function f,可能在收集数据或者产生数据的时候就有噪声,在这样的情况下,如何找到一个g并且g≈f?
一般情况下,噪声不会太多,因此,通常情况下,yn=f(xn),那么也可以找到一个g且g≈fonD,也即通常情况下,yn=g(xn)
既然这样,能否像这样找出g呢?
wg←argmaxwn=1∑N∥yn=sign(wTxn)∥
这样做是不可能的.NP-hard
能否通过修改之前的PLA,然后来找出g呢? 这个是可以的,很容易想到,噪声并不算多,找一个犯错犯的少的线即可。这种PLA称作pocket PLA。其原理和贪心法很像。
- 初始化w
- 随机找一个点,看是否有错
- 若有错,则更正这个错误,wt+1←wt+yn(t)xn(t)
- 如果wt+1这条线犯的错误更少,则替换w^
- 重复第2,3,4步操作
- 经过足够多轮的迭代后,返回w^