台大机器学习基石笔记(二)——VC 维1

来源:互联网 发布:攻击地图源码 编辑:程序博客网 时间:2024/06/05 16:49

本文基于http://beader.me/的博客进行编写,有些的地方我做了简单修改,公式也重新敲了,加深一下理解。

上一篇讲到,learning的时候如果遇上bad sample,如果遇上bad sample我们就无法保证EinEoutbadsampleD[BADD]2Mexp(2ϵ2N)HypothesisSet|H|=MNbadsampleAgE_out(g)≈E_in(g)$。因此learning的问题可以聚焦到以下两个问题:

  1. 能不能确保E_in(g)和E_out(g)很接近?(Hypothesis Set中方程的个数会不会太多,用来训练的数据量够不够大)
  2. 能不能使E_in(g)足够小?(Hypothesis Set中方程的个数会不会太少)

这里我们便遇到了一个两难的选择:

  • 如果M很小,根据[BAD]2Mexp(...),第1个问题,“很接近”,做的不错。但是对于第2个问题,由于选择性太少,很难找到Ein(g)较小的g。(想象一下如果数据是由一个二次方程所产生,而Hypothesis Set当中只有直线方程可以选)

  • 如果M很大,我们选择方程的时候更加自由(自由度),更有机会选到E_in很低的方程。但这个时候根据公式,我们遇到bad
    sample的可能性也大大增加。

因此这篇笔记主要围绕公式中这个M展开:

[|Ein(g)Eout(g)|>ϵ]2Mexp(2ϵ2N)

有效的方程 (Effective Number of Hypotheses)

  让我们来回忆下这个M是从哪里来的。记H中第m个方程遇到bad sample为事件Bm:|Ein(hm)Eout(hm)|>ϵ,则H遇到bad sample的概率为其所有方程遇到bad sample概率的联合概率。如果每个方程遇上bad sample这件事是互相独立的,则H遇上bad sample的概率是各方程遇上bad sample的概率之和,因此他们的联合概率一定小于等于各个事件单独发生的概率之和。

[B1orB2or...orBM][B1]+[B2]+...+[BM]

  但事实上bad event并不是完全独立的。想象H两个非常类似的方程h1h2,他们遇到bad sample分别为事件B1B2,因为这两个方程很接近,则往往B1发生时,B2也会发生,可以说B1B2的重合度很高(overlapping)。

  那么我们就会想,我们能不能把结果接近的那些方程看成一类,譬如有些方程他们的预测结果总是相同或是很接近的。

  假设我们的算法要在平面上挑选一条直线方程作为g,H=alllinesin2H当中有无限多个方程,但我们可以把这些个方程归为两类。一类是把x1判断成圈圈的,另一类是把x1判断为叉叉的。

  那如果我们手中有2个数据点x1x2呢?这样的话H中无数条直线可以分为4类。用这4类线对x1x2进行预测,一共能产生4种不同的结果。

  那如果我们手中有3个数据点x1x2x3呢?

  H中最多有8类直线,作用于D产生如上8种结果。

  那如果我们手中有4个数据点x1 x4,情况又会是怎样。前面的例子中我们基本上把各个数据点的情况用排列组合的方式组合出来即可。但对于4个以上的点而言,就不是那么容易了。

  在这16种组合中,就有两种是“直线方程”没有办法产生的结果。因此如果是2维空间中的所有直线,表面上看是在无数条直线方程中去挑,但由于大部分直线方程所产生的结果是一模一样的,结果不一样的直线的类别对应上面的例子分别为2类、4类、8类和14类(Effective Number of Lines)。属于同一类的直线,他们将同时遇到或不遇到bad sample,由于之前那个union bound是基于独立性的假设下的,因此遭遇bad sample的概率明显被夸大了。所以,我们应该把不等式改写为:

[|Ein(g)Eout(g)|>ϵ]2effective(N)exp(2ϵ2N)

作用于能够产生多少不同的结果? (Dichotomies)

  从H中任意选取一个方程h,让这个hD进行二元分类,输出一个结果向量,比如对4个点进行预测,输出o,o,o,×,这样的一个输出向量我们称它为一个dichotomy。不难得出,一个直线方程在D中对应一个dichotomy,但一个dichotomy至少对应一个直线方程,我们把一个dichotomy对应的所有直线方程视为一类,则effective number of lines就等于不同D中不同的dichotomy的数量。显然这个dichotomy的数量小于等于所有数据点的排列组合数的,例如上图中画大叉的那幅图对应的排列组合,就不能成为一个dichotomy,因为它们无法由任何一条直线方程产生。(当然如果考虑的不是直线方程,则那种排列组合是可以成为一种dichotomy的)
  因此我们前面要找的
  effective(N)
      =平面中能找出多少条不同类的直线
      =H作用于D能产生多少不同的dichotomy。
  因为不一定所有排列组合都能成为dichotomy,所以不同的dichotomy的数量一定不会超过排列组合数2N,上例中如果存在三点共线的情况,则dichotomy的数量会更少,因此:
  effective(N)
      =H作用于D“最多”能产生多少不同dichotomy

成长函数 (Growth Function)

  那么,H作用于D“最多”能产生多少种不同的dichotomy呢?这个数量与H有关,也与数据量N有关。用数学式可以表达为:

max|H(x1,x2,...,xN)|

  上式又称为成长函数(growth function)。在H确定的情况下,growth function是一个与N相关的函数。以下是几种常见的Hypothesis Set的成长函数。

1.Positive Rays


输入空间为一维实数空间。大于threshold a的预测+1,否则预测-1。 for example: 当N=4时,Positive Rays作用于x1 x4,共能产生5个不同的dichotomies。如下图:

不难去想,4个点,5个可能的切点,最多产生5种dichotomies。因此Positive Rays的成长函数为:

mH(N)=N+1

2.Positive Intervals


和前面的类似,只不过Positive Intervals有两个threshold,夹在两个threshold之间的预测为+1,其余预测为-1。 for example: 当N=4时,Positive Intervals作用于x_1~x_4,共能产生11种dichotomies。如下图:

同样不难去想,4个点,5个可能的切点选两个作为threshold,加上两个threshold重合产生的一种,因此Positive Intervals的成长函数为:

mH(N)=(N+12)+1=12N2+12N+1

3.Convex Sets

任选k个点,在这k个点组成的convex多边形包围内的所有点都预测+1,否则预测-1。前面我们说到成长函数描述的是“最多”能产生的dichotomy种数,因此如果我们这N个input摆成一个圈,则这N个点的任意一种排列组合都能成为一个dichotomy。因此Convex Sets的成长函数为:

mH(N)=2N

坏掉的散弹枪 (Shatter & Break)

  当H作用于有N个inputs的D时,产生的dichotomies数量等于这N个点的排列组合数2N时,我们就称这N个inputs被H给shatter掉了。或者也可以说H产生的2N个dichotomies把这N个点的2N种排列组合给shatter了。

  这个shatter的意思似乎不太好理解,这是林老师在讨论区中的回复:

  “大家對 break point 的討論很好,不過注意到 shatter 的原意是「打碎」,在此指「N 個點的所有(碎片般的)可能情形都被H產生了」。所以mH(N)=2N 的情形是「shatter」。”

  我(原作者)从打游戏过关的角度去理解,shatter作打碎理解:

  “mH是把散弹枪,在每个关卡(level N)中,他可以有mH(N)发小子弹(每发小子弹对应一种dichotomy),而你面临的是2N个敌人。你得一枪打出去shatter掉所有人。对于mH(N)=2N这把散弹枪来说,第一关和第二关都还好,第三关6发小子弹shatter不掉8个人,于是它就break了。”

  对于给定的成长函数mH(N),从N=1出发,N慢慢增大,当增大到k时,出现mH(k)<2k的情形,则我们说k是该成长函数的break point,对于任何N>k个inputs而言,H都没有办法再shatter他们。

  不难根据成长函数得出Positive Rays成长函数的break point为2,Positive Intervals成长函数的break point为3,Convex Sets不管N多大都可以去shatter掉那N个点,因此它的成长函数没有break point。2D Perceptrons的break point为4,因为在N=3时,它都能够shatter,产生23=8种dichotomies,当N=4时,它不能够shatter,最多只能产生14(<24=16) 种dichotomies,因此2D Perceptrons成长函数的break point为4。

其实我认为就是:能包括全部可能性。

拿什么来镇镇成长函数 (Restriction of Break Point)

  有些H的成长函数很容易找到,比如前面说到的Positive Rays、Positive Intervals以及Convex Sets;有些H则没有那么容易,比如2D perceptrons,我们无法直接看出它的成长函数是什么,那么我们对于这样的就没辙了吗?也不完全是,至少我们手上还掌握着它的break point,能不能用这个break point干点事呢?如果没办法得到成长函数,能得到成长函数的upper bound也是不错的。

  先用例子来看看,当我们完全不知道H是什么,只知道它的break point k时,H作用于D“最多最多”可以产生多少这dichotomies。注意这里我用了两个“最多”,由于我们无法确切知道成长函数,因此我们用这个break point推算出的这个dichotomies的数量仍然是个高估值,这个高估值实际上是任何break point为k的H作用于D所真实产生的dichotomies数量的上界 (upper bound)。

  举例说明,假设我们不知道某个H的成长函数m_{H(N)},但知道它的break point k=2,那么作用于N=3的D时,“最多最多”能产生多少种dichotomies?

  从k=2我们可以知道,任意2个数据点都不能被shatter。还记得shatter的概念吗?意思就是我产生的dichotomies不能完全包含任何2个数据点所有的排列组合。让我们从1个dichotomy开始。

1 dichotomy

2 dichotomies

3 dichotomies

  注意看x2x3这两列,这3个dichotomies已经包含x2x3这两个点所有的4种排列组合中的3种了。再多加一种x2x_3$就会被shatter。

4 dichotomies

  看右边两列,x_2和x_3被shatter了。但之前说了k=2,即任意2个点不能被shatter,因此不可能产生这4种dichotomies。那我们换一个dichotomy试试看。

4 dichotomies

  换了一个dichotomy之后就行了,右边2列只包含了x2x3所有排列组合4种中的3种,因此那两个点没有被shatter。继续检查任意的两个点(x1x2)(x1x3),都没有被shatter,看来这4种dichotomies是可以的。

  5个dichotomies的情形这里就不再画出来了,很容易看出不管增加怎样的dichotomy进去,都会有两个点被shatter掉。因此这里“最多最多”只能有4种dichotomies。因此N=3,k=2时的upper bound是4。我们用B(N,k)来表示break point为k的任意的作用于size为N的任意的所能产生的dichotomies的数量的上限(“最多最多”)。则刚刚得出的结论可以表示为B(3,2)=4,因为任意2个数据点不能被shatter,因此当N=2,K=2时,B(2,2)<4,因此最多最多有B(2,2)=3。

  美妙的地方马上就要到了,虽然很多时候我们无法直接得到成长函数mH(N),但如果我们知道它的break point是多少,我们似乎还是有办法算出这个mH(N)的上界B(N,k)的。于是乎我们就有了新的目标,不去直接研究mH(N),转而去研究B(N,k)

前面我们已知了B(2,2)=3B(3,2)=4。不难知道:

  • k=1时,1个点(2种排列组合)都没有办法shatter,因此B(?,1)恒等于1。
  • k>N时,一定能shatter掉N个点,因此它产生的dichotomies的种类等于这N个点所有的排列组合数2N。
  • k=N时,从2N个排列组合中移除掉一个,剩下的都可以作为dichotomies,因此它产生的dichotomies的数量“最多最多”可以是2N1


  表格剩余的部分该如何填补?B(4,3)是否与B(3,?)有关呢?
  此时某某实验室帮老师抛硬币的研究生要上场了,他穷举了所有可能的dichotomies,发现B(4,3)=11,以下是他的研究成果:

  我们把这份结果做个排序:

  发现秘密了没有,橙色的部分是成对出现的,只有紫色的部分是单独出现的:
  

1.果拿掉x4,只看x1,x2,x3这3个点:
 α+β部分可以成为这3个点的dichotomies,因为k=3,所以任3个点不能够被shatter,因此有::

α+βB(3,3)

2.再来看剩下一个α的部分:

  注意α是之前成对存在的部分,并且α部分不可以shatter掉任意2个点,因为如果α部分的dichotomies可以shatter掉任意2个点,他每一行都再搭配x4的两种情况,这样产生的dichotomies就能shatter掉3个点了,和break point为3相违背。所以α不能shatter掉任2个点。因此有:

αB(3,2)

  综合上面两个不等式,我们可以得到:
B(4,3)=2α+βB(3,3)+B(3,2)

  这样就能够把前面那张表给填完整:

B(N,k)=2α+βα+βB(N1,k)αB(N1,k1)B(N,k)B(N1,k)+B(N1,k1)

  用数学归纳法可以证明:
  
B(N,k)i=0k1(Ni)

  当k=1时不等式恒成立,因此只要讨论k≥2的情形。N=1时,不等式成立,假设NNo时对于所有的k不等式都成立,则我们需要证明当N=No+1时,不等式也成立。根据前面得到的结论,有:
B(No+1,k)B(No,k)+B(No,k1)i=0k1(Noi)+i=0k2(Noi)=1+i=1k1(Noi)+i=1k1(Noi1)=1+i=1k1[(Noi)+(Noi1)]=1+i=1k1(No+1i)=i=0k1(No+1i)

  因此当N=No+1时,不等式也成立。

  成长函数的上界B(N,k)都被bound住了,那我们的成长函数同样也可以被这个bound住,因此对于存在break point k的成长函数而言,有:

mHi=0k1(Ni)

  By the way,右手边(RHS)实际上是一个最高次项为k-1次的多项式。以2D Perceptrons为例,它的break point k=4,则它的成长函数会被B(N,4)给bound住:

mHi=0k1(Ni)=16N3+56N+1

总结

  上一篇说的learning的可行性,讲到,如果遇上bad sample,Ein(h)Eout(h)就会差很多,此时learning不可行。遇到bad sample的概率与H中方程的数量M以及D中的数据量N有关。然而H中方程的数量往往是无穷的(比如2D Perceptrons的是平面上所有的直线),本篇则继续阐述,方程的数量看上去是无穷的,但真正有效(effective)的方程的数量却是有限的,我们可以用成长函数mH(N)来描述H作用于D会产生多少种有效的方程。如果用有限的成长函数去代替无限的M,就有:

$[BADD]2mG(N)exp(2ϵ2N)

  但实际上我们很难确切知道各种{H}的成长函数m_{H(N)}究竟长什么样子,我们只好通过break point去寻找成长函数的upper bound。不过这当中仍然有些情况没有考虑到,将在下一篇笔记中继续说明。

0 0
原创粉丝点击