深度學習神經網絡 隨筆記

深度煉丹入坑許久,記錄一些過程中遇到的問題,不定時更新。

NO FREE LUNCH定理:如果不考慮具體問題,所有的算法都是隨機猜測,沒有好壞之分。

1、訓練數據集shuffle的作用

在將訓練數據送入網絡之前,一般均會對數據集做shuffle,打亂數據之間的順序,讓數據隨機化,這樣可以避免過擬合。 

如果不shuffle,模型短期時間內可能會連續遇見到A類型樣本,可能會出現過擬合,而另一段時間內又過擬合於B類型樣本,忘記之前學習到的A樣本,這樣的模型泛化能力必然很差。那如果A和B樣本一直交替,還會過擬合嗎?

依然會過擬合,模型是會記住訓練數據的路線,因爲固定的數據集順序,意味着給定迭代步,對應此迭代步的訓練數據是固定的。 假如目標函數是J=f(w1, w2),使用梯度下降優化J。給定權重取值w1、w2和迭代步step的情況下,固定的數據集順序意味着固定的訓練樣本,也就意味着權值更新的方向是固定的,而無順序的數據集,意味着更新方向是隨機的。在更新的過程中,若沿着固定的方向更新,則可能很難收斂到最優點,而如果更新方向是隨機的,則有可能收斂到最優點。所以參數更新的過程,叫隨機梯度下降。

固定的數據集順序,嚴重限制了梯度優化方向的可選擇性,導致收斂點選擇空間嚴重變少,容易導致過擬合。模型是會記住數據路線的,因此一般都會shuffle。

總結:shuffle開了叫隨機梯度下降,不開叫梯度下降。從優化角度來說區別巨大。實際角度來說,不shuffle的話神經網絡會記住特定的example順序。

Reference:

【1】https://juejin.im/post/5c6b989bf265da2ddd4a5261

2、shuffle一定要用嗎?

不一定,視具體任務而定。盡信書不如無書。

脫離了具體任務、場景,講煉丹技巧,都是耍流氓。

Shuffle是一種訓練的技巧,因爲機器學習其假設和對數據的要求就是要滿足獨立同分布,打亂數據可以讓輸入近似滿足條件,也有利於模型的收斂。所以任何樣本的出現都需要滿足“隨機性”。所以在數據有較強的“人爲”次序特徵的情況下,Shuffle顯得至關重要。

但是模型本身就爲序列模型,則數據集的次序特徵爲數據的主要特徵,並且模型需要學到這種次序規律時,則不可以使用Shuffle。否則會將數據集中的特徵破壞。

監督學習中,有一個基本的假設是獨立同分布假設,即所有樣本都是從相同的概率分佈中抽取出來的,並在統計上相互獨立。基於這個假設,打亂數據不會影響機器學習的結果。並有以下優點:

  • 提升模型質量
  • 提升預測表現

需注意的是,並不是所有數據滿足獨立同分布假設。有時間相關性的數據,如temporal data, time-series data是不能打亂進行機器學習的。

Shuttle阻隔數據間本身順序的相關性。

對比一下,如果你期望的是預測任意出現的新sample,那麼打亂訓練數據阻隔本身順序相關性理所當然,如果期望預測有序出現的新sample,那麼保持順序信息是必須的。

總結:還是看具體任務和實驗結果而定,畢竟煉丹是一門實驗科學。

Reference:

【1】https://blog.csdn.net/qq_19672707/article/details/88864207

【2】https://blog.csdn.net/leayc/article/details/79484758

【3】李航 《統計學習方法》

3、如果shuffle後,採用mini-batch訓練的話,每一個batch裏面的樣本間,有沒有順序性?

無。因爲mini-batch採樣的時候,也是在已經打亂後的數據集上進行的,而已經打亂後的數據集中,已沒有原始的順序性,所以每一個batch裏面的這些樣本,之間也是亂序的。

 

 

 

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