1. 程式人生 > >【AI數學】VC維的定義

【AI數學】VC維的定義

VC維是機器學習中經常可見的概念,要理解VC維,首先要知道VC維是用來幹嘛的。

用途 度量模型的學習能力的指標,從一般意義上來說,VC維越大,其學習能力越強。比如,常見的神經網路模型,一個更深引數量越多的模型的VC維一定大於更輕量的模型。

定義

假定我們有一個數據集,包含N個點。這N個點可以用2N2^N種方法標記為正例和負例。因此,N個數據點可以定義2N2^N種不同的學習問題。如果對於這些問題中的任何一個,我們都能夠找到一個假設h∈HH將正例和負例分開,那麼我們就稱HH雜湊(shatter)N個點。也就是說,可以用N個點定義的任何的學習問題都能夠用一個從中抽取的假設無誤差地學習。可以被雜湊的點的最大數量稱為H

HVCVC維(Vapnik- Chervonenkis dimension),記為VCVC(HH),它度量假設類HH的學習能力(capacity)。

引用自 http://book.51cto.com/art/200906/130574.htm 解釋一下這個定義:如果我們要對N個物體進行二分類,這N個物體分別有自己的屬性集,每個物體的類別可以是正例也可以是負例。我們用一個適合的模型對這N個物體進行分類,如果每個物體的label可以隨便設定,那麼一共有2N2^N種設定方法,咱的模型是否能cover所有的設定呢? 咱可以看個例子: 在這裡插入圖片描述 圖片引自:https://blog.csdn.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。但模型龐大,導致計算很費時間,在實時性和功耗方面都達不到較理想的程度。現在一方面的研究也在偏向神經網路壓縮,輕量級神經網路等等。