批量、小批量和隨機梯度下降

Linda Hamilton
發布: 2024-11-24 11:26:09
原創
414 人瀏覽過

請我喝杯咖啡☕

*備忘錄:

  • 我的文章解釋了 PyTorch 中使用 DataLoader() 進行批次、小批量和隨機梯度下降。
  • 我的文章解釋了 PyTorch 中不使用 DataLoader() 的批量梯度下降。
  • 我的文章解釋了 PyTorch 中的優化器。

有批次梯度下降(BGD)、小批量梯度下降(MBGD)和隨機梯度下降(SGD),它們是如何從資料集中取得資料使用梯度下降的方法最佳化器,例如Adam ()、SGD()、RMSprop()、Adadelta()、Adagrad() 等PyTorch。

*備忘錄:

  • PyTorch 中的 SGD() 只是基本的梯度下降,沒有特殊功能(經典梯度下降(CGD)),而不是隨機梯度下降(SGD)。
  • 例如,使用下面這些方式,您可以靈活地使用Adam() 執行BGD、MBGD 或SGD Adam,使用SGD() 執行CGD,使用RMSprop() 執行RMSprop,使用Adadelta() 執行Adadelta,使用Adagrad( ) 執行Adagrad, PyTorch 中的等。
  • 基本上,BGD、MBGD 或 SGD 是透過 DataLoader() 對資料集進行混洗來完成的: *備註:
    • 改組資料集可以緩解過度擬合。 *基本上,只有訓練資料被打亂,因此測試資料不會被打亂。
    • 我的帖子解釋了過度擬合和欠擬合。

Batch, Mini-Batch & Stochastic Gradient Descent

(1) 批次梯度下降(BGD):

  • 可以對整個資料集進行梯度下降,在一個時期內只採取一步。例如,整個資料集有 100 個樣本(1x100),那麼梯度下降在一個 epoch 中只發生一次,這意味著模型的參數在一個 epoch 中只更新一次。
  • 使用整個資料集的平均值,因此每個樣本不如 MBGD 和 SGD 那麼突出(不太強調)。因此,收斂比MBGD 和SGD 更穩定(波動更小),並且比MBGD 和SGD 的雜訊(雜訊資料)更強,導致比MBGD 和SGD 更少的超調,並且創建比MBGD 和SGD 更準確的模型,如果沒有陷入局部最小值,但BGD 比MBGD 和SGD 更不容易逃脫局部最小值或鞍點,因為正如我之前所說,收斂比MBGD 和SGD更穩定(波動更小)正如我之前所說,BGD 比 MBGD 和 SGD 更容易導致過擬合,因為每個樣本都比 MBGD 和 SGD 不那麼突出(不太強調)。 *備註:
    • 收斂表示初始權重透過梯度下降到函數的全域最小值移動。
    • 雜訊(雜訊資料) 表示離群值、異常或有時重複的資料。
    • 超調意味著跳過函數的全域最小值。
  • 的優點:
    • 收斂比 MBGD 和 SGD 更穩定(波動性較小)。
    • 它的雜訊(雜訊資料)比 MBGD 和 SGD 強。
    • 它比 MBGD 和 SGD 更少導致過衝。
    • 如果沒有陷入局部最小值,它會創造比 MBGD 和 SGD 更準確的模型。
  • 的缺點:
    • 它不擅長線上學習等大型資料集,因為它需要大量內存,減慢收斂速度。 *線上學習是模型從資料集流中即時增量學習的方式。
    • 如果你想更新模型,需要重新準備整個資料集。
    • 與 MBGD 和 SGD 相比,它更不容易逃脫局部最小值或鞍點。
    • 比 MBGD 和 SGD 更容易導致過擬合。

(2)小批量梯度下降(MBGD):

  • 可以用分割的資料集(整個資料集的小批量)一小批一小批地進行梯度下降,在一個時期內採取與整個資料集的小批量相同的步數。例如,將具有 100 個樣本(1x100)的整個資料集分為 5 個小批次(5x20),然後梯度下降在一個 epoch 內發生 5 次,這意味著模型的參數在一個 epoch 內更新 5 次。
  • 使用從整個資料集中分割出來的每個小批次的平均值,因此每個樣本比 BDG 更突出(更強調)。 *將整個資料集分成更小的批次可以使每個樣本越來越突出(越來越強調)。因此,收斂比BGD 更不穩定(波動更大),且雜訊(雜訊資料)也比BGD 弱,比BGD 更容易導致過衝,並且即使沒有陷入局部極小值,也會創造比BGD 更不準確的模型,但MBGD 比BGD 更容易逃脫局部最小值或鞍點,因為正如我之前所說,收斂比BGD 更不穩定(波動更大),MBGD 比BGD更不容易導致過擬合,因為每個樣本都更穩定正如我之前所說,out(更強調)比 BGD 更重要。

  • 的優點:

    • 在線上學習等大型資料集上,它比 BGD 更好,因為它比 BGD 佔用更少的內存,比 BGD 更不會減慢收斂速度。
    • 如果你想更新模型,不需要重新準備整個資料集。
    • 它比 BGD 更容易逃脫局部最小值或鞍點。
    • 比 BGD 更不容易導致過擬合。
  • 的缺點:

    • 收斂性比 BGD 更不穩定(波動較大)。
    • 它的雜訊(雜訊資料)不如 BGD 強。
    • 它比 BGD 更容易導致過衝。
    • 即使沒有陷入局部最小值,它也會創建一個不如 BGD 準確的模型。

(3) 隨機梯度下降(SGD):

  • 可以對整個資料集的每個樣本進行梯度下降,一個樣本一個樣本,在一個時期內採取與整個資料集的樣本相同的步數。例如,整個資料集有 100 個樣本(1x100),那麼梯度下降在一個 epoch 內發生 100 次,這意味著模型的參數在一個 epoch 內更新 100 次。
  • 使用整個資料集的每一個樣本逐個樣本而不是平均值,因此每個樣本比 MBGD 更突出(更強調)。因此,收斂比MBGD 更不穩定(更波動),而且雜訊(雜訊資料)也比MBGD 弱,比MBGD 更容易導致過衝,並且即使沒有陷入局部極小值,也會創造比MBGD 更不準確的模型,但SGD 比MBGD 更容易逃脫局部極小值或鞍點,因為正如我之前所說,收斂比MBGD 更不穩定(波動更大),而且SGD 比MBGD更不容易導致過擬合,因為每個樣本都更穩定正如我之前所說,out(更強調)比MBGD。

  • 的優點:

    • 在大型資料集(例如線上學習)上它比 MBGD 更好,因為它比 MBGD 需要更小的內存,比 MBGD 更不會減慢收斂速度。
    • 如果你想更新模型,不需要重新準備整個資料集。
    • 它比 MBGD 更容易逃脫局部最小值或鞍點。
    • 比 MBGD 更不容易導致過擬合。
  • 的缺點:

    • 收斂性比 MBGD 更不穩定(波動較大)。
    • 它的雜訊(雜訊資料)不如 MBGD 強。
    • 它比 MBGD 更容易導致過衝。
    • 如果沒有陷入局部最小值,它會建立一個不如 MBGD 準確的模型。

以上是批量、小批量和隨機梯度下降的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板