解讀機器學習基礎概念:VC維的前因後果

原做者:vincentyao  原文連接: http://dataunion.org/14581.htmlhtml

目錄:node

  • 說說歷史
  • Hoeffding不等式
  • Connection to Learning
  • 學習可行的兩個核心條件
  • Effective Number of Hypotheses
  • Growth Function
  • Break Point與Shatter
  • VC Bound
  • VC dimension
  • 深度學習與VC維
  • 小結
  • 參考文獻

VC維在機器學習領域是一個很基礎的概念,它給諸多機器學習方法的可學習性提供了堅實的理論基礎,但有時候,特別是對咱們工程師而言,SVM,LR,深度學習等可能都已經用到線上了,但卻不理解VC維。算法

這裏,在臺灣大學機器學習基石課程的基礎上,咱們簡單聊聊「VC維的前因後果」。咱們將解決如下問題:爲何某機器學習方法是可學習的?爲何會有過擬合?拿什麼來衡量機器學習模型的複雜度?深度學習與VC維的關係?網絡

說說歷史

在講VC維以前,咱們不妨來講說VC維的歷史。而提及VC維的歷史,又不得不提起神經網絡,一方面是由於神經網絡與VC維的發明過程是交織在一塊兒的,另外一方面是因爲神經網絡乏善可陳的泛化控制方法,深度學習在理論基礎上一直被懷疑,甚至神經網絡和VC維的表明SVM還一塊兒爭風吃醋過好多年。app

1943年,模擬神經網絡由麥卡洛可(McCulloch)和皮茨(Pitts)提出,他們分析了理想化的人工神經元網絡,而且指出了它們進行簡單邏輯運算的機制。dom

1957年,康奈爾大學的實驗心理學家弗蘭克·羅森布拉特(Rosenblatt)在一臺IBM–704計算機上模擬實現了一種他發明的叫做「感知機」(Perceptron)的神經網絡模型。神經網絡與支持向量機都源自於感知機(Perceptron)。機器學習

1962年,羅森布拉特著做:《神經動力學原理:感知機和大腦機制的理論》(Principles of Neurodynamics: Perceptrons and the Theory of Brain Mechanisms)。ide

1969年,明斯基和麻省理工學院的另外一位教授佩普特合做著做:《感知機:計算幾何學》(Perceptrons: An Introduction to Computational Geometry)。在書中,明斯基和佩普特證實單層神經網絡不能解決XOR(異或)問題。函數

1971年,V. Vapnik and A. Chervonenkis在論文「On the uniform convergence of relative frequencies of events to their probabilities」中提出VC維的概念。學習

1974年,V. Vapnik提出告終構風險最小化原則。

1974年,沃波斯(Werbos)的博士論文證實了在神經網絡多加一層,而且利用「後向傳播」(Back-propagation)學習方法,能夠解決XOR問題。那時正是神經網絡研究的低谷,文章不合時宜。

1982年,在加州理工擔任生物物理教授的霍普菲爾德,提出了一種新的神經網絡,能夠解決一大類模式識別問題,還能夠給出一類組合優化問題的近似解。這種神經網絡模型後被稱爲霍普菲爾德網絡。

1986年,Rummelhart與McClelland發明了神經網絡的學習算法Back Propagation。

1993年,Corinna Cortes和Vapnik等人提出了支持向量機(support vector machine)。神經網絡是多層的非線性模型,支持向量機利用核技巧把非線性問題轉換成線性問題。

1992~2005年,SVM與Neural network之爭,但被互聯網風潮掩蓋住了。

2006年,Hinton提出神經網絡的Deep Learning算法。Deep Learning假設神經網絡是多層的,首先用Restricted Boltzmann Machine(非監督學習)學習網絡的結構,而後再經過Back Propagation(監督學習)學習網絡的權值。

如今,deep learning的應用愈來愈普遍,甚至已經有超越SVM的趨勢。一方面以Hinton,Lecun爲首的深度學習派堅信其有效實用性,另外一方面Vapnik等統計機器學習理論專家又堅持着理論陣地,懷疑deep learning的泛化界。

Hoeffding不等式

Hoeffding不等式是關於一組隨機變量均值的機率不等式。 若是X1,X2,,Xn爲一組獨立同分布的參數爲p的伯努利分佈隨機變量,n爲隨機變量的個數。定義這組隨機變量的均值爲:

average_x_1

對於任意δ>0, Hoeffding不等式能夠表示爲

hoeffding_11

更多請參考:Hoeffding不等式集中不等式

case示例

在統計推斷中,咱們能夠利用樣本的統計量(statistic)來推斷整體的參數(parameter),譬如使用樣本均值來估計整體指望。以下圖所示,咱們從罐子裏抽球,但願估計罐子裏紅球和綠球的比例。

bin_sample

直覺上,若是咱們有更多的樣本(抽出更多的球),則樣本指望ν應該愈來愈接近整體指望μ。事實上,這裏能夠用hoeffding不等式表示以下:

bin_sample_hoeffding

從hoeffding不等式能夠看出,當n逐漸變大時,不等式的UpperBound愈來愈接近0,因此樣本指望愈來愈接近整體指望。

Connection to Learning

接下來,咱們但願能夠將機器學習關聯到上一節討論的hoeffding不等式。

一個基本的機器學習過程以下圖所示。其中的概念定義爲: f 表示理想的方案(能夠是一個函數,也能夠是一個分佈),H 是該機器學習方法的假設空間,g 表示咱們求解的用來預測的假設,g屬於H。

機器學習的過程就是:經過算法A,在假設空間H中,根據樣本集D,選擇最好的假設做爲g。選擇標準是 g 近似於 f。

setup_of_the_learning_problem_add_components

perceptron來舉例。

感知機(perceptron)是一個線性分類器(linear classifiers)。 線性分類器的幾何表示:直線、平面、超平面。

perceptron的假設空間,用公式描述,以下所示:

perceptron_formula

感知器的優化目標以下式所示,w_g就是咱們要求的最好的假設。

perceptron_optim

設定兩個變量,以下圖所示,圖中 f(x)表示理想目標函數,h(x)是咱們預估獲得的某一個目標函數,h(x)是假設空間H中的一個假設。

Eout(h),能夠理解爲在理想狀況下(已知f),整體(out-of-sample)的損失(這裏是0–1 loss)的指望,稱做expected loss。

Ein(h),能夠理解爲在訓練樣本上(in-of-sample),損失的指望,稱做expirical loss。

learning_hoeffding

當訓練樣本量N足夠大,且樣本是獨立同分布的,類比於上面「抽球」的例子,能夠經過樣本集上的expirical loss Ein(h) 推測整體的expected loss Eout(h)。基於hoeffding不等式,咱們獲得下面式子:

learning_hoeffding2

根據上面不等式,咱們能夠推斷,當N足夠大時,expected loss和expirical loss將很是接近。

注意在上面推導中,咱們是針對某一個特定的解h(x)。在咱們的假設空間H中,每每有不少個假設函數(甚至於無窮多個),這裏咱們先假定H中有M個假設函數。

那麼對於整個假設空間,也就是這M個假設函數,能夠推導出下面不等式:

hoeffding_12

上面式子的含義是:在假設空間H中,設定一個較小的ϵ值,任意一個假設h,它的Ein(h)與Eout(h)的差由該值2Mexp(2ϵ2N)所約束住。注意這個bound值與 「樣本數N和假設數M」 密切相關。

學習可行的兩個核心條件

在往下繼續推導前,先看一下什麼狀況下Learning是可行的

  1. 若是假設空間H的size M是有限的,當N足夠大時,那麼對假設空間中任意一個g,Eout(g)約等於Ein(g);
  2. 利用算法A從假設空間H中,挑選出一個g,使得Ein(g)接近於0,那麼probably approximately correct而言,Eout(g)也接近爲0;

two_central_questions

上面這兩個核心條件,也正好對應着test和train這兩個過程。train過程但願損失指望(即Ein(g) )儘量小;test過程但願在真實環境中的損失指望也儘量小,即Ein(g)接近於Eout(g)。

但每每咱們更多在關心,如何基於模型的假設空間,利用最優化算法,找到Ein最小的解g。但容易忽視test這個過程,若是讓學習可行,不只僅是要在訓練集表現好,在真實環境裏也要表現好。

從上述推導出來的不等式,咱們看到假設數M 在這兩個核心條件中有着重要做用。

trade_off_on_M

M過小,當N足夠大時,Ein和Eout比較接近,但若是候選假設集過小,不容易在其中找到一個g,使得Ein(g)約等於0,第二項不能知足。而若是M太大,這時候選集多了,相對容易在其中找到一個g,使得Ein(g)約等於0,但第一項就不能知足了。因此假設空間H的大小M很關鍵。

對於一個假設空間,M多是無窮大的。要可以繼續推導下去,那麼有一個直觀的思路,可否找到一個有限的因子m_H來替代不等式bound中的M。

finite_quantity

雖然說假設空間很大,上述推導裏,咱們用到了P(h1 or h2 … hm) <= P(h1) + P(h2) + … + P(hm)。但事實上,多個h之間並非徹底獨立的,他們是有很大的重疊的,也就是在M個假設中,可能有一些假設能夠歸爲同一類。

下面咱們以二維假設空間爲例,來解釋一下該空間下各假設在肯定的訓練樣本上的重疊性。

舉例來講,若是咱們的算法要在平面上(二維空間)挑選一條直線方程做爲g,用來劃分一個點x1。假設空間H是全部的直線,它的size M是無限多的。可是實際上能夠將這些直線分爲兩類,一類是把x1判斷爲正例的,另外一類是把x1判斷爲負例的。以下圖所示:

1point2lines

那若是在平面上有兩個數據點x1,x2,這樣的話,假設空間H中的無數條直線能夠分爲4類。那依次類推,3個數據點狀況下,H中最多有8類直線。4個數據點,H中最多有14類直線(注意:爲何不是16類直線)。

4points14lines

從上面在二維假設空間中的分析,咱們能夠推測到一個結論,假設空間size M是很大,但在樣本集D上,有效的假設函數數目是有限的。接下來咱們將繼續推導這個有效的假設函數值。

Effective Number of Hypotheses

對於這個有效的假設函數值,咱們嘗試用一個數學定義來講明:

從H中任意選擇一個方程h,讓這個h對樣本集合D進行二元分類,輸出一個結果向量。例如在平面裏用一條直線對2個點進行二元分類,輸出可能爲{1,–1},{–1,1},{1,1},{–1,–1},這樣每一個輸出向量咱們稱爲一個dichotomy。

下面是hypotheses與dichotomies的概念對比:

dichotomies

注意到,若是對平面上的4個點來分類,根據前面分析,輸出的結果向量只有14種可能,即有14個dichotomies。

若是有N個樣本數據,那麼有效的假設個數定義爲: effective(N) = H做用於樣本集D「最多」能產生多少不一樣的dichotomy。

因此有一個直觀思路,可否用effective(N)來替換hoeffding不等式中的M。接下來咱們來分析下effective(N)。

finite_effective_n

Growth Function

H做用於D「最多」能產生多少種不一樣的dichotomies?這個數量與假設空間H有關,跟數據量N也有關。將H做用於D「最多」能產生的dichotomies數量(即effective(N) )表示爲數學符號:max_H(x1,x2,…,xN)

這個式子又稱爲「成長函數」(growth function)。在H肯定的狀況下,growth function是一個與N相關的函數。

growth_function

下圖舉4個例子,分別計算其growth function:

growth_function_4case

對於第一個例子,positive ray,至關因而正向的射線。該假設空間,做用於1個樣本點,能夠產生2種dichotomies:(–1),(+1)。做用於2個樣本點,能夠產生3種dichotomies:(–1,+1),(–1,–1),(+1,+1)。做用於3個樣本點,能夠產生4種dichotomies。依次類推,能夠推導出其成長函數 m_H(N)=N+1;

求解出m_H(N)後,那是否是能夠考慮用m_H(N)替換M? 以下所示:

growth_function_replace_m

Break Point與Shatter

在進一步推導前,再看兩個概念:shatter,break point。

Shatter的概念:當假設空間H做用於N個input的樣本集時,產生的dichotomies數量等於這N個點總的組合數2N是,就稱:這N個inputs被H給shatter掉了。

要注意到 shatter 的原意是「打碎」,在此指「N個點的全部(碎片般的)可能情形都被H產生了」。因此mH(N)=2N的情形是即爲「shatter」。

break_point

對於給定的成長函數m_H(N),從N=1出發,N慢慢變大,當增大到k時,出現mH(N)<2k的情形,則咱們說k是該成長函數的break point。對於任何N > k個inputs而言,H都沒有辦法再shatter他們了。

舉例來講,對於上面的positive ray的例子,由於m_H(N)=N+1,當N=2時,m_H(2)<22, 因此它的break point就是2。

VC Bound

說完break point的概念後,再回到成長函數。

咱們將成長函數的上界,設爲B(N,k),意爲:maximum possible m_H(N) when break point = k。

那麼咱們作一些簡單的推導:

  • B(2,2)=3。由於break point=2,任意兩個點都不能被shatter,m_H(2)確定小於22,因此B(2,2)=3。
  • B(3,2)=4。由於任意兩個點都不能被shatter,那麼3個點產生的dichotomies不能超過4,因此B(3,2)=4。
  • B(N,1)=1。
  • B(N,k)=2N for N < k;B(N,k)=2N–1 for N=k;
  • B(4,3)=?去掉其中的一個數據點x4後,考慮到break point=3,餘下數據(x1,x2,x3)的dichotomies數目不能超過B(3,3)。當擴展爲(x1,x2,x3,x4)時,(x1,x2,x3)上的dichotomies只有部分被重複複製了,設被複制的dichotomies數量爲a,未被複制的數量爲b。因而有B(3,3) = a+b; B(4,3) = 2a + b。由於a被複制了,表示x4有兩個取值,那麼(x1,x2,x3)上的a應該小於等於B(3,2)。因此推導出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):

m_h_n_1

這個式子顯然是多項式的,多項式的最高冪次項爲:N^(k–1)。

因此咱們獲得結論:若是break point存在(有限的正整數),生長函數m(N) 是多項式的。

再重複一遍,H做用於數據量爲N的樣本集D,方程的數量看上去是無窮的,但真正有效(effective)的方程的數量倒是有限的,這個數量爲m_H(N)。H中每個h做用於D都能算出一個Ein來,一共有m_H(N)個不一樣的Ein。

OK,到目前爲止,關於m_H(N)的推導結束。回到growth function小節提出的問題,可否用m_H(N)直接替換M?

既然獲得了m(N)的多項式上界,咱們但願對以前的不等式中M 進行替換,用m_H(N)來替換M。這樣替換後,當break point存在時,N足夠大時,該上界是有限的。

replace_vc_bound

然而直接替換是存在問題的,主要問題是:Ein的可能取值是有限個的,但Eout的可能取值是無限的。能夠經過將Eout 替換爲驗證集(verification set) 的Ein’ 來解決這個問題。 下面是推導過程:

vc_bound_step1vc_bound_step2vc_bound_step3

最後咱們獲得下面的VC bound:

vc_bound1

關於這個公式的數學推導,咱們能夠暫且不去深究。咱們先看一下這個式子的意義,若是假設空間存在有限的break point,那麼m_H(2N)會被最高冪次爲k–1的多項式上界給約束住。隨着N的逐漸增大,指數式的降低會比多項式的增加更快,因此此時VC Bound是有限的。更深的意義在於,N足夠大時,對H中的任意一個假設h,Ein(h)都將接近於Eout(h),這表示學習可行的第一個條件是有可能成立的。

VC dimension

說了這麼多,VC維終於露出廬山真面目了。此概念由Vladimir Vapnik與Alexey Chervonenkis提出。

一個假設空間H的VC dimension,是這個H最多可以shatter掉的點的數量,記爲dvc(H)。若是無論多少個點H都能shatter它們,則dvc(H)=無窮大。還能夠理解爲:vc-dim就是argmax_n {growth function=power(2,n)}。

根據定義,能夠獲得一個明顯的結論:

k = d_vc(H) + 1

根據前面的推導,咱們知道VC維的大小:與學習算法A無關,與輸入變量X的分佈也無關,與咱們求解的目標函數f 無關。它只與模型和假設空間有關。

咱們已經分析了,對於2維的perceptron,它不能shatter 4個樣本點,因此它的VC維是3。此時,咱們能夠分析下2維的perceptron,若是樣本集是線性可分的,perceptron learning algorithm能夠在假設空間裏找到一條直線,使Ein(g)=0;另外因爲其VC維=3,當N足夠大的時候,能夠推斷出:Eout(g)約等於Ein(g)。這樣學習可行的兩個條件都知足了,也就證實了2維感知器是可學習的。

pla_revised

總結回顧一下,要想讓機器學到東西,而且學得好,有2個條件:

  • H的d_vc是有限的,這樣VC bound才存在。(good H);N足夠大(對於特定的d_vc而言),這樣才能保證vc bound不等式的bound不會太大。(good D)
  • 算法A有辦法在H中順利的挑選一個使得Ein最小的g。(good A)

回到最開始提出的學習可行的兩個核心條件,嘗試用VC維來解釋:

m_and_d_vc

從上圖能夠看出,當VC維很小時,條件1容易知足,但由於假設空間較小,可能不容易找到合適的g 使得Ein(g)約等於0。當VC維很大時,條件2容易知足,但條件1不容易知足,由於VC bound很大。

VC維反映了假設空間H 的強大程度(powerfulness),VC 維越大,H也越強,由於它能夠打散(shatter)更多的點。

定義模型自由度是,模型當中能夠自由變更的參數的個數,即咱們的機器須要經過學習來決定模型參數的個數。

degree_of_freedom

一個實踐規律:VC 維與假設參數w 的自由變量數目大約相等。dVC = #free parameters。

vc_practical_rule

咱們將原不等式作一個改寫,以下圖所示:

vc_power1

上面式子中的第3項表示模型複雜度。模型越複雜,VC維大,Eout 可能距離Ein 越遠。以下圖所示,隨着d_vc的上升,E_in不斷下降,而模型複雜度不斷上升。

它們的上升與降低的速度在每一個階段都是不一樣的,所以咱們可以尋找一個兩者兼顧的,比較合適的d_vc,用來決定應該使用多複雜的模型。

vc_power2

模型較複雜時(d_vc 較大),須要更多的訓練數據。 理論上,數據規模N 約等於 10000*d_vc(稱爲採樣複雜性,sample complexity);然而,實際經驗是,只須要 N = 10*d_vc。 形成理論值與實際值之差如此之大的最大緣由是,VC Bound 過於寬鬆了,咱們獲得的是一個比實際大得多的上界。

n_practical_rule

注意在前述討論中,理想的目標函數爲f(x),error measure用的是「0–1 loss」。若是在unknown target上引入噪聲(+noise),或者用不一樣的error measure方法,VC theory還有效嗎?這裏只給出結論,VC theory對於絕大部分假設空間(or 加入噪聲)和error度量方法,都是有效的。

除此外,咱們爲了不overfit,通常都會加正則項。那加了正則項後,新的假設空間會獲得一些限制,此時新假設空間的VC維將變小,也就是一樣訓練數據條件下,Ein更有可能等於Eout,因此泛化能力更強。這裏從VC維的角度解釋了正則項的做用。

深度學習與VC維

對於神經網絡,其VC維的公式爲:

dVC = O(VD),其中V表示神經網絡中神經元的個數,D表示weight的個數,也就是神經元之間鏈接的數目。(注意:此式是一個較粗略的估計,深度神經網絡目前沒有明確的vc bound)

neural_network_vc_dimension

舉例來講,一個普通的三層全鏈接神經網絡:input layer是1000維,hidden layer有1000個nodes,output layer爲1個node,則它的VC維大約爲O(1000*1000*1000)。

能夠看到,神經網絡的VC維相對較高,於是它的表達能力很是強,能夠用來處理任何複雜的分類問題。根據上一節的結論,要充分訓練該神經網絡,所需樣本量爲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)中的機率論。

更多細節請參考下面連接:

小結

上面仔細分析了VC維的前因後果,講述了VC維在機器學習理論中的指導意義。考慮到VC維在機器學習領域雖是基礎,卻也是大坑,因此不免有理解不深或不當之處,敬請諒解。若但願得到更深理解,請參考下面的參考文獻。

參考文獻

 
 
 

本文連接:VC維的前因後果
文章出處:火光搖曳

相關文章
相關標籤/搜索