Overfitting and underfitting in deep learning
在深度學(xué)習(xí)中,訓(xùn)練的過程中大家會(huì)經(jīng)常遇到 Overfitting and underfitting這兩種情況.
大家還記得去年NIPS上的大牛Ali Rahimi(阿里·拉希米)炮轟:機(jī)器學(xué)習(xí)已經(jīng)成了煉金術(shù)!
除了深度學(xué)習(xí)中各種參數(shù)的不確定性,還有Overfitting and underfitting,無疑人一些人覺得,高大上的深度學(xué)習(xí)背后的理論支撐實(shí)在是太少了.
煉金術(shù)帶來了冶金祭往、紡織、現(xiàn)代玻璃制造工藝函似、醫(yī)療等等領(lǐng)域的發(fā)明, 但是無論怎樣,它能在實(shí)際中解決問題...
01.
有關(guān)過擬合和欠擬合,我們?cè)跈C(jī)器學(xué)習(xí)入門的章節(jié)早就學(xué)過,大家看看下面的圖片,應(yīng)該很明白.
但是,在深度學(xué)習(xí)的具體訓(xùn)練中 overfitting and underfitting的情景是如何表現(xiàn)出來的? 有何哪些因素有關(guān)?
我們就拿MNIST手寫數(shù)字識(shí)別為例吧(貌似這個(gè)已經(jīng)成了經(jīng)典了).
MNIST有60,000個(gè)用于訓(xùn)練的28*28的灰度手寫數(shù)字圖片(0-9一共10個(gè)數(shù)字)弯屈,10,000個(gè)測試圖片,是我們初學(xué)時(shí)最常用例子. 具體可以參照我以前的那篇文章keras 數(shù)據(jù)集學(xué)習(xí)筆記.
我們先構(gòu)建一個(gè)模型(original model):
# original model
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
這個(gè)模型很簡單3層, 前2層都是16的全連接層.
在這個(gè)模型基礎(chǔ)上,我們?cè)谠O(shè)計(jì)一個(gè)更加簡化的模型(Smaller model): 把前2層變成4.
# Smaller model
model = models.Sequential()
model.add(layers.Dense(4, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(4, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
我們跑一下訓(xùn)練比較一下這兩個(gè)模型的validation loss:
你可以看到,小的模型開始收斂的較快,在4epoch后,收斂比原始的模型變慢,最后開始進(jìn)入 overfitting 狀態(tài).
我們?cè)僦v一個(gè)大的模型:(Bigger model)前2層變成512.
# Bigger model
model = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
我們比較一下結(jié)果:
更大的模型差不多一開始就開始o(jì)verfitting,后面就像是噪音一樣不規(guī)則的跳動(dòng).
那么我們?cè)倏匆幌铝硗庖豁?xiàng)參數(shù)(trainning loss):
正如我們看到的,大的模型trainning loss很快接近0,但是隨后也會(huì)有些波動(dòng),會(huì)逐漸增大,這一點(diǎn)和 validation loss的結(jié)果不同.
我們看到了模型的大小直接關(guān)系到訓(xùn)練的結(jié)果.但是沒有公式可以套用,具體采用什么模型,還需要經(jīng)驗(yàn)和在應(yīng)用中的調(diào)整.