机器为什么能够学习?


本系列是*大学资讯工程系林軒田(Hsuan-Tien Lin)教授开设的《机器学习基石》课程的梳理。重在梳理,而非详细的笔记,因此可能会略去一些细节。

该课程共16讲,分为4个部分:

  1. 机器什么时候能够学习?(When Can Machines Learn?)
  2. 机器为什么能够学习?(Why Can Machines Learn?)
  3. 机器怎样学习?(How Can Machines Learn?)
  4. 机器怎样可以学得更好?(How Can Machines Learn Better?)

本文是第2部分,对应原课程中的4-8讲

本部分的主要内容:

  • 用案例引出学习可行性的疑问;
  • 详细介绍VC维理论,它给出了机器学习的可靠性保证;
  • 介绍误差的度量,以及对误差权重不同的情况的处理方法。

1 学习可行性的疑问

先来一个小学奥数题/公务员考试题:

机器为什么能够学习?

其实这个题没有标准答案,以下两种解答都是对的:

  • 对称为+1+1,非对称为1-1,因此答案是+1+1
  • 最左上角的格子白色为+1+1,黑色为1-1,因此答案是1-1

因此,选择不同的规则,你会获得不同的答案。那么,如果给你一些历史数据,机器学习出某种规则,是否也会遇到这样的情况呢?

2 机器学习的可靠性保证

2.1 Hoeffding不等式

来看另一个问题:有一个罐子,里面装有许许多多黄色和绿色的小球,该如何估计黄球的比例?

很简单,抽样就行了。抽出一部分样本,计算得到样本中的黄球比例ν\nu,用这个比例作为罐子中的黄球比例μ\mu的估计即可。这样的估计准不准呢?在统计学中,有Hoeffding不等式给出准确率的界限:

P[νμ>ϵ]2exp(2ϵ2N) \mathbb{P}[\vert\nu-\mu\vert>\epsilon]\le 2\exp{(-2\epsilon^2 N)}

其中NN为抽样的样本个数。这个式子的意思是,ν\nuμ\mu相差较远的概率会有一个上限,在大样本下,这个上限会比较小,因此ν=μ\nu=\mu可以叫做概率近似正确(PAC,probably approximately correct)。

2.2 机器学习中的Hoeffding不等式

现在将这个过程类比到机器学习中。罐子中的小球对应于X\mathcal{X}中的单个数据x\mathbf{x},给定假设集中的一个假设hh,罐子中黄球的比例就对应于X\mathcal{X}中使得h(x)=f(x)h(\mathbf{x})=f(\mathbf{x})x\mathbf{x}的比例。现在抽取出一部分样本,这个样本对应于现有的数据集D\mathcal{D},我们可以很容易地知道对D\mathcal{D}中每一个数据(xn,yn)(\mathbf{x}_n,y_n)是否有h(xn)=ynh(\mathbf{x}_n)=y_n,若相等,对应的小球为黄色,反之为绿色。我们的目的,是要知道在整个X\mathcal{X}中满足h(x)=f(x)h(\mathbf{x})=f(\mathbf{x})x\mathbf{x}的比例有多少。

NN足够大,且xn\mathbf{x}_n为i.i.d.,对于某个固定的hh来说,就可以用已知的Ein(h)=1Nn=1N1[h(xn)yn]E_{\text{in}}(h)=\dfrac{1}{N}\sum\limits_{n=1}^{N} \mathbf{1}_{[h(\mathbf{x}_n)\ne y_n]}去推断Eout(h)=ExP1[h(x)f(x)]E_{\text{out}}(h)=\mathop{\mathcal{E}}\limits_{\mathbf{x}\sim P}\mathbf{1}_{[h(\mathbf{x})\ne f(\mathbf{x})]},从而判断该hh的表现如何,如下图:

机器为什么能够学习?

根据Hoeffding不等式,就是

P[Ein(h)Eout(h)>ϵ]2exp(2ϵ2N) \mathbb{P}[\vert E_{\text{in}}(h)-E_{\text{out}}(h)\vert>\epsilon]\le 2\exp{(-2\epsilon^2 N)}

如果Ein(h)E_{\text{in}}(h)Eout(h)E_{\text{out}}(h)足够接近,并且Ein(h)E_{\text{in}}(h)足够小,这就能保证Eout(h)E_{\text{out}}(h)足够小,也就能判断出对于抽样过程PP,有hfh\approx f

但是,这只能用来判断某个hh是否足够好。如果现在是用算法A\mathcal{A}从假设集H\mathcal{H}中选出一个hh,再套用上面的不等式,就会有问题。试想一下,假设有150个人,每人丢5次硬币,就有超过99%的概率会出现有某个丢5次硬币都是正面的人,这能说明他的丢硬币技术比其他人高吗?如果选择他作为我们的“gg”,能保证他以后再去丢硬币,得到正面的概率也比其他人更大吗?

同理,如果是从H\mathcal{H}中选出一个在样本D\mathcal{D}内误差最小的gg,能保证它在D\mathcal{D}外也是更好的吗?想要得到这样的保证,还需对不等式做一些修正。

对每个hh,都可能会有一些D\mathcal{D},使得hh在它上面的Ein(h)E_{\text{in}}(h)和真正的Eout(h)E_{\text{out}}(h)相差很大,把这种D\mathcal{D}称作“坏的”,Hoeffding不等式本质上是保证抽到坏的D\mathcal{D}的概率有一个上限。记H=M\vert\mathcal{H}\vert=M,即共有MMhh,我们想要保证的是不管最后A\mathcal{A}选出了哪个,D\mathcal{D}是“坏的”的概率都有较小的上限,因此,要计算的应该是对至少一个hh来说D\mathcal{D}是“坏的”的概率:

PD[(BAD D for h1) or (BAD D for h2) or  or (BAD D for hM)]PD[BAD D for h1]+PD[BAD D for h2]++PD[BAD D for hM]2exp(2ϵ2N)+2exp(2ϵ2N)++2exp(2ϵ2N)=2Mexp(2ϵ2N) \begin{aligned} &\mathbb{P}_{\mathcal{D}}[(\textbf{BAD } \mathcal{D} \text{ for } h_1) \textbf{ or } (\textbf{BAD } \mathcal{D} \text{ for } h_2) \textbf{ or } \ldots \textbf{ or } (\textbf{BAD } \mathcal{D} \text{ for } h_M) ]\\ \le& \mathbb{P}_{\mathcal{D}}[\textbf{BAD } \mathcal{D} \text{ for } h_1] + \mathbb{P}_{\mathcal{D}}[\textbf{BAD } \mathcal{D} \text{ for } h_2] +\ldots+\mathbb{P}_{\mathcal{D}}[\textbf{BAD } \mathcal{D} \text{ for } h_M]\\ \le& 2\exp{(-2\epsilon^2 N)}+2\exp{(-2\epsilon^2 N)}+\ldots+2\exp{(-2\epsilon^2 N)}\\ =& 2M\exp{(-2\epsilon^2 N)} \end{aligned}

这才是A\mathcal{A}选出来的hhEin(h)E_{\text{in}}(h)Eout(h)E_{\text{out}}(h)距离的上限。但在上面的过程中,因为对事件的并集直接用了加的运算,这个上限被放得太大了,由于不同的hh对应的“坏的”D\mathcal{D}很可能有很大重叠,因此真实的上限应该要小得多。如图:

机器为什么能够学习?

另外,MM如果是有限的,根据上式,我们还是可以通过增大NN来保证Ein(h)E_{\text{in}}(h)Eout(h)E_{\text{out}}(h)足够接近,但如果MM是无限的呢?如在PLA中,系数的取值就可以是无限多个,因此PLA的MM是无穷大的。

2.3 VC维

MM为无穷大时,还是有办法的。尽管PLA的MM是无穷大,但其实,我们可以对它的H\mathcal{H}中的元素进行分类,只要样本个数是有限的,它的类别就是有限的。比如在只有一个样本的情况中,二维PLA的H\mathcal{H}中的元素(就是二维平面上的所有直线)可以简单分为两类,一类是把该样本点分为正的,一类是把该样本点分为负的:

机器为什么能够学习?

而在两个样本的情况中,H\mathcal{H}中的元素可以分为4类:

机器为什么能够学习?

三个样本时可分为8类:
机器为什么能够学习?

但若3个点共线,那么只有6类:
机器为什么能够学习?

而当有4个样本时,H\mathcal{H}中的元素最多只能分成14类:

机器为什么能够学习?

这说明,在PLA中,有NN个样本时,有效的MM会小于等于2N2^N

接下来,引入几个概念:

  • 二分(Dichotomies):对NN个样本,每个样本都有正负两种可能,将所有样本组成的每一种可能称为一个dichotomy,dichotomies的集合可记为H(x1,x2,,xN)\mathcal{H}(\mathbf{x}_1, \mathbf{x}_2, \ldots,\mathbf{x}_N),显然,集合中元素个数的上限是2N2^N
  • 成长函数(Growth Function):定义成长函数mH(N)=maxx1,x2,,xNXH(x1,x2,,xN)m_{\mathcal{H}}(N)=\max\limits_{\mathbf{x}_1, \mathbf{x}_2, \ldots,\mathbf{x}_N \in \mathcal{X}} \vert \mathcal{H}(\mathbf{x}_1, \mathbf{x}_2, \ldots,\mathbf{x}_N) \vert,它的上限是2N2^N,对于大多数模型(如二维感知机)的H\mathcal{H}来说,mH(N)m_{\mathcal{H}}(N)2N2^N小,仅为多项式大小;
  • 打散(Shatter):如果H\mathcal{H}可以完全实现NN个样本的2N2^N种dichotomies,则称NN个点可被H\mathcal{H}打散;
  • 突破点(Break Point):若kk个点无论如何也无法被H\mathcal{H}打散,则称kkH\mathcal{H}的break point,根据定义,所有比kk大的整数也都会成为break points,对于二维感知机来说,从4开始就是它的break point。

接下来就是要找到,break point和mH(N)m_{\mathcal{H}}(N)的关系。

我们继续引入界限函数(Bounding Function)的概念:B(N,k)B(N,k),它是当最小的break point为kk时的最大可能mH(N)m_{\mathcal{H}}(N)。那么,该如何计算它或者它的上限?

首先,当k=2k=2时,表示任意两个点都不能被打散,因此当N=2N=2时有B(2,2)=3B(2,2)=3,即最多能列举出3种dichotomies(4种就是这两个点被打散了),当N=3N=3时有B(3,2)=4B(3,2)=4(穷举法可知)。而当k=1k=1时,由于任何一个点都不能被打散,因此只能有一种dichotomy,即B(N,1)=1B(N,1)=1。另外,如果k>Nk>N,由于小于kk个样本点都能被打散,因此会有B(N,k)=2NB(N,k)=2^N。而如果N=kN=k,那么只需在2N2^N个被打散的点中拿掉一种dichotomy,就能满足这NN个点不被打散的概念了,因此有B(N,k)=2N1B(N,k)=2^N-1

到目前为止,在下面这张函数表中还有一部分没有计算:

机器为什么能够学习?

不妨先来看B(4,3)B(4,3)该如何计算。如果用穷举法,可以得出B(4,3)=11B(4,3)=11

机器为什么能够学习?

观察这11种dichotomies发现,它们可以分成两组,其中一组的前3个点是有重复的,它们成为不同的dichotomies仅仅是因为x4\mathbf{x}_4不同,而另一组的前3个点没有重复。

如果把前3个点有重复的8种dichotomies记为2α2\alpha(只看前3个点就是α\alpha种),后3种记为β\beta,那么就有2α+β=112\alpha+\beta=11。而其实,B(4,3)B(4,3)无非就是比B(3,)B(3,\cdot)多了一个点,假设现在把最后一个点去掉,那么前3个点只可能有α+β\alpha+\beta种dichotomies(因为第一组2α2\alpha种是前面3个点各重复两次,因此需要剔除一半),由于B(4,3)B(4,3)中任意3个点都不能被打散,因此前3个点也必须不能被打散,所以有α+βB(3,3)\alpha+\beta\le B(3,3)

另一方面,由于2α2\alpha组中的4个点中,任意3个点都不能被打散,而第4个点是在每一组前3个点固定的情况下取正/负,因此前3个点中的任意2个点都不能被打散(否则在加入第4个点后就会有3个点被打散)。因此,必须要保证αB(3,2)\alpha\le B(3,2)

由此可知,B(4,3)=2α+βB(3,3)+B(3,2)B(4,3)=2\alpha+\beta \le B(3,3)+B(3,2),以此类推,有B(N,k)B(N1,k)+B(N1,k1)B(N,k)\le B(N-1,k)+B(N-1,k-1),最终结果如图:

机器为什么能够学习?

用数学归纳法即可证明:B(N,k)i=0k1(Ni)B(N,k)\le \sum\limits_{i=0}^{k-1}\binom{N}{i},具体过程在此略过。事实上,可以证明得B(N,k)=i=0k1(Ni)B(N,k)=\sum\limits_{i=0}^{k-1}\binom{N}{i},具体的数学过程较复杂,课程中也略过了。该式说明,B(N,k)B(N,k)中成长最快的一项最多就是Nk1N^{k-1}的成长速度。

B(N,k)B(N,k)的定义,只要break point kk存在,那么mH(N)m_{\mathcal{H}}(N)的上限就是B(N,k)B(N,k),也因此,mH(N)m_{\mathcal{H}}(N)中成长最快的一项最多就是Nk1N^{k-1}的成长速度。

在有了mH(N)m_{\mathcal{H}}(N)后,想用它取代MM,还需要做一些处理,具体在此略过。最后可以得到的是Vapnik-Chervonenkis(VC) bound:
P[hH s.t. Ein(h)Eout(h)>ϵ]4mH(2N)exp(18ϵ2N) \mathbb{P}[\exists h \in \mathcal{H} \text{ s.t. }\vert E_{\text{in}}(h)-E_{\text{out}}(h)\vert>\epsilon]\le 4 m_{\mathcal{H}}(2N)\exp{(-\dfrac{1}{8}\epsilon^2 N)}

定义VC维(VC dimension)dvc(H)d_{\text{vc}}(\mathcal{H})为满足mH(N)=2Nm_{\mathcal{H}}(N)=2^N的最大的NN,也即H\mathcal{H}能打散的最大的点的个数,或最小的break point减1。当N2N\ge2dvc2d_{\text{vc}}\ge 2时,有mH(N)Ndvcm_{\mathcal{H}}(N)\le N^{d_{\text{vc}}}

对于dd维感知机模型来说,有dvc=d+1d_{\text{vc}}=d+1(证明略)。只要dvcd_{\text{vc}}是有限的,就可以完成泛化。dvc(H)d_{\text{vc}}(\mathcal{H})就相当于是H\mathcal{H}的powerfulness。

2.4 VC Bound与模型复杂度惩罚

对于g=A(D)Hg=\mathcal{A}(\mathcal{D})\in \mathcal{H},如果D\mathcal{D}在统计上足够大,有
P[Ein(g)Eout(g)>ϵ]4(2N)dvcexp(18ϵ2N) \mathbb{P}[\vert E_{\text{in}}(g)-E_{\text{out}}(g)\vert>\epsilon]\le 4 (2N)^{d_{\text{vc}}} \exp{(-\dfrac{1}{8}\epsilon^2 N)}

不等式左侧表示“坏的”的几率。若将不等式右边记为δ\delta,可将ϵ\epsilon反表示为ϵ=8Nln4(2N)dvcδ=Ω(N,H,δ)\epsilon=\sqrt{\dfrac{8}{N}\ln{\dfrac{4(2N)^{d_{\text{vc}}}}{\delta}}}=\Omega(N,\mathcal{H},\delta)Ω(N,H,δ)\Omega(N,\mathcal{H},\delta)就代表了对模型复杂度的惩罚。

可以看出,至少有1δ1-\delta的概率,能满足
Eout(g)Ein(g)+Ω(N,H,δ) E_{\text{out}}(g)\le E_{\text{in}}(g)+\Omega(N,\mathcal{H},\delta)

dvcd_{\text{vc}}和error的关系如下图:

机器为什么能够学习?

要找到最优的dvcd_{\text{vc}},才能使error最小。

VC Bound只是一个非常宽松的理论界限。比如设定ϵ=0.1\epsilon=0.1δ=0.1\delta=0.1dvc=3d_{\text{vc}}=3,那么根据前式,可得到N10,000dvcN\approx 10,000 d_{\text{vc}},但在实践中,往往只需要N10dvcN\approx 10 d_{\text{vc}}的数据量就够了。

2.5 有噪声时的VC Bound

如果标签被打错了,或是同一个人被打了不同标签,又或是x\mathbf{x}的信息不准确,都会引入噪声。在有噪声时,VC Bound依旧有效吗?

回到之前小球的例子,之前的小球,每个小球的颜色都是确定的,这种情况叫做是“deterministic”的,在有噪声的情况中,可以认为每个小球的颜色服从某种概率,即yP(yx)y\sim P(y|\mathbf{x}),这叫做是“probabilistic”的。可以证明如果(x,y)i.i.d.P(x,y)(\mathbf{x},y)\mathop{\sim}^{i.i.d.}P(\mathbf{x},y),那么VC理论依旧是有效的。

有噪声时,学习的目标是在常见的样本P(x)P(\mathbf{x})上,学习P(yx)P(y|\mathbf{x})。新的学习流程如下:
机器为什么能够学习?

VC理论依旧有效,pocket算法就是个很好的例子。

3 误差度量

在这里介绍一种逐点的误差度量(pointwise error measure),可以表达成err(g(x),f(x))\text{err}(g(\mathbf{x}), f(\mathbf{x}))g(x)g(\mathbf{x})可记为y~\tilde{y}f(x)f(\mathbf{x})可记为y。

有两种比较重要的pointwise error measure:

  • err(y~,y)=1[y~y]\text{err}(\tilde{y}, y)=\mathbb{1}_{[\tilde{y} \ne y]},这一般用在分类问题中;
  • err(y~,y)=(y~y)2\text{err}(\tilde{y}, y)=(\tilde{y} - y)^2,这一般用在回归问题中。

在有了误差度量后,学习流程如下:
机器为什么能够学习?

在分类问题中,错误可分为两类,如下图所示:

机器为什么能够学习?

根据这两类错误的重要性不同,可以对它们赋予不同的权重。因此,不同的应用可以有不同的err\text{err}。在算法中考虑误差度量时(记用在算法中的错误度量为err^\widehat{\text{err}}),最好的情况当然是直接令err^=err\widehat{\text{err}}=\text{err},但这可能会导致很难计算,比如会带来NP-hard问题等,一般来说,最好要设计一个对于A\mathcal{A}来说能比较容易进行最优化的err^\widehat{\text{err}},最好要有闭式解(closed-form solution)或有凸的目标函数。

A\mathcal{A}中加入误差度量的设计后,学习流程如下:

机器为什么能够学习?

对于两类错误权重不同的情况,可以用“virtual copying”的策略去学习。以pocket算法为例,假设false reject错误的权重为1,false accept错误的权重为1000,在计算时不必真的对每个样本点赋予权重,可以“虚拟地”将y=1y=-1的点复制1000份。在实践中,也不必真的复制,可以在随机选择样本点时,让算法随机选出y=1y=-1的点的概率增大1000倍即可。

机器为什么能够学习?