????????在前一篇筆記中介紹了一些機器學習中的基本概念,其中提到了“模型”和“假設空間”的概念,也說過“統計學習首先要考慮的問題是學習什么樣的模型,模型確定了,模型的假設空間自然就確定了,后面要做的就是從假設空間子搜索最優的假設”。那么,大家可能就會提出這樣的問題“哪一種模型能提出最好的假設空間,從而得到性能最好的假設函數?”或者“有沒有一個最強大的模型,使用它就可以解決所有的問題”或者更具體的“傳統的機器機器學習技術和現在正火熱的深度學習哪個更好?”。答案很簡單:不結合具體的問題去比較哪個模型更好沒有意義!接下來我們來看一個叫“沒有免費午餐”(NFL,No Free Lunch)的理論,它會告訴我們為什么是這個答案。在接下來的討論中我們不區分模型、策略和算法,將它們統稱為“算法”或“機器學習算法”,將由“算法”最終訓練出的最佳假設稱為“模型”。
????????首先看一個簡單例子(來源:周志華《機器學習》):
????????假設我們有6個樣本點(xi, yi)組成的訓練集,分布如下圖:
????????假設我們選擇了兩種不同的機器學習算法La和Lb在這個訓練集上作訓練,它們各自搜索出了各自假設空間中最佳的假設函數A和B,對應上圖中的A和B兩條曲線。那么對于A和B這兩個模型到底哪一個對未來的新的數據的預測更好呢?
????????我們也許傾向于結構更簡單的A。好吧,如果我們的實際問題的數據分布如下圖所示,那么A的性能的確比B好,A與訓練集外的樣本更一致,預測的比B準確:
上圖中,白點為測試樣本,黑點為訓練樣本。
但是,現實的問題也有可能是這樣的:
在上面的這種情況下,B的性能比A好。
????????上面的例子說明了,不結合具體問題的情況下,對于一個學習算法La,若它在某個問題上比學習算法Lb好,則必然存在另一些問題,在那里Lb比La好。這個結論對任何算法都成立,哪怕La是一個非常先進的算法,而Lb只是“隨機胡猜”算法。
????????周志華《機器學習》中給出了一個簡單的形式化的證明,我會在其基礎上增加一些解釋來說明某些式子的意義。
周志華《機器學習》原文:
? ??????我解釋下為什么使用(1.1)式作為“訓練集之外的所有樣本上的誤差”。
????????首先,我們是這樣定義一個假設函數h對一個樣本點x的預測誤差的:預測值h(x)與真實值f(x)一致則誤差為0,不一致則誤差為1,即I(h(x)≠f(x))
? ? ? ? 由于x是一個隨機變量,那么這個誤差值也是一個隨機變量,取值為0或1,其在訓練集之外的所有樣本上的期望可以看作假設函數h在訓練集之外的所有樣本上預測的錯誤率,即:
????????我們就把這個錯誤率作為假設函數h在訓練集之外的所有樣本上的誤差。
????????然后,在算法La的假設空間中可能會存在多個假設函數與訓練集一致,最終產生哪一個是有概率的(這一點我們在以后介紹具體算法時就會看到),令算法La在訓練數據集X上產生某個假設h的概率為P(h|X, La),那么,我們接下來要做的是定義算法La在“訓練集之外的所有樣本上的誤差”,而不只是La產生的一個假設h的誤差。
????????我們已經定義了假設函數h在訓練集之外的所有樣本上的誤差,由于h是算法La以概率P(h|X, La)產生的,那么我們可以定義算法La的誤差為所有可能的h的誤差的期望,即:
????????上面的說明就是(1.1)是的含義了。
????????再解釋下(1.2)式的推導:
????????首先,這里考慮的是二分類問題,而且假設真實目標函數f可以是任何輸入空間X到輸出空間{0, 1}的映射,那么整個函數空間的大小就應該是2^|X|。
????????然后,這里假設在整個函數空間中所有可能的目標函數f是均勻分布的(即所有真實的問題是均勻出現的)。
????????在二分類問題中,對于一個樣本點x,假設函數h(x)的預測值要么是0要么是1,不妨假設為0,那么由于f是均勻分布的,所有將x映射為0的真實函數f的數量和所有將x映射為1的真實函數f的數量應該是一樣的,那么,在函數空間中就有一半數量的可能的f于假設函數h的預測不一致,于是就有:
等于
????????上面是對于NFL的簡化推導的說明。我們現在來看看這個NFL的結論。結論很有意思,總誤差與學習算法無關,任意兩個學習算法它們的期望性能是相同的。既然所有學習算法的期望性能都和隨機胡猜差不多,那還有什么好學的?
????????我們需要注意到,NFL定理有一個主要的前提:所有“問題”出現的機會相同,或所有問題同等重要。但實際情況并不是這樣。很多時候,我們只關注自己正在試圖解決的問題(例如某個具體應用任務),希望為它找到一個解決方案,至于這個解決方案在別的問題、甚至在相似的問題上是否為好方案,我們并不關心。所以,NFL定理最重要的寓意,是讓我們清楚地認識到,脫離具體問題,空泛地談論“什么學習算法更好”毫無意義,因為若考慮所有潛在的問題,則所有學習算法都一樣好。要談論算法的相對優劣,必須要針對具體的學習問題;在某些問題上表現好的學習算法,在另一些問題上卻可能不盡如人意。
????????可行的做法是,針對我們要解決的問題,比較可能的模型的預測性能,選出針對該問題最好的模型。
????????最后,加一點我的理解,不一定正確,僅供參考。在《機器學習中》只對f按均勻分布算了誤差總和,其實我們可以算一下學習算法La在所有問題按均勻分布出現時的期望誤差,這個期望誤差其實就是學習算法La在均勻分布的所有問題上的不準確率,它的結果是:
????????其中X是樣本空間,D是訓練數據集,x∈X-D就是訓練集之外的所有樣本。式子中求和的部分是對x的概率求和,所以有E<=1/2, 也就是說這個不準確率是有上界的。訓練數據集越小,這個不準確率越接近1/2,即當訓練數據不足時,學習算法想給均勻出現的所有二分類問題提供一個通用的模型其準確率和瞎猜差不多接近一半一半;但是如果能有充足的訓練數據,雖然學習算法之間的性能無法評估,但是學出來的模型的準確率高于50%,學習總比不學強。