【AI数学】VC维的定义

时间:2024-05-18 22:19:41

VC维是机器学习中经常可见的概念,要理解VC维,首先要知道VC维是用来干嘛的。


用途
度量模型的学习能力的指标,从一般意义上来说,VC维越大,其学习能力越强。比如,常见的神经网络模型,一个更深参数量越多的模型的VC维一定大于更轻量的模型。


定义

假定我们有一个数据集,包含N个点。这N个点可以用2N2^N种方法标记为正例和负例。因此,N个数据点可以定义2N2^N种不同的学习问题。如果对于这些问题中的任何一个,我们都能够找到一个假设h∈HH将正例和负例分开,那么我们就称HH散列(shatter)N个点。也就是说,可以用N个点定义的任何的学习问题都能够用一个从中抽取的假设无误差地学习。可以被散列的点的最大数量称为HHVCVC维(Vapnik- Chervonenkis dimension),记为VCVC(HH),它度量假设类HH的学习能力(capacity)。

引用自 http://book.51cto.com/art/200906/130574.htm
解释一下这个定义:如果我们要对N个物体进行二分类,这N个物体分别有自己的属性集,每个物体的类别可以是正例也可以是负例。我们用一个适合的模型对这N个物体进行分类,如果每个物体的label可以随便设定,那么一共有2N2^N种设定方法,咱的模型是否能cover所有的设定呢?
咱可以看个例子:
【AI数学】VC维的定义
图片引自:https://blog.****.net/keith0812/article/details/8901113

用一根直线(假设这是我们的模型),对三个物体(即三个点)进行二分类。三个物体呈散列状,不考虑三点一线的情况。那么一共有232^3=8种情况,我们的模型能对8种情况下的3个物体都能进行精准分类。可见,我们的模型至少可以cover掉3个物体的二分类的各种情况。对4个物体的情况下,是否还能分类呢,随便举个反例就可以了,四个点分别呈列在矩形的4个顶点,对角线的2个点分别为1类,我们的直线还能分类它们吗,这个自行想象。(答案是不能)

从上面的例子,我们可以得出二维线性分类器只能cover到3个物体,则这个模型的VC维等于3。我们可以推广到支持向量机(SVM),这个算法的基本思想就是用一个超平面来分割当前维度线性不可分的对象。这一做法,就是扩大线性分类器的VC维,从而获得更强的分类能力。

同样,我们可以类比到神经网络,对于神经网络这种强VC维的boss来说,其VC维的近似计算有公式可寻:(引自《VC维的来龙去脉》)
dVC=O(VD)d_{VC}=O(VD)
上述公式可以做神经网络VC维的估算。V表示神经网络中神经元的个数,D表示weight的个数,也就是神经元之间连接的数目。举例来说,一个普通的三层全连接神经网络:input layer是1000维,hidden layer有1000个nodes,output layer为1个node,则它的VC维大约为OO(1000x1000x1000)。


总结
VC维是一个指标,衡量模型容量(capacity)的指标。模型容量并不是越大越好,通常来讲,模型容量讲究够用即可。当数据量不足的情况下,丢一个很大的模型,往往效果会很差,容易形成过拟合。事实上,目前很多基于深度学习的算法都面临一个VC维冗余的问题,虽然在足够数据量的支撑下,有一个很好的performance。但模型庞大,导致计算很费时间,在实时性和功耗方面都达不到较理想的程度。现在一方面的研究也在偏向神经网络压缩,轻量级神经网络等等。