訓練機器學習的資料集大小很重要 - svpino

banq發表於2021-04-23

訓練神經網路的示例數量是我們可以用來影響訓練過程的基本工具。
在機器學習術語中,我們稱其為“批大小batch size”。批batch不過是將一組示例封裝成類似陣列的結構而已。
 

首先,一些背景知識
我們不能不專心討論訓練過程的工作原理。這是一個粗略的摘要,應該足以滿足我們的目的:

  1. 我們從訓練資料集中提取了一些示例資料。
  2. 我們透過模型執行該批次以計算結果。
  3. 我們發現該結果離需要的地方有多遠。
  4. 我們將模型的引數調整特定數量。
  5. 我們根據需要重複進行多次迭代。

我們用於建立批示例的數量是我們做出的第一個決定。這是一個至關重要的選擇,它將影響流程的工作方式。
我們有三種可能的選擇:
  1. 我們可以使用整個訓練資料集來建立一個長批次。
  2. 我們可以走到另一個極端,一次只使用一個示例。
  3. 我們可以放在中間,在每批資料中使用一些資料示例。

讓我們仔細考慮一下這些選項中的每一個。
 

一次使用整個資料集
機器學習從業者喜歡為所有事物想出一個名字。因此,他們決定將此過程稱為“批次梯度下降Gradient Descent ”。 Gradient Descent 是最佳化演算法的名稱,而 Batch批概念是因為我們將使用整個資料集。是的,我知道這沒有道理,但讓我們繼續吧。
如果我們使用資料集中的每個示例建立一個批處理,然後在整個過程中執行它,最後只更新一次模型,則將節省大量的處理時間。很好,但另一方面,可能很難同時在記憶體中容納很多示例,因此這不適用於大型資料集。
使用整個資料集計算模型更新的最有趣的方面是,我們正在消除資料中的所有噪聲,並建立小的且穩定的調整。這聽起來很無聊但可以預見。某些問題將從中受益,但是噪聲的缺乏可能會阻止演算法脫離次優解決方案。
  

一次只使用一個示例
這就是所謂的“隨機梯度下降Stochastic Gradient Descent”(通常稱為 SGD)
在這種情況下,我們為資料集中的每個示例調整模型的引數。在這裡,我們不必一次處理整個事情,因此我們不會有記憶體限制,而且我們將立即獲得有關培訓進行情況的反饋。
更新每個示例的引數將導致調整過程中產生很多噪音。這對於特定的問題是有好處的,因為它可以防止它們卡住(值會跳出陷阱),但是在訓練模型時也會產生難看,嘈雜的訊號。
 

中間取一些資料集
分散差異通常是一個好策略,這就是“小批次梯度下降Mini-Batch Gradient Descent”的作用:它使用資料集中的一些示例來計算對模型的更新。
這是一個很大的折衷,它為我們提供了先前兩種方法的優點,並避免了它們的問題。實際上,小批次梯度下降是常用的一種。不過,我們通常將其稱為“隨機梯度下降”,因為我們確實希望確保使其儘可能地令人困惑。當您聽到有人說“ SGD ”時,請記住,他們可能使用一批帶有多個示例的批處理。
我們需要回答的最後一個問題是您應該在一個批處理中包含多少個示例。已有大量研究對此做出回答,經驗證據表明,較小的批次效能更好。
為了更加具體,並引用 一篇 探討這一想法的好論文,“ (…)32是一個很好的預設值。”
 

讓我們總結一下
好吧,讓我們用一些實用的建議來快速總結一下。
在訓練過程的每次迭代中使用的示例數量至關重要。良好的做法是始終從32開始,除非您有充分的理由選擇其他尺寸。
獲得有效的模型後,請隨時嘗試使用不同的批次大小。通常,我不會偏離預設值太多,並且很少使用16、32、64或128以外的其他值。
並且,當然,向那些努力工作的人們敬酒,使他們使用名稱和縮寫來使我們感到受歡迎!




 

相關文章