VC维这个概念很重要,关于机器学习中预防过拟合的一些操作都可以用这个概念解释。http://www.flickering.cn/machine_learning/2015/04/vc%E7%BB%B4%E7%9A%84%E6%9D%A5%E9%BE%99%E5%8E%BB%E8%84%89/中对VC维有非常详细的介绍,本文是对其的一些整理与理解。
了解VC维之前,需要知道一个Heoffding不等式:
,或者
大于等于和大于都可以这一点,是由Heoffding不等式推导中Morkov定理特性决定的。
其中,是独立同分布的随机变量,,,,且对于所有,满足。Heoffding不等式推导见:https://blog.csdn.net/qq_29508953/article/details/86666220
对于机器学习算法:H 是该机器学习算法的假设空间(参数空间); h属于H,h表示假设空间中的一种方案;f 表示理想方案;g属于H,g 表示我们在训练样本上利用某种算法求解的假设,这种算法的目标是使得g逼近理想方案f。
上图中
Eout(h):表示某个方案h在总体样本空间中损失的期望,称作expected loss。
Ein(h):表示某个方案h在N个训练样本上的平均损失,称作expirical loss。
(这里用的是0–1 loss,即对于某个样本判断正确记为0,判断错误记为1,所以Eout(h)和Ein(h)都介于0到1之间)
当假设h固定时,可以将Heoffding不等式写为:;由于Ein(h)分布在0-1之间,所以(b-a)^2=1。
对于参数空间H,当其中有M个假设时,那么可以推出下面不等式:
根据不等式(1)可得出:如果假设空间H的size M是有限的,当N足够大时,那么对假设空间中任意一个h,Eout(h)约等于Ein(h)。要使得到的模型可行,就只要令算法可以在假设空间H中,挑选出一个h,使得Ein(h)接近于0,那么Eout(h)也接近于0。Ein(h)接近于0相当于模型train loss接近0,而Eout(h)接近于0相当于模型预测loss接近于0,这样的模型意味着在训练集表现好,在真实环境里也表现好。
对于假设空间H的size M:如果M很小,会导致不容易找到一个g,使得Ein(g)约等于0(模型太简单拟合能力太弱);如果M太大,虽然相对容易在其中找到一个g,使得Ein(g)约等于0,但是不容易保证Ein和Eout比较接近。所以假设空间H的大小M很关键。
对于一个假设空间H,它的size M可能是无穷大的,但是在这些假设中有一些假设可以归为同一类,即对于固定的训练样本集这些假设产生了同样的结果。例如,我们要利用平面上的一条直线来划分一个点X1,假设空间H是所有的直线,它的size M是无限多的,但是实际上可以将这些直线分为两类,一类是把x1判断为正例的,另一类是把x1判断为负例的。如下图所示:
我们增加二维空间中点的个数,当空间中有两个点时,假设空间H中的直线可分为4类。
当空间中有三个点时,假设空间中的直线可分为7类。(为什么不是8类?因为要使x2在下面,x1,x3在上面只有曲线可以做到)
以此类推,可以发现一定的规律,当空间中有N个点时,假设空间中的直线可分为:N+1+N-1+N-2+...+1=0.5N^2+0.5N+1。同时也可发现,当假设空间H确定时,假设空间中假设种类数目与训练样本数N相关。
我们可以用表示在固定假设空间H以及N个训练样本下,假设空间中假设种类的数目。那么不等式中一些同种类的假设就可以记为同一个。
基于以上观点,不等式(1)可以演化为不等式(2):
Break Point与Shatter
Shatter:当假设空间H作用于N个input的样本集时,可以产生N个样本的每一种情况,就称:这N个inputs被H给shatter掉了;例如对于2分类,当时,则称N个样本被H给shatter了。
Break point:令假设空间H作用于样本空间中任何N 个inputs,令N从1出发慢慢变大,当增大到k时,任何k个inputs的,则我们说k是假设空间H的break point。且对于任何N >= k个inputs而言,H都没有办法再shatter他们了。
我们将的上界设为,表示当break point = k时,的最大值。
下面我们推导。
B(N,1)=1;当N < k,B(N,k)=2^N ;当N=k,B(N,k)<2^N-1
B(2,2)=3。因为break point=2,任意两个点都不能被shatter,肯定小于4,所以B(2,2)=3。
B(3,2)=4。当(x1,x2)再加入一个点扩展为(x1,x2,x3)时,(x1,x2)的三种情况中有部分被复制了(x3可以取两个值),有部分没有被复制(x3只能取一个值),设被复制的数量为a,未被复制的数量为b,则B(3,2) = 2a + b,且a+b≤ B(2,2)。由于(x1,x2,x3)不能shatter任意2个样本,所以(x1,x2)不能shatter任意1个:因为如果(x1,x2)shatter了任意1个,那么对于被复制的那一部分(x3可以取两个值0或1),加入x3后就可以产生4种情况,这样(x1,x2,x3)就能shatter其中2个样本了,所以a必须小于等于B(2,1)。所以B(3,2)=2a+b≤ B(2,2)+B(2,1)
B(4,3)= 2a + b <= B(3,3) + B(3,2)。
对于任意N>k,类推可以得到,B(N,k) ≤ B(N−1,k)+B(N−1,k−1)
最后利用数学归纳法,可以证明得到下面的bounding function(N>k):
https://www.cnblogs.com/ymingjingr/p/4290983.html中有具体证明,但是其中的公式6-11最后一个i应该改为i-1。
这个式子显然是多项式的,多项式的最高幂次项为:N^(k–1)。
带入公式(2)可得公式(3)
以上是为了简要理解推导思想,其实公式(2)和公式(3)是存在问题的。
在于公式(2)中
这一部分是不对的。
原因是Ein只作用于N个样本,所以假设空间H的假设种类为有限的,Ein种类也被限制在内;而Eout作用的是无穷的样本空间,对于假设空间H来说,当假设h发生一点点变化时,Eout的值就改变了,所以Eout有无限种。
公式(2)等号后面这一部分实际上应该是各种的并集,根据Ein和Eout种类个数分析,hi的数量应该也是无限的,而不是只有种。
为了解决这个问题,我们将Eout 替换为验证集(verification set) 的Ein’,来评估这个机器学习的算法是否可行。 推导过程比较复杂,具体见https://blog.csdn.net/qq_29508953/article/details/86776670。
下面才是正确版推导过程:
针对公式4,可以看出当N足够大,并且N逐渐增大时,指数式的下降会比多项式的增长速度更快,所以不等式右边可以趋向0。也就是说肯定存在一个假设h(h属于假设空间H)使得Ein(h)非常接近于Eout(h)。
VC维概念
一个假设空间H的VC 维指的是这个H最多能够shatter掉的点的数量,记为。
明显
VC维的大小只与模型和假设空间有关。
公式4可以进一步写为:
根据公式5可以总结:
要想让机器学到东西,并且学得好,有2个条件:
- H的VC维是有限的,这样不等式5右边才能有边界,(VC维的大小只与模型和假设空间有关,所以要挑一个合适的模型设定合适的参数空间);N足够大(对于特定的d_vc而言),这样才能保证不等式的边界不会太大,(数据集优秀)。这两个条件可以使得Ein接近Eout。
- 算法A有办法在H中顺利的挑选一个使得Ein最小的g,(good A)。这个条件确保Ein在给定H下尽可能小。
同时,从上式可以看出拟合能力和泛化能力是互相制约的。
- 当VC维较大时,说明H可以shatter较多数据,说明模型拟合能力较好;
- 但是VC维过大又会导致不等式5右侧边界过大,导致Ein和Eout差距过大,造成过拟合现象。
深度学习与VC维
(这部分比较简单,直接摘录了)
对于神经网络,其VC维的公式为:
其中V表示神经网络中神经元的个数,D表示weight的个数。(注意:此式是一个较粗略的估计,深度神经网络目前没有明确的vc bound)
举例来说,一个普通的三层全连接神经网络:input layer是1000维,hidden layer有1000个nodes,output layer为1个node,则它的VC维大约为O(1000*1000*1000)。
可以看到,神经网络的VC维相对较高,因而它的表达能力非常强(可以shatter很多数据),可以用来处理任何复杂的分类问题。要充分训练该神经网络,所需样本量为10倍的VC维。如此大的训练数据量,是不可能达到的。所以在20世纪,复杂神经网络模型在out of sample的表现不是很好,容易overfit。
但现在为什么深度学习的表现越来越好。原因是多方面的,主要体现在:
- 通过修改神经网络模型的结构,以及提出新的regularization方法,使得神经网络模型的VC维相对减小了。例如卷积神经网络,通过修改模型结构(局部感受野和权值共享),减少了参数个数,降低了VC维。2012年的AlexNet,8层网络,参数个数只有60M;而2014年的GoogLeNet,22层网络,参数个数只有7M。再例如dropout,drop connect,denosing等regularization方法的提出,也一定程度上增加了神经网络的泛化能力。
- 训练数据变多了。随着互联网的越来越普及,相比于以前,训练数据的获取容易程度以及量和质都大大提升了。训练数据越多,Ein越容易接近于Eout。而且目前训练神经网络,还会用到很多data augmentation方法,例如在图像上,剪裁,平移,旋转,调亮度,调饱和度,调对比度等都使用上了。
- 除此外,pre-training方法的提出,GPU的利用,都促进了深度学习。
但即便这样,深度学习的VC维和VC Bound依旧很大,其泛化控制方法依然没有强理论支撑。但是实践又一次次证明,深度学习是好用的。所以VC维对深度学习的指导意义,目前不好表述,有一种思想建议,深度学习应该抛弃对VC维之类概念的迷信,尝试从其他方面来解释其可学习型,例如使用泛函空间(如Banach Space)中的概率论。