資料集shuffle的重要性

輕墨發表於2019-02-19

資料集shuffle的重要性
深度學習專案,在訓練之前,一般均會對資料集做shuffle,打亂資料之間的順序,讓資料隨機化,這樣可以避免過擬合。 那為什麼shuffle可以有效的避免過擬合? 以貓狗分類為例, 假如資料集是

Dog,Dog,Dog,... ,Dog,Dog,Dog,Cat,Cat,Cat,Cat,... ,Cat,Cat
複製程式碼

所有的狗都在貓前面,如果不shuffle,模型訓練一段時間內只看到了Dog,必然會過擬合於Dog,一段時間內又只能看到Cat,必然又過擬合於Cat,這樣的模型泛化能力必然很差。 那如果Dog和Cat一直交替,會不會就不過擬合了呢?

Dog,Cat,Dog,Cat,Dog ,Cat,Dog,...
複製程式碼

依然會過擬合,模型是會記住訓練資料路線的,為啥呢?

首先我們需要明白固定的資料集順序,意味著給定迭代步,對應此迭代步的訓練資料是固定的。 假如目標函式是J=f(w1, w2),使用梯度下降優化J。給定權重取值w1、w2和迭代步step的情況下,固定的資料集順序意味著固定的訓練樣本,也就意味著權值更新的方向是固定的,而無順序的資料集,意味著更新方向是隨機的。如下圖中的A點,如果固定的更新方向是紅色箭頭方向,則很難收斂到最優點,而如果更新方向是隨機的,則有可能就沿著白色箭頭方向收斂到最優點。

資料集shuffle的重要性

所以固定的資料集順序,嚴重限制了梯度優化方向的可選擇性,導致收斂點選擇空間嚴重變少,容易導致過擬合。

所以模型是會記住資料路線的,所以shuffle很重要,一定要shuffle。

資料集shuffle的重要性

相關文章