為什麼深度學習對訓練樣本的數量要求較高?
新人提問,最近在研究深度卷積神經網路,看到很多的深度學習訓練都需要幾百萬的訓練樣本,我想請教各位為什麼深度學習一定要這麼多訓練樣本呢,假如樣本只有幾萬或者幾千,對性能會有影響嗎?
對於classification model,有這樣一個結論:
上式中N是訓練樣本數量,η大於等於0小於等於1,h是classification model的VC dimension。具體見wiki:VC dimension。
其中的這項:
也叫model complexity penalty。可以看到,test error小於training error加上model complexity penalty的概率是1-η。如果現在訓練模型的演算法能使得training error很小,而model complexity penalty又很小,就能保證test error也很小的概率是 1-η。所以要使得模型的generalization比較好,要保證training error和model complexity penalty都能比較小。
觀察model complexity penalty項,可以看到,h越大,model complexity penalty就會越大。N越大,model complexity penalty則會越小。大致上講,越複雜的模型有著越大的h(VC dimension),所以為了使得模型有著好的generalization,需要有較大的N來壓低model complexity penalty。 這就是為什麼深度學習的模型需要大量的數據來訓練,否則模型的generalization會比較差,也就是過擬合。
ps:排版有點渣,見諒
左:欠擬合中:過擬合右:深度學習你感覺一下。
機器學習里,模型越複雜、越具有強表達能力越容易犧牲對未來數據的解釋能力,而專註於解釋訓練數據。這種現象會導致訓練數據效果非常好,但遇到測試數據效果會大打折扣。這一現象叫過擬合(overfitting)。
深層神經網路因為其結構,所以具有相較傳統模型有很強的表達能力,從而也就需要更多的數據來避免過擬合的發生,以保證訓練的模型在新的數據上也能有可以接受的表現。dl的模型都很複雜,數據量不夠會overfit。數據量不夠可以data argument或在已有模型上finetune
記得以前有個老師說
數據之間無外乎因果關係,關聯關係。
當時不覺得有什麼道理接觸了一些聚類演算法,看過一些論文。主觀認識:在不知道因果關係的情況下,通過發現關聯關係來研究,是建立在數據量上面的。ps:貝葉斯裡面P(A|B)比P(A)精度高,不也一般建立在B是數據集嘛畢竟P(A|Bigdata)哈哈哈哈哈首先是因為curse of dimensionality。深度學習往往用於高維空間的學習,但是隨著維度的增高所需要的樣本數呈指數性增長。比如說對於Lipschitz連續的函數,minimax error rate是O(n^(-2/2+d)),其中d代表數據的維度。由此可見,為了達到同樣的error rate,高維度比低維度函數所需要的樣本數多了太多。其次在於深度學習並沒有足夠的利用好函數本身的信息。之所以深度學習這麼流行,是因為他對於所學習的函數的限制非常少,幾乎毫無任何假設(一個hidden layer的神經網路就可以估計所有的連續函數,而兩個hidden layer則可以估計所有函數)。但是這也帶來了一個缺憾,當函數足夠smooth足夠光滑的時候深度學習可能難以利用好這個信息。相反,local polynomial之類方法可以用更高次數的多項式來估計這個函數,利用好這個條件,達到相對較低的錯誤率。最後一點就在於深度學習常採用的是梯度下降。梯度下降,加上並不那麼高的learning rate,導致了在樣本量有限的時候各個節點的參數變化有限。何況各個節點的參數已開始往往是隨機的,如果運氣不好+樣本量有限,那麼最後有不那麼理想的錯誤率也是可想而知的。
其實這個問題回答起來不用這麼複雜,可以引用一句知乎上人盡皆知的名言:「身經百戰見得多」!
畫個train and test error VS 訓練數據量(training set size) 的learningcurve應該會更加直觀了。
可以找個簡單的數據集,比如說handwritten digits或者什麼的,分別用神經網路和決策樹或者knn做出這個learningcurve。
你會看到如果用一個決策樹去解決這個問題,隨著數據量增加,比如加到500,1000的樣本,test error會不斷降低,train error會不斷增加。最後比如在數據量為2000的地方兩個error就收斂了,在0.20的附近比如說。
但是如果你用神經網路去解決這個問題,你會看到當數據量很小的時候train error就是0.01了,然後數據量從0增到500或者1000,train error還是0.01,就像是一條直線一樣。直到數據量增加到幾萬的時候,才看到train error有略微明顯的增加(比如到了0.02)。 所以數據量從0到5w,train error只從0.01增加到0.02。而test error雖然在降低,但是一直都比較大,所以overfitting一直存在。
但是我們有個信念是,如同樓上其他人說的,只要數據量足夠大,那麼test和train會沿著收斂的方向不斷前進,而當數據量足夠大,兩個曲線收斂的那一刻達到的時候,不僅兩個曲線收斂了,同時我們的train和test error都是比較低的,遠低於上面的knn或者其他簡單點的模型。 如果是DL深層的神經網路,可能要幾百萬才能夠達到收斂,那麼這個時候的test error肯定也是非常低的
所以過擬合,欠擬合,是衡量模型擬合能力與數據量之間相對關係的東西。
如果擬合能力很強,數據量相比擬合能力太少了,就是過擬合。 (在圖線上,過擬合就是兩個曲線之間有gap,兩個曲線沒有達到收斂狀態,還在向收斂的方向趨近)
如果擬合能力很弱,數據量大大超過擬合能力大大足夠了,就是欠擬合。(在圖線上,欠擬合就是兩個曲線收斂了,但是這個收斂對應的error值太高了。 那麼怎麼判斷這個值太高了呢?這個是人視情況來決定的。)
所以從圖線的角度來說,對等劃分應該有三種狀態:
1) 如果兩個圖線未收斂狀態:這就叫過擬合。。
2) 如果兩圖線收斂了,但是收斂處的error值過高,不符合預期,就叫欠擬合。
3) 如果兩圖線收斂了,而且收斂處的error值比較低,符合預期,那麼就叫成功了。這正是我們想要的。
另外,其實具體情況,還是要根據問題本身的複雜程度,模型的複雜程度,數據量,這三者一起來看的。
如果有不對的地方請斧正。
目前本人在做的工作是降低深度學習的樣本使用數量,即主動學習(Active Learning)。
從實驗效果來看,(1)並不是說樣本量越多越好,主動學習方法可以大大降低樣本使用數量並且達到很好的實驗效果,沒有overfitting;(2)主動學習結合深度學習可以衍生出深度學習在少量樣本數據上的應用,如遙感圖像分類(樣本比普通圖像要少很多);(3)樣本本身是有雜訊的,每個樣本的價值是不同的。舉個例子來說,直接用支持向量來訓練一個支持向量機跟用全部數據訓練一個支持向量機是差不多的。同樣,深度學習的樣本中也存在這樣的重要的樣本和不重要的樣本。關鍵是質量。
以上
我覺得模型沒有必要訓練數據多,而是需要更具有代表性的數據(可以理解為SVM中的支撐向量)。1. 回到這個問題上來,深層神經網路之所以需要這麼多的訓練數據,就是因為我們根本不知道哪些是具有代表性的數據,訓練數據多了,這種包含代表性數據的概率就上來了。2. 過擬合的問題,數據量不夠所謂代表數據不足,這樣得到的模型不容易形成對整個數據的描述,泛化能力不夠。
大家說的都有一定的道理,dl的模型本身的表達能力比較強,樣本太少數據就是過於簡單,容易出現overfitting,這必然導致泛化能力弱。
另外樓上有人提到一個svm中「支撐向量的概念」,我一般稱之為「邊界樣本」,對之對應的便是「典型樣本」了。其實這類樣本是模型的後續優化是非常有意義的,後面好多人在原來的模型上採用hard negative mining出來了更好的效果,原因就在這裡了...人腦具有小樣本學習的能力,見過少量數據(單個樣本也可)後,後續就可容易地識別出,這個過程其實也可稱為基於知識(標註數據)的學習。
對於致力於模擬人腦的神經網路而言,其終極目的應該也是希望能實現小樣本學習,只是目前以深度學習為代表的方法還不具備該能力,這是需要進一步深入研究的。實際應用中真正有價值的數據也是很少的,因此機器學習需要解決小樣本學習需求,即基於少量已有知識,從海量數據中挖掘出關聯數據。
對於深度學習而言,可用於學習的數據規模與兩個因素有關,一是數據所屬領域,二是數據獲取難易程度。
1、在某個領域數據規模很大的情況下,如果數據容易獲得,則應用深度學習可從中學習出關鍵數據特徵,因為數據規模越大,理論上可涵蓋所有的關鍵特徵。著名的例子就是,Andrew Ng訓練的深度學習網路從大量貓圖片中,自動認出了貓。但如果數據難以獲得,可用於學習的數據規模小,那麼就難以學習出領域內數據的所有特徵,學出的模型泛化能力弱。
2、在領域數據規模本身就小的情況下,首先需要判斷是否使用傳統的統計方法就可以很好地解決問題;如果需要使用深度學習,則可以考慮採用數據增強方法(Data augmentation)生成一些正樣例或負樣例來增大數據規模,也可考慮模型遷移學習。
因為VC維估計都爆表…
深度學習都是幾w的特徵 ,用vc維來看,特徵越多模型越複雜,如果ein要跟eout差不多,那麼樣本量是需要很巨大的,也就是我們說的overfit的問題。一般來說數據量是要十倍的vc維
推薦閱讀:
TAG:機器學習 | 大數據 | 深度學習DeepLearning |