tft每日頭條

 > 生活

 > 深度學習pytorch測試集

深度學習pytorch測試集

生活 更新时间:2026-05-03 11:22:06

  Batch_Size(批尺寸)是機器學習中一個重要參數,涉及諸多矛盾,下面逐一展開。

  首先,為什麼需要有 Batch_Size 這個參數?

  Batch 的選擇,首先決定的是下降的方向。如果數據集比較小,完全可以采用全數據集 ( Full Batch Learning )的形式,這樣做至少有 2 個好處:其一,由全數據集确定的方向能夠更好地代表樣本總體,從而更準确地朝向極值所在的方向。其二,由于不同權重的梯度值差别巨大,因此選取一個全局的學習率很困難。 Full Batch Learning 可以使用 Rprop隻基于梯度符号并且針對性單獨更新各權值。

  對于更大的數據集,以上 2 個好處又變成了 2 個壞處:其一,随着數據集的海量增長和内存限制,一次性載入所有的數據進來變得越來越不可行。其二,以 Rprop 的方式叠代,會由于各個 Batch 之間的采樣差異性,各次梯度修正值相互抵消,無法修正。這才有了後來 RMSProp 的妥協方案。

  既然 Full Batch Learning 并不适用大數據集,那麼走向另一個極端怎麼樣?

  所謂另一個極端,就是每次隻訓練一個樣本,即 Batch_Size = 1。這就是在線學習(Online Learning)。線性神經元在均方誤差代價函數的錯誤面是一個抛物面,橫截面是橢圓。對于多層神經元、非線性網絡,在局部依然近似是抛物面。使用在線學習,每次修正方向以各自樣本的梯度方向修正,橫沖直撞各自為政,難以達到收斂如圖所示

  深度學習pytorch測試集(談談深度學習中的)(1)

  可不可以選擇一個适中的 Batch_Size 值呢?

  當然可以,這就是批梯度下降法(Mini-batches Learning)。因為如果數據集足夠充分,那麼用一半(甚至少得多)的數據訓練算出來的梯度與用全部數據訓練出來的梯度是幾乎一樣的。

  在合理範圍内,增大 Batch_Size 有何好處?

  内存利用率提高了,大矩陣乘法的并行化效率提高。跑完一次 epoch(全數據集)所需的叠代次數減少,對于相同數據量的處理速度進一步加快。在一定範圍内,一般來說 Batch_Size 越大,其确定的下降方向越準,引起訓練震蕩越小。 盲目增大 Batch_Size 有何壞處?

  内存利用率提高了,但是内存容量可能撐不住了。跑完一次 epoch(全數據集)所需的叠代次數減少,要想達到相同的精度,其所花費的時間大大增加了,從而對參數的修正也就顯得更加緩慢。Batch_Size 增大到一定程度,其确定的下降方向已經基本不再變化。 調節 Batch_Size 對訓練效果影響到底如何?

  這裡跑一個 LeNet 在 MNIST 數據集上的效果。MNIST 是一個手寫體标準庫,我使用的是 Theano 框架。這是一個 Python 的深度學習庫。安裝方便(幾行命令而已),調試簡單(自帶 Profile),GPU / CPU 通吃,官方教程相當完備,支持模塊十分豐富(除了 CNNs,更是支持 RBM / DBN / LSTM / RBM-RNN / SdA / MLPs)。在其上層有 Keras 封裝,支持 GRU / JZS1, JZS2, JZS3 等較新結構,支持 Adagrad / Adadelta / RMSprop / Adam 等優化算法。如圖所示

  深度學習pytorch測試集(談談深度學習中的)(2)

  深度學習pytorch測試集(談談深度學習中的)(3)

  運行結果如上圖所示,其中絕對時間做了标幺化處理。運行結果與上文分析相印證:

  Batch_Size 太小,算法在 200 epoches 内不收斂。随着 Batch_Size 增大,處理相同數據量的速度越快。随着 Batch_Size 增大,達到相同精度所需要的 epoch 數量越來越多。由于上述兩種因素的矛盾, Batch_Size 增大到某個時候,達到時間上的最優。由于最終收斂精度會陷入不同的局部極值,因此 Batch_Size 增大到某些時候,達到最終收斂精度上的最優。 歡迎一起讨論。

  ,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2026 - www.tftnews.com All Rights Reserved