學界|北京大學王立威教授:機器學習理論的回顧與展望

(一)

2017-03-05 奕欣人工智能深度內參

本文由奕欣,夏睿聯合編輯。

AI科技評論按:本文根據王立威教授在中國人工智能學會AIDL第二期人工智能前沿講習班*機器學習前沿所作報告《機器學習理論:回顧與展望》編輯整理而來,在未改變原意的基礎上略作了刪減。

王立威

王立威,在北京大學教授主要研究領域爲機器學習。在包括COLT, NIPS,JMLR, PAMI等權威會議期刊發表論文60餘篇。2010年入選 AI’s 10 to Watch,是首位獲得該獎項的亞洲學者。2012年獲得首屆國家自然科學基金優秀青年基金,新世紀優秀人才。任 NIPS 等權威會議 Area Chair,和多家學術期刊編委。以下爲王立威教授所做的現場演講的第一部分,主要覆蓋了機器學習理論的內容,以及對VC理論的一些介紹。

各位老師,同學們,下午好!非常高興今天能有機會和大家進行分享,也特別感謝周志華老師對機器學習理論做了一個非常精闢的簡介。今天我報告的題目是「機器學習的回顧和展望」。

剛纔周老師也提到,機器學習理論的目的是建立一個比較綱領性的認識。大家拿到的 PPT 裏面有很多數學細節,既然大家已經有打印的版本,所以我就不花過多的時間講數學細節,我把主要的時間花在介紹機器學習技術性的內容、最後的一些結論可以對你產生什麼啓發,也就是一些思想上的東西。

  • 那麼言歸正傳。

大家都知道,在過去幾年當中,機器學習最成功的、影響最大的理論毫無疑問是深度學習。深度學習到目前爲止,在很多地方發揮了作用,也取得了很多的成功。那麼大家不禁要問一個問題了:深度學習現在很成功了,而且大家可能都知道,深度學習到目前爲止沒有什麼機器學習的理論,或者說幾乎就沒有理論,在這個時點上,我們爲什麼還要思考理論?所以,我今天想談一下我個人的觀點。

其實機器學習這個領域很有趣,如果大家回顧一下它過去大概 30 多年的發展歷史,大家會發現,機器學習裏面非常重要的一些算法,除了深度學習以外,其他的一些重要算法,比如說大家耳熟能詳的 SVM、boosting,還有 Random Forest 等,幾乎全是由做學習理論的人提出來的,而不是由做純應用的人提出來的。到目前爲止,只有 Deep Learning(深度學習)是一個例外,而像報告裏會提到的 SVM,是由前蘇聯的概率學家、機器學習理論的先驅 V.Vapnik 提出來的;而 Random Forest 也得益於統計學家 Leo Breiman 的貢獻。如果我們把這個時間點拉長一點,大家可以看到,理論的學習其實對算法的設計研究是有着極其重要的影響的。

我們再來看一看深度學習。現在有很多關於深度學習的觀點,比如我的一些同事朋友跟我講,國外一些做深度學習應用方面特別前沿的人,說(理論)在深度學習的時代毫無用處,因爲你們理論通常是一些不等式,比如算法設計出來之後,理論會告訴你這個算法的準確度或者說錯誤率的上界,但通常這個得出來的數值奇大無比,他們還做了一個比較形象的比喻,說就好比證明一隻雞的體重一定要小於一噸一樣,這種說法其實是蠻多的。

我想通過今天和大家的分享,談一談我的觀點,就是說機器學習理論究竟是做什麼來用的,它是不是只是爲了證明這個界,爲了說明算法在實際應用的錯誤率能小於多少,還是說它在傳達一些更高層的信息。我個人的觀點是,機器學習理論是後者,絕對不是爲了證明一個算法的邊界如何;機器學習理論的目的,在於提供對機器學習的問題的洞察和理解。

第二點,很多人會有這樣的觀點,我們現在是一個大數據時代,像 ImageNet 這樣的數據庫資源有上千萬。在過去,做機器學習理論的研究者可能處理的都是小數據集,也許理論還有一定的價值,但是今天我們做的都是動輒上千萬的數據,是不是我們根本就完全不需要機器學習理論呢?

我給大家提一個問題,一千萬個數據就真的是大數據嗎?我個人認爲是小的數據,而且是非常非常小的。爲什麼呢?今天上千萬的數據幾乎都出現在視覺這個領域,人或者其他一些高等動物的視覺,經過多長的時間才形成這樣的一個神經網絡,能夠以極快的速度去視覺感知、認知。這個長度是以億年爲單位,在億年這樣的進化過程當中,每一個時點都是生物以整體的角度在學習和進化,如果你從這個進化的角度來考慮,我們把進化看作一個學習的過程,這不是我提出來的理論,這是圖靈獎得主 Leslie Valiant 提出來的。所以大家這麼考慮,如果整個的生物羣體經歷上億年的進化過程,接觸到的數據是什麼量級,我認爲比千千萬不知道要增加多少個零,所以我們今天的數據是非常小的數據。

那麼,我們今天的神經網絡和生物的進化以億萬年的進化得到的數據有多大的不同?我給大家舉一個例子。大家知道人腦或很多高等動物的大腦也是由神經元組成的,比如說人腦有着 10 的 11 次方的神經元,大概 10 的 14 到 15 次方的連接。我個人認爲動物的神經網絡和機器神經網絡的最大不同在哪兒呢?

一個是在於結構,第二在於速度,第三在於運行機制。結構我剛剛講了一點,在於容量不同,下面我談一點很顯著的區別就是速度。人腦中神經元的種類非常多,現在已知的就有上千種,當然我們可以考慮其中非常主流的一些神經元,對於這樣的神經元,大家知道神經元和神經元之間信息的傳遞是靠一些生物電信號,實際上是化學物質的傳遞。在人或動物的大腦中,信息從一個神經元傳遞到相鄰的神經元所需要的時間,大家知道是一個什麼量級嗎?是幾十毫秒的量級。幾十毫秒什麼概念?比如說你突然看到一個場景、一幅圖像,你馬上就有一個反應,這個反應的時間肯定是在 1 秒鐘之內。如果你的整個反應是在 1 秒鐘之內,這意味着信息在你大腦的神經網絡中傳遞的深度至多是多少,如果你這個大腦中從一個神經元到達下一層神經元傳遞的速度是幾十毫秒的話,這意味着你大腦處理視覺信息所用的神經網絡的深度至多就是幾十層,如果你的大腦反應過來,可能已經過去將近 10 秒鐘了。所以大家要意識到,我們今天所訓練的最最先進的神經網絡,和人腦中的、動物大腦中的神經網絡依然是截然不同的。兩者不一樣的地方其實遠遠大於他們相似的地方。

再舉一個比較典型的例子,我們今天的神經網絡,實際上都是用計算機模擬出來的,並不是一個真正的硬件。我們在計算機上進行模擬,認爲層與層之間的信息的傳遞完全是同步的,必須上一層的信息全部同時傳遞到下一層的神經元才能夠進行處理。在人腦中沒有這樣的同步控制信號,所以人腦中的神經元完全是高度分佈式的一種計算,所以這就是一個重大的不同。所以今天我們深度學習所用的神經網絡,即使從生物、從仿生的角度來講,其實跟真正的生物依然差別很大。所以要想深度理解,必須有一個很基礎的理論。當然我們也要面對現實,機器學習這個領域過去發展了幾十年,所建立起來的機器學習的過去經典的理論,比如 SVM 等等這一系列的方法,它對於今天的深度學習確實沒有非常好的解釋或者說認知,但是這也正是一個很好的機會、一個挑戰:我們應該如何建立一個新的理論去認知深度學習?根本目的是,我們能不能夠將來設計出更加有效的方法?給大家舉一個例子,人腦以這麼慢的信息傳遞速度,其實在很多很多的問題上要比今天的深度學習訓練出來的網絡效果要好得多,如果我們要能夠基於這些理論設計出類似於我剛纔講的人腦的一些方法,豈不是要比今天的深度學習的性能要提高百千萬倍?

  • 接下來,我們就開始進入具體的內容。

首先,我們來看看機器學習理論最核心的一個觀點就是 generalization(泛化)。談泛化之前,我們先了解一下機器學習理論是做什麼的。機器學習理論是爲了給整個機器學習建立完整的框架,所以必須要有很嚴謹的形式。概括來說,機器學習理論是建立在概率統計的基本理論框架之上。它研究的核心問題在於,如果要實現一個具體的學習任務,需要多少資源能達到這個目的。而在機器學習中,很重要的資源就是數據,所以我們就是要研究究竟需要多少數據我才能夠學好。當然如果在數據已經給定的前提下,不同的方法規定了相同的數據,機器學習的成果是不一樣的,所以也可以表示出來。

這是機器學習理論的一個基本框架:我們要通過收集數據來學習出一個模型,拿到這個模型以後我們根本的任務是做預測,這個預測是在未知的數據上去做的,所以一個很關鍵的問題是,我們的目的是希望在未知數據上學出來的模型能夠表現出很好的性質,而不僅僅侷限在我們已經收集到的數據。

雖然大家通常認爲機器學習是過去幾十年發展出來的一個學科,但是我個人認爲,其實機器學習一直伴隨着人類文明的發展。從人類真正有文明、有科學那天,就有機器學習。我給大家舉幾個例子:

第一個,「胡克定律」,我相信各位肯定都接觸過這個中學物理問題,這個定律是探討拉伸的力和彈簧伸長的長度是什麼樣的物理關係。如果我們站在胡克的角度,這是一個什麼過程?我認爲這是一個非常典型的機器學習過程。胡克做的第一步是收集數據。他拿一個彈簧做了很多次實驗,根據每一次伸長的距離記錄拉力,並將數據記錄在一個表上。第二步,胡克(當然是用他的腦子,不是用計算機)學會了一個模型。他最後得出的結論是,這是一個線性的模型。再之後胡克拿了一些新的彈簧,再把它做拉伸,是否還符合這個模型。所以胡克發現「胡克定律」,就是一個非常典型的機器學習的過程:收集數據、建模、做出預測。機器學習的這種思想一直在科學領域不斷應用。

有一個問題,爲什麼胡克會學到一個線性的模型?大家看到這個線性模型,其實他的觀測數據上有很多的誤差的。比如說胡克做了 100 次實驗,得到 100 個點,他爲什麼不找一個曲線恰好能夠通過這 100 個點,使得訓練數據上沒有誤差?比如說我們很容易找到一個 99 階的多項式,而使得這 100 個點被零誤差地覆蓋,所以大家要思考一下:胡克爲什麼能夠得到這樣一個結果,而不是一個複雜的曲線,裏面最本質的思想是什麼,大家體會一下。

當然也有人質疑,認爲「胡克定律」在物理學上沒有任何的地位,不是一個什麼了不起的定律,大家看一看「開普勒定律」,這是了不起的貢獻。「開普勒定律」講的是什麼?開普勒通過研究過去上千年天文學積累的數據,最後發現三個規律。舉一個例子,說行星圍繞太陽轉動,實際軌跡是一個橢圓,他找到這個橢圓實際上不是精確吻合了這些數據,只是近似吻合,他爲什麼不找一個複雜的曲線完全吻合這個數據?開普勒在歸納這個數學規律的時候,背後也有一些非常奇妙的思想,並不是簡簡單單的觀測這個數據。最後我們來看一看機器學習裏經常見到的,學習一個分類器,我們可以用一個很簡單的分類器,用光滑的曲線來表示,我也可以用一個非常複雜的分類器,用彎彎曲曲的線來表示。當大家觀察到這幅圖的時候,你覺得應該是簡單的曲線,但是有一些分類誤差比較好呢,還是複雜曲線,對於觀測到的數據沒有誤差更好呢?

我們來總結一下剛纔幾個例子裏面,其實在通過學習模型和數據的時候,物理學家或者機器學習的學者是怎麼樣思考的,其實這早在 13 世紀威廉姆·奧卡姆就提出了一個哲學思想(奧卡姆剃刀理論),是用拉丁文寫的。其實我對他的解釋應該有一位更著名的科學家,有一段更著名的話,是對這句話進行最完美的解釋「Everything should be made as simple as possible but no simpler」,這句話是愛因斯坦說的,意思是做理論的時候一定要儘可能的簡單,但是你又不能過於簡單。對應物理模型的時候一定要找到一些模型,允許存在一定的誤差,但是又不能過於簡單,如果過於簡單,和你觀測的數據誤差太大也不行,奧卡姆剃刀的這一思想實際上是機器學習或者整個人類在獲取科學知識的歷程中,最核心、最本質的思想。

在今天的機器學習理論裏,實際上是把威廉姆·奧卡姆剃刀的思想定量化表示出來了,爲什麼要定量化?因爲今天,機器學習處理的問題,要比物理學的「胡克定律」、「開普勒定律」複雜千萬倍。甚至有人這樣講,今天在 21 世紀,如果你去研究物理學,你最後得到的是一個線性模型,我根本不需要看你具體研究的是什麼模型,得到的是什麼結果,我可以很肯定的告訴你,你做的東西要麼就是早就被別人已經做過了,要麼就是這個問題太簡單沒有任何意義。

換句話說,物理學中較爲簡單的定律早就被發現了。今天機器學習處理的問題是一些非常非常複雜的問題,給大家處理一些圖像、一些聲音,還有蒐集到的一些數據,牽扯到很多的人的因素,這是很複雜的東西,你不可能指望用簡單的方程,低次的一些方程或者低次的一些物理系統去描述。所以當你本質的模型已經極其複雜的時候,我究竟應該用一個多複雜的模型來表示?我需要一個定量的指導。所以機器學習最重要的是在一個定量的層面上,對剛纔我們講的奧卡姆剃刀理論,給出一個定量的定義。

那麼我們前面提到,機器學習建立在概率統計的基礎上,這裏面我就不對概率統計的數學細節做過多的解釋了,如果感興趣的老師、同學們可以課後去看我們這個印發給大家的具體內容,我還是在思想上給大家做一個比較稍微宏觀一點的介紹,在這之前有一些準備的工作。

大家可能都知道,概率論裏有一個叫「大數定律」的理論,講的是如果我觀測一個隨機變量很多次,它的平均值應該是趨向於它的數學期望。比如說以前有一個擲硬幣的例子,假如說擲一萬次,這裏面向上的次數應該是多少呢?如果這是一個非常均等公平(fair coin)的硬幣,那麼你擲接近無窮多次之後,頻率最後應該是趨向於 0.5,這就是大數定律。之前數學家 Nicolaus Bernoulli,就找了一個硬幣,擲了幾萬次,最後觀測出這樣的一個數值。

那麼我問大家一個問題:現在有一個這樣的硬幣,大家擲 1 萬次,我們知道擲出來的結果和 0.5 非常接近,但是究竟有多近呢?假如說你擲 1 萬次,發現 40% 是向上,60% 向下,你覺得這個硬幣有沒有問題?

我接下來要講的機器學習理論就是爲了給出一個定量的結果,就必須用一些能回答這個問題的數學工具。如果你擲出來正反面的概率是 40% 和 60%,那麼你的硬幣本身有沒有毛病,或者說如果硬幣沒有問題,你擲硬幣的時候應該會在一個什麼區間裏。

有一個定理和我剛纔講的這個理論是有點相關的,叫中心極限定理,大家應該聽說過,如果我有很多獨立分佈的隨機變量,我們考慮一個平均值,它也是一個隨機變量,但最後一定會趨向於一個正態分析,而且會告訴你正態分佈的方差是多少。

那麼機器學習裏面用的概率工具就能夠回答我剛纔說的定量問題,叫做「Concentration inequality」,其中比較重要的一點在於,它給出了數學上非常精確的一個定量描述,一個硬幣,假如說它是一個正常的硬幣,如果擲 1 萬次,在什麼區間裏是比較合理的呢?應該在 0.499—0.501 這個區間是比較合理的,就是由這些不等式精確地給出了。如果你擲出來的是 0.4 或者哪怕是 0.45,那麼這個硬幣 99.99% 的可能性是有問題的。

所以這樣一個概率裏面表示的,實際上是我們機器學習裏面常用的數學工具。

剛剛講 Concentration inequality 是一大類概率數學的不等式,其中最有代表性的,大家對這個名字能夠有所耳聞就可以了,叫 Chernoff Bound,是描述剛纔講的擲硬幣的平均值和你的數學期望大概有多大偏差,這是一個量化的刻畫,所以如果將來有一天遇到類似的問題需要找一個數學工具來解決的話,可以首先去查一下 Chernoff Bound,這些在網上都可以得到。

還有不等式,這都是非常常用的工具,具體的不再給大家做過多的細節介紹。

接下來我想和大家介紹機器學習裏面的第一個理論,也是機器學習裏到目前爲止影響最大、範圍最廣的一個理論。這個理論叫“VC理論”,VC這個字母代表了兩個人名字姓名的首字,他們是Vapnik和Chervonenkis。最開始我提到,機器學習裏面除了深度學習以外,有非常多最重要的算法,實際上都是做純理論的學者提出來的。其中SVM就是由VC理論裏面的Vapnik所提出來的。我們來看看“VC理論”講的是對機器學習理論怎麼樣的理解。

這裏面有很多定義,我就不一條一條的給大家介紹了,只給個別名詞給大家解釋一下。有些數據,比如這個數據是一幅圖像,我們可以認爲是圖像的空間裏存在的數據,如果對這個圖像進行分類,我們可以把類別標號也看作一個集合。在學習的時候,其實有一個很重要的假設,也是一個基本的理論框架,就是我們一定假設我們觀測到的數據,是按照一定的隨機性產生的。比如我們現在拿到一個任務,要研究一個圖像分類問題。我現在手裏有1千萬圖像,例如ImageNet,大家可以想象這個ImageNet是從世界上所有可能的、相關性的圖像中隨機抽取來的,這個假設其實是相當合理的。這裏面的數據認爲是隨機抽取來的,而且這個隨機抽取我們可以認爲它是按照某種分佈狀態隨機抽取的。並且我們還可以假定,未來當我們從這些數據上學出一個分類器、學出一個模型之後,我們要應用場合的數據。也就是我們真正要去實際應用的時候,那些數據也是隨機抽取出來的,並且應該和訓練數據從同樣的分佈中抽取出來的,這種假設是有一定的必然性的。如果我未來應用的場合和我做訓練的場景不是同一個分佈,稍有區別還可以,但如果應用場景和訓練場景沒有任何關聯,那麼機器學習不可能獲得成功。

這是一些基本定義。還有一個定義,即你在學習時需要有一個模型,這個模型可能是一個線性模型,比如前面舉的例子;也可能是SVM這樣的非線性模型。如果是線性模型大家都理解,而SVM可以看成是高維空間,甚至是無窮維這樣的線性模型。或者你在學一個深度學習、學一個網絡,但是無論你是用哪一種模型,其實你都把分類器限制在某一個集合裏了。線性模型就是所有的線性模型集合,SVM是在Hilbert空間中的線性分類器。如果你是一個Network,當你把Network的層級、結構都固定了,那就是在這樣固定的層數結構下面,所有可能的Network的集合。因爲不同的參數會得到不同的Network。當然如果你層數和結構可變的話,我可以把我的集合再擴展。這樣的集合通常叫做假設空間(hypothesis space)。換句話說你學習的模型總是從一個限定裏面得出來的,而不是憑空選擇的。這個概念其實非常重要。

回顧一下剛纔說到的“胡克定律”和“開普勒定律”,其實它們都牽扯到這個問題。“胡克定律”實際上已經把假設空間限制在了線性模型中。限制之後,你再去找最好的線性模型去適應你的數據。“開普勒模型”是限制在橢圓模型中。所以大家也可以看出假設模型是非常重要的。

有了剛纔這些基本的概念,我們來解釋一下學習理論最重要的概念——泛化。什麼叫做泛化,泛化其實非常簡單。前面談到,學習的目的是希望學好一個模型,並且讓這個模型在未來要應用場景的數據上有非常高的準確度。所謂泛化的錯誤,就是指一個模型在未來的應用場景下的錯誤率,叫做泛化。爲什麼叫泛化呢?我們可以把它和我們經驗的錯誤,或說在訓練數據中的錯誤做對比。通常大家訓練一個問題的時候,你拿到很多訓練數據,你可以學一個分類器,在訓練數據上得到一個錯誤率。而這個訓練的錯誤率和剛纔講的泛化的錯誤率實際上後面要看到,這二者是有非常本質的區別的。這個區別正是機器學習理論要研究的內容。

剛纔我們談到“大數定律”、“中心極限定理”,講的都是,比如說擲硬幣,擲很多次以後的平均值最後會趨向於數學期望。如果我們仔細的從技術細節上想一想我們剛纔的學習的話,如果有一個給定的分類器,這個分類器的錯誤率,比如說訓練數據上的錯誤率,實際上就是對每一個訓練數據是否正確,這個值就是在所有訓練數據上做的一個平均:錯誤的記錄1,正確的就記錄0,就是這樣的一個平均。根據我們剛纔講的“大數定律”、“中心極限定理”,甚至是不等式,它們都說明隨着訓練數據的增加,你給定的數據在訓練集合上的錯誤率應該趨向於它的數學期望。大家看一下這個數學期望恰恰是我們前面定義的所謂泛化錯誤,泛化錯誤其實就是你那個錯誤率的數學期望,在未來沒有看到的數據的錯誤率就是你的期望值。

那“大數定律”難道不是吧你的問題給直接解決掉了嗎?我只要訓練,找到一個訓練的模型,他在訓練上有一個很小的錯誤,根據“大數定律”是不是期望錯誤率就很低呢,而“期望錯誤率”正好是我們未來應用到場景上的錯誤率。這裏有什麼問題嗎?

這裏面有一個很重要的邏輯上的錯誤,就是大家一定要意識到,學習的過程是從一個很大的模型集合裏面挑選一個具體模型的過程,而挑選這個過程使剛纔我們說的“大數定律”不能再應用,如果對這個細節感興趣,大家回去以後仔細看看我上頁PPT的內容。挑選這個過程是極其核心的。由於你是可選的模型範圍很大,所以這個時候你挑選出來的模型的訓練錯誤率不一定和期望接近,有可能差異非常大。用“胡克定律”舉一個比較直觀的例子,比如你這裏有一個彈簧,做100次實驗,假如我把這個模型空間放在所有可能的99階多項式,我一定可以從這個模型空間中找到99階的多項式,使得我們觀測到的100個數據完全覆蓋,這個時候你的訓練錯誤率是零,但這個時候泛化的結果是多少?也就是你新做一個實驗、拿到一組新的數據的時候,期望的錯誤率是多少。如果給你一個99階的多項式,它的振盪很多,那麼新來一個數據以後,這個99階的多項式肯定性能非常差,從直觀上你就能看出來它沒有任何的穩定性。這就叫過度擬合(over-fitted)。由於你是從一個很大的集合中挑選出來的這個模型,儘管這個模型把你的數據處理的非常好,但是你過度擬合了,沒有達到泛化的目的。

在這裏我插一句,雖然我在後面還會重點講到這個問題,今天可能還有很多在座的老師、同學都在用深度學習,可能在座各位有相當多的老師、同學都有過訓練神經網絡的經驗。大家在訓練神經網絡的過程中有沒有這樣的體會;在相當一部分的訓練實驗中,你訓練錯誤可以降地非常低。但是在我的測試數據上,可能開始這個測試數據還是在降低,但是訓練到某一個程度之後再訓練下去,測試錯誤升高了。這是訓練深度學習時經常會遇到的問題。這就是典型的過度擬合。在訓練數據中做的好,但對於測試數據差別很大了。

其實這種現象也是機器學習最根本的現象,而且我覺得並不是因爲深度學習時代來臨了,過度擬合就不存在了。即使你用很大的數據集它依然是存在的。剛剛朱軍老師給大家講了一句話,隨着深度學習近幾年的發展,大家認爲防止過擬合這件事情越來越重要。所以大家要意識到,在今天所謂大數據的時代、在深度學習的時代,其實仍然是經常發生的,後面我會更細緻的談到這個問題,在如何處理解決這個問題上談一些我自己的想法。

回到剛纔的問題,如何保證機器學習有一個很好的泛化能力呢?這裏面就提到一個很重要的概念uniform generation。簡單來講它意思是說,你現在的目的是保證你學出來的分類器未來能有很好的效果,而你要想保證這一點,實際在很大程度上是要保證你剛纔模型侯選的這個空間裏幾乎所有的分類器都得有一個比較好的泛化能力,同時具有一個比較好的泛化能力。只有做到這一點的時候,你學出來分類器纔能有一個比較好的泛化能力,因爲你在觀測到訓練數據之前,不知道你學出來的將會是哪一個分類器,所以你如果能保證對集合裏面所有可能的分類器都有很好的泛化能力,就能保證你學出來的也有這樣的能力。

那麼如何才能夠保證所有的集合裏面侯選的分類器都有很好的泛化能力呢?它和什麼有關呢?我今天不講太多數學上的細節,它的核心點在於,你侯選模型的集合究竟有多大。具體到這一個符號,指的是,如果你侯選的模型集合是有限的,只含有有限多的分類器,這個符號就代表了它所含分類器的個數。簡而言之模型含有的分類器越多,那麼要保證學出來的分類器有較好的泛化能力,就需要更多的數據。

回到胡克的那個例子,如果你用一個很簡單的模型,比如用一個一階線性模型,待會兒我會談到,一階線性模型雖然是一個比較小的集合,但實際上含有無窮多的元素,因爲線性模型有無窮多個,它是連續的。這個地方大家可以先從直觀的角度去認爲它是一個比較小的模型,它所含的元素個數比較少。由於一階的線性模型某種意義上是一個比較小的集合,這個時候,只需要少數實驗,可能10個觀測數據可能就可以學出一個比較好的模型,再來一個新的數據,它的泛化能力就比較好。但是如果真的想學一個99階多項式這樣的模型,所需要的數據量就大太多了。剛纔我們講,你有100個數據想學99階多項式,這個學習理論告訴你100個數據太少了,得需要1萬個數據。當你觀測到1萬個數據的時候,大家再用99階多項式再去看,哪一個最好的99階多項式能夠和我的訓練數據更吻合呢,可能大家會驚訝的發現,這99階多項式,99、98一直到第二次項前面的係數實際上幾乎是0,實際上它就是一個現象級。

下面我總結一下。這個學習理論告訴大家,假如我是從一個侯選的集合裏選擇一個模型,要想學好,所需要的數據量一定和模型的複雜程度呈正相關。用今天大家更常見的深度學習來做一個比較形象的比喻,如果你想訓練一個1千層的網絡,比如這個網絡說有幾百萬個節點,和你想訓練一個10層的網絡,這個網絡可能就是幾千個節點,大家想一想哪個網絡需要的訓練數據量更大呢?肯定是模型很複雜的、深層的節點數更多的,需要的訓練數據量更大。換一種表示方式,如果我給定了你10萬個數據,你應該選擇一個什麼樣規模的網絡來訓練,這個對實際應用有很大的指導意義,如果你不瞭解這個機器學習的基本思想,那就沒有指導性。所以機器學習能告訴你大致應該在一個什麼樣的範圍內選擇模型的複雜程度,這個實際上就給出了機器學習理論是幹什麼用的。它不是具體的證明,而是告訴你一些高水平的想法。這個地方告訴你的是,當你有一些數據量的時候,你要根據你的數據量來選擇模型複雜程度。如果大家不相信回去可以做實驗,拿1萬個數據,看看你用一個幾百層的神經網絡訓練出來,會不會發生我剛纔講的過度擬合的現象。我估計你做10次實驗起碼有8、9次都會發生這個現象。

剛纔給大家講到VC理論,如果它只是這麼簡單的故事,也不能稱之爲理論。它理論技術上的核心,是它能夠給出非常精確的量化描述。這個量化描述本質上是它能針對無窮大的集合給出一個複雜描述。剛剛說了如果有限大的集合,這個集合裏的元素數量就是對它大小的刻畫,但當這個集合是無窮大的時候,怎麼刻畫呢?所以V、C兩人就提出了一套理論,對無窮大的集合給出一個刻畫的參數,叫做VC維度(VC dimesnion)。它非常好的刻畫了無窮大的集合,如果它含有的都是分類器的話,它的複雜度有多大。大家會發現它的應用範圍之廣,你會發現它在計算機很多領域都有廣泛應用。

簡言之VC維度越大,說明模型越複雜。這樣的模型想要訓練好,就需要有很多的訓練數據。如果感興趣的老師、同學們可以具體去看一些例子,常見模型是可以計算VC維度的。如果用線性模型這種很經典的模型,它可以給大家一個大致的量化說明。如果你的模型的VC維度是10,你需要多少訓練數據?我認爲大概需要VC維度10倍,也就是100個訓練數據。所以如果你的VC維度是1億的模型,而你只有1千個訓練數據,那就不可能訓練好,過度擬合的肯定很嚴重。但如果你VC dimesnion比數據量小太多,就走向了另一個極端——擬合不足(under-fitted)。就是說最好的模型還不能擬合訓練數據,所以在這些方面大家要多做注意。

  • 最後總結一下,VC維度刻畫的到底是什麼?

VC維度刻畫的是你從一個什麼樣的模型集合中去訓練,刻畫的是模型集合的複雜程度,它研究的是結構的性質。VC維度本身沒有給我們講任何算法的事。只告訴你現在有這麼樣一個VC維度,你可以對任何一個模型集合,比如說估計它的VC維度,你大概知道需要用多少訓練數據,但這對你的學習算法有什麼用VC維度其實沒有回答這個問題。你的學習算法呼應VC維度,實際上就是從你這個模型集合裏面去找一個使得訓練錯誤最小的。大家會看到,後面很多其他的學習理論和VC理論是非常重要的,VC理論對算法沒有太多牽扯,它研究的是集合大小的複雜程度。有了VC維度D之後,我大概可以泛化錯誤和訓練錯誤之間有什麼樣的量化關係。核心就是√D/N,N是數據量,D就是VC dimesnion,所以我剛纔講數據量至少是VC dimesnion的10倍,才能使跟號下的數據足夠小。

這個地方用一個圖能比較好的反映泛化錯誤和訓練錯誤。這個圖橫座標是模型集合的複雜程度,它是左低右高;縱軸代表錯誤,這條曲線是經驗錯誤,這個U型曲線是泛化/測試錯誤。隨着你的模型從最簡單,也就是擬合不足、訓練錯誤和泛化錯誤都很大,到最右邊得過度擬合,也就是訓練錯誤很低了,但是由於模型非常複雜,泛化錯誤也很大,所以你一定要找到一個非常合適的複雜程度作爲最終模型所選擇的範圍。這是VC理論給我們提供的一個思想:大家一定要找到合適複雜程度的模型。

剛剛講的VC理論本身其實沒有涉及到算法,但是做機器學習最終還是要落實到算法,有什麼方法能夠利用VC理論這樣的思想幫助我設計算法呢?其實用到最多的就是正則化(regularization)。可能很多人都聽說過這個方法,比如說在結構風險最小化(SRM)裏面提出來的,用層級(hierarchy)來做模型的集合。更多的正則化是,我優化的目標是我訓練的數據,但是我要加上一個和模型複雜程度相關的一項。

剛纔講了模型的複雜程度對泛化錯誤的影響,如果用到算法,一個很自然的思想就是用到正則化當中。這個是在算法層面上的實現,這是非常重要的。大家可以看SEM,非常典型的L2的正則化,前面是一個所謂的訓練損失。還有L1的正則化,LASSO等等。

還有Boosting,它是一個迭代的過程,每迭代一步,生成一步基本分類器,最後把所有基本分類器綜合到一塊。顯然隨着迭代的不斷增加,模型會越來越複雜。我如何解決模型過於複雜最後導致的過度擬合呢?early stoping就是一種方法。那在深度學習中你有沒有用到過early stoping呢?很多時候你用Network的時候,實際幾乎總是在用early stoping,你訓練一定的epoch你就得停掉。如果不停,讓它不斷的迭代下去,我覺得最後很可能就會過度擬合。你迭代1000個和迭代50個的結果可能會及其不同。但是1千個之後的airpok可能比50的小很多,但是你的迭代1000個時的測試錯誤可能就已經大得沒辦法看了。

本文爲北京大學王立威教授《機器學習理論的回顧與展望》主題報告(上),主題報告(下)敬請關注AI科技評論後續報道。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章