本栏目(机器学习)下机器学习基石专题是个人对Coursera公开课机器学习基石(2014)的学习心得与笔记。所有内容均来自Coursera公开课Machine Learning Foundations中Hsuan-Tien Lin林轩田老师的讲解。(https://class.coursera.org/ntumlone-002/lecture)
第5讲-------Training versus Testing
从这一讲开始,讲的问题就是属于Why Can Machines Learn的范畴了。
一、Hypothesis set大小的重要性
上一讲的一开始我们说Learning好像不可行,后来我们逐步发现Learning在某些条件下是可行的。这些条件就是,Learning的Data符合统计学意义上的某种分布(因此可以映射为从罐子里抽弹珠这样的问题),另外hypothesis set的选择是有限的。这样看起来Learning是可行的。
过去的四节课,第一节课就是说Learning的目标就是想找到一个g可以尽可能地接近未知的f;第二节课的时候我们不知道怎么做,但是决定先在看过的训练资料上做到尽可能好,也就是想办法让E_in(g) ≈ 0;第三节课我们承认其实是在很特定的情况下做Learning,用批次batch的数据、用supervised监督式的学习、用二元分类等等;第四节课我们终于想办法把E_in(g)和E_out(g)连起来约等于了。那,第二节课做的事情——将E_in(g)弄得越小越好,便就真的实现了我们一开始实现的目标:我希望E_out(g)要很小。
由此可见,Learning的核心已经被拆成如下的两个问题,那hypothesis set的大小M是否会影响这两个问题的解决呢:
M很小的时候,E_in(g)与E_out(g)可以认为是很接近了,可是学习算法选择有限了,不一定能选到一个E_in(g)很小接近0的hypothesis;
M很大的时候,选择很多,学习算法可以选到一个很好的hypothesis,但是E_in(g)与E_out(g)不一致的坏情况发生的概率就变大了。
因此如此看来,M的正确选择是很重要的。至于无限大的M到底是不是会很糟糕,这个问题可能需要接下来的多节课之后才能得到答案。
二、无限的M,Hoeffding不等式
如果我们回顾一下Hoeffding不等式推导的过程,就会发现不等式右边求解的是一个概率上限,是将M种hypothesis坏事件发生的概率直接加和得到的结果。仔细想一下,如果两条直线很接近,那么他们出现坏事件的情况是会overlap的,所以直接加和的结果是over-estimate的。这样看来,针对M是无限的情况,我们有必要将hypothesis set进行分类,从而得到更准确的概率上限。
很明显,训练数据是有限的,尽管hypothesis set中有无限多条线,但是可以按照对训练数据分类情况进行分类。举个例子,当训练数据只有1个时,无限的hypothesis set中就只有两类:1类将其分为+1,另一类将其分为-1;同理,当训练数据只有2个时,无限的hypothesis set中就只有8类。当训练数据只有3个时呢,初步看起来好像是8个,真的如此吗?考虑如下一种特殊的情况:
How about训练数据有4个时?如下图所示,画大叉的分类结果是没法用一条直线分出来的,也就是说这个时候hypothesis的结果只有7 x 2 = 14种,还下图对于完全相反的分类结果没有画出,例如第一幅全部分类为圈圈对应的就是分类结果全部分类为叉叉。
由此可见,对于N大小的训练数据,超平面有效的种类数量是有限的,肯定小于2^N个,那么我们就可以用这个有限的种类数量来代替原来Hoeffding不等式右边无限的M,如下所示。
三、Dichotomies的有效数量
上一节讲的将无限的hypothesis set按照对训练数据的分类情况,有一个专有名词叫做Dichotomies。它就是指hypothesis set将大小为N的训练数据分成的不同情形的集合。本节主要想求出Dichotomies的大小,这样就可以用来替换原来Hoeffding不等式中无限的M了。
经过上一节的分析,我们发现Dichotomies的大小是依赖于训练数据的分布情况的。那么我们就定义Grow Function为所有训练数据的Dichotomies最大者好了。
要想现在求出PLA的hypothesis set的Dichotomies大小还比较困难,我们可以先来看一些简单的hypothesis set的Dichotomies大小的求解。
案例一。h(x) = sign(x - a)。那么这种情况下Dichotomies大小为N+1。
案例二。h(x) = +1 iff x 在一个凸形状中,否则=-1。假设N个训练数据都分布在一个圆形上,任意选希望被分为+1的数据点连成一个凸多边形,只要将这个凸多边形稍微扩大一点点就达到了效果。这样看来Dichotomies大小为2^N,因为任何想要的分类情形都可以实现。
四、Break Point
再想一想,我们想做的事情是什么?想用Growth Function去取代原来无限的M。根据上一节的分析,Growth Function可能为polynomial多项式的,good;也可能为exponential指数级的,bad,因为不等式右边后面一部分随着N指数级减少,而Growth Function却又指数级上升的时候,我们就没法保证在N够大的时候不等式右边是一个很小的概率值。
既然如此,那我们对PLA的Growth Function到底是polynomial还是exponential就更感兴趣了。以前的分析我们只知道它随着N的增大<2^N,但仍不知道它究竟是怎样。
定义Break Point。对于2D的PLA来说,Growth Function对于3个点可以分出所有的2^3 = 8种情形,但是对于4个点就没法分出所有的2^4 = 16中情形了,只有14种。这个时候4就被我们认为是Break Point。那显然对于上面Convex set的Growth Function = 2^N,它的Break Point显然是不存在的。
那我们就有一个猜想了:没有Break Point的hypothesis set对应的Dichotomies大小肯定是2^N,如果有Break Point,是否就代表着Dichotomies大小是多项式级的呢?
第6讲-------Theory of Generalization
这一节的话题是一般化的理论,或者说来探讨一下机器学习是如何做到举一反三的。
一、Break Point的约束
根据上一节的分析,我们知道如下四种情形的Break Point的情况,以及在break point样本量的时候对应的Dichotomies大小。
既然如此,换一个角度来考虑的话那么更General的情况是:如果现在已知minimum break point k = 2,在样本量N不同的情况下对应的Dichotomies大小又是如何的状况呢?k = 2这里的意义就是说任意的两个样本点都无法被shatter到(shatter到的意思:n个样本点的2^n个情形都能出现,这里就是指2个样本点的4种情形都能出现)。
N = 1时,m_H(N)最大为2没有问题,因为这时候都没有两个样本点;N=2时,仔细想一下m_H(N)最大为3,也就是能够shatter到的情形时的4减去任意一种情况即可;那么N = 3时呢?如下图所示,会发现无论再加入那种分类情形,都能找到任意的2个样本被shatter到。所以这时m_H(N)最大为4。
总结一下,k = 2会极大程度上约束着在N > k的样本上m_H(N)的最大值。也就是说,好像只要有一个break point,对未来m_H(N)会是多少会有一个限制约束。
好,既然有这个想法以后,m_H(N)跟我们实际上的hypothesis set有关,我们不如来算一下m_H(N)在有某一个break point的前提下,到底能产生多少种可能性。如果最多的可能性,也即m_H(N)的最大值也是一个多项式的话,那么就可以放心大胆的说m_H(N)也是多项式的。进而,如果能将这个多项式的m_H(N)成功地放进我们原来的Hoeffding不等式的话,也许我们就可以说在PLA这样的无穷hypothesis set上的Learning是做得到的。
二、Bounding Function上限函数
继续上面的想法,定义上限函数Bounding Function:已知最小的break point是k,那么Growth Function的最大值。可以将它想象为:不管Growth Function究竟怎样,只是探讨在排列组合可以有多少种可能。也就是说有一堆的长度是N的圈圈叉叉组成的向量,这些向量其实就是Dichotomy。但是有一个限制,这些长度为N的向量,如果将它的某些维度遮起来只看它的其中k个维度的话,不能看到k个维度的所有的情形,也就是2^k中组合,用我们的术语来说这个k个维度不能出现shatter。
这样的话,我们就可以忽略hypothesis set的具体细节,就只用Bounding Function代表有某一个break point的时候m_H(N)的最大值。咦,这样的话我们的目标就变成了求证B(N, k) 是一个多项式级的了。
根据之前的分析,我们可以得到如下的表格,填上的都是很简单的情形:
填这个表剩下的部分显然更为困难一点。首先尝试从B(4, 3)出发,来找到其与B(3, ?)的某种联系。可以编写一个程序来寻找4个点16种的组合中,找出任意3个没有shatter的最多个向量的组合,如下为11。
然后我们尝试将B(4, 3) = 11的解做一个整理,橘色的解都是成双成对的,x1-x3都是一模一样,而x4一个是圈圈一个是叉叉;而紫色的解则都是形单影只的。如果只看x1-x3,那么B(4, 3) = 2 α + β。B(4, 3)代表的意思是x1-x4的四个点中不能有任意的三个点shatter,也就是说当然x1-x3这三个点不能shatter,所以如图左,α + β必定会<= B(3, 3);另外我们知道对于 α 被遮住的部分x4是成双成对的也即x4是shatter的,如果同时x1-x3中有任意的两个点shatter再加上x4则此时便有了3个点是shatter的这也不合理,所以α
必定<= B(3, 2)如图右。因此,有B(4, 3) = 2 α + β <= B(3, 3) + B(3, 2)。
更一般化一点便有:B(N, k) = 2 α + β <= B(N-1, k) + B(N-1, k-1)。所以我们便能完善之前的那张表格了:
根据这个递推公式进一步的推导,很容易得到Bounding Function的上限,如下图所示。B(N, k)是多项式的,那么也就说明了只要有break point存在,那么m_H(N)也是多项式的。数学上可以证明,下面这个B(N, k)的“<=”实际上就是“=”。
这样,我们进一步来看之前分析过的几种hypothesis set的m_H(N)的大小。如下图,我们也就得到了,2D的感知机hypothesis set的m_H(N)是多项式的。只要有一个break point的存在,那么hypothesis set的Dichotomies大小的Growth Function成长函数就是多项式级的。
三、最终的不等式
好,那我们现在知道了Growth Function、Bounding Function这些观念,而且知道了Growth Function是多项式的。那我们能不能用这个Growth Function来替换原来Hoeffding不等式中的M呢?实际上事情没有那么简单。
最后的最后,我们能够做到事情是一个长得差不多的版本,如下图所示。可以看到实际上的版本首先需要样本量N够大;另外比原来多了3个额外的常数。
为什么会这样的证明非常的的technical,详细的证明也不是本课能cover的。但是,这个证明里面用到的技巧和我们之后的很多讨论都还蛮有关系的。所以接下来我们会从比较宏观的角度分析这三个常数出现的原因。
第一步,想办法将式子中的E_out(h)替换掉。hypothesis set只要有一个h发生坏事情也就是E_in(h)与E_out(h)差别很大,我们就说这个训练数据D不是好的数据,我们希望坏数据D发生的概率不要太高。
这个式子的困难之处,E_in(h)与训练数据有关只有有限个,最多只有Growth Function在N时候的取值,上限当然是2^N;可是E_out(h)还是有无限个,所以造就了目前最大的困难没办法直接将这个式子去套union bound。所以第一步需要做的就是想办法讲E_out(h)替换掉。How,如何用有限多个来表示E_out(h)?这个之前有讲到过,如果用1个hypothesis那就用verification,也就是抽样来估计E_out(h)。假设我有另外的N个点,也许E_in‘(h)就能用来取代E_out(h)。想象如果有个坏事情发生,也就是E_in(h)和E_out(h)相差很远;我再抽样一次E_in‘(h),有很大的机会(坏事情发生是小概率事件,那么这个很大的机会就是1-小概率,也就是>1/2)E_in(h)和E_in‘(h)也相差的很远。所以,便可以有了如上的不等式替换。
第二步,想办法将Hyspothesis set换成某一个h。如下图所示,现在在乎的所有和BAD有关的只是E_in(h)和E_in‘(h)来决定了。也就是说,如果h在D与D‘上做出一样的dichotomy的话,那么E_in(h)和E_in‘(h)就会长一样。所以我只要把所有的hypothesis set分成|H(x1, x2..., x‘1, x‘2...)|这么多类就好,也就是在这2N个点上有多少种Dichotomies就好了。这样的话最多最多有m_H(2N)种,把每一种抓一个代表出来我们就可以使用union
bound了。
第三步,求解两次Sampling的差别。
现在我们已经是固定的h,想知道两次sampling的差别。就好像我们先有2N个样本的例子,我们抓N个出来然后比较剩下的N个;或者说我们抓N个出来,比较它跟所有2N个的平均是多少。如果想要E_in(h)和E_in‘(h)相差alpha的话,那么E_in(h)与所有人的平均需要相差alpha/2。那怎么知道E_in(h)与所有2N的差别呢?没错,就是使用Hoeffding不等式来解决,只不错这次罐子变得更小变得有限的2N个了。
所以,最后的结果就变成了如下图所示。总结来说,我们便使用了非常挥挥手的方式证明了一个定理,这个定理就是VC bound。
所以,我们现在解决了2D的perceptron,它的break point是4,所以成长函数是O(N^3),代进去则表示坏事情发生的几率会很小。也就是说样本N足够多的时候,2D 的PLA算法真的能够达到机器学习的效果。当然我们现在还没有证明任意维度的perceptron到底会发生什么事情。
关于Machine Learning Foundations更多的学习资料将继续更新,敬请关注本博客和新浪微博Sheridan。
原创文章如转载,请注明本文链接: http://imsheridan.com/mlf_5th_lecture.html