
298
|
第六章:深度網路的調整
考慮到
最佳化效率
時,必須說明一下,我們不可能完全不管其他超參數(如學習速率)
而獨立決定小批量數量應該是多少
—
比較大的小批量數量也就表示比較平滑的梯度
(即更精確、更具有一致性的梯度值),只要結合適當的調整,就可以針對給定數量的
參數更新,進行更快的學習。當然,需要權衡取捨的是,如此一來每個參數更新,也就
需要花費更長的時間來進行計算。使用比較大的小批量數量,可能也有助於我們的網
路,能夠在一些比較困難的情況下(例如有很多雜訊或遇到各類別數量不均衡的資料
集)進行學習。
那麼,究竟應該怎麼選擇適當的小批量數量呢?實務上來說,如果是用 CPU 進行訓
練,通常就是從 32 到 256 之間;如果是用 GPU 進行訓練,通常就是從 32 到 1024 之
間。在一般的情況下,這個範圍內的某個數字對於比較小的網路來說已經足夠了;如果
遇到比較大的網路,或許應該再多測試一下(否則訓練時間有可能會過長)。
不過,記憶體要求有可能會對大型網路小批量數量的最大值形成一種限制。
對於分散式訓練來說,在共用硬體上針對每個執行程序(executor)使用
比較小的小批量數量(例如在每台機器上使用多個執行程序進行 Spark 訓
練),這種做法並不罕見。
最後不要忘記的是,如果增加小批量數量,每個階段的參數更新次數就會減少(別忘了
一個階段指的就是訓練組資料全都被使用過一次)。每個階段的參數更新次數,正好就
是訓練組資料的樣本總數除以小批量數量的結果。
小批量數量與階段的關係
如果把小批量數量增為兩倍,我們就必須把階段的數量增為兩倍,才能保 ...