三種梯度降低算法的區別(BGD, SGD, MBGD)

前言

咱們在訓練網絡的時候常常會設置 batch_size,這個 batch_size 到底是作什麼用的,一萬張圖的數據集,應該設置爲多大呢,設置爲 一、十、100 或者是 10000 究竟有什麼區別呢?算法

# 手寫數字識別網絡訓練方法
network.fit(
  train_images,
  train_labels,
  epochs=5,
  batch_size=128)

批量梯度降低(Batch Gradient Descent,BGD)

梯度降低算法通常用來最小化損失函數:把原始的數據網絡餵給網絡,網絡會進行必定的計算,會求得一個損失函數,表明着網絡的計算結果與實際的差距,梯度降低算法用來調整參數,使得訓練出的結果與實際更好的擬合,這是梯度降低的含義。網絡

批量梯度降低是梯度降低最原始的形式,它的思想是使用全部的訓練數據一塊兒進行梯度的更新,梯度降低算法須要對損失函數求導數,能夠想象,若是訓練數據集比較大,全部的數據須要一塊兒讀入進來,一塊兒在網絡中去訓練,一塊兒求和,會是一個龐大的矩陣,這個計算量將很是巨大。固然,這也是有優勢的,那就是由於考慮到全部訓練集的狀況,所以網絡必定在向最優(極值)的方向在優化。函數

隨機梯度降低(Stochastic Gradient Descent,SGD)

與批量梯度降低不一樣,隨機梯度降低的思想是每次拿出訓練集中的一個,進行擬合訓練,進行迭代去訓練。訓練的過程就是先拿出一個訓練數據,網絡修改參數去擬合它並修改參數,而後拿出下一個訓練數據,用剛剛修改好的網絡再去擬合和修改參數,如此迭代,直到每一個數據都輸入過網絡,再從頭再來一遍,直到參數比較穩定,優勢就是每次擬合都只用了一個訓練數據,每一輪更新迭代速度特別快,缺點是每次進行擬合的時候,只考慮了一個訓練數據,優化的方向不必定是網絡在訓練集總體最優的方向,常常會抖動或收斂到局部最優。性能

小批量梯度降低(Mini-Batch Gradient Descent,MBGD)

小批量梯度降低採用的仍是計算機中最經常使用的折中的解決辦法,每次輸入網絡進行訓練的既不是訓練數據集全體,也不是訓練數據集中的某一個,而是其中的一部分,好比每次輸入 20 個。能夠想象,這既不會形成數據量過大計算緩慢,也不會由於某一個訓練樣本的某些噪聲特色引發網絡的劇烈抖動或向非最優的方向優化。優化

對比一下這三種梯度降低算法的計算方式:批量梯度降低是大矩陣的運算,能夠考慮採用矩陣計算優化的方式進行並行計算,對內存等硬件性能要求較高;隨機梯度降低每次迭代都依賴於前一次的計算結果,所以沒法並行計算,對硬件要求較低;而小批量梯度降低,每個次迭代中,都是一個較小的矩陣,對硬件的要求也不高,同時矩陣運算能夠採用並行計算,屢次迭代之間採用串行計算,總體來講會節省時間。code

看下面一張圖,能夠較好的體現出三種剃度降低算法優化網絡的迭代過程,會有一個更加直觀的印象。blog

對比圖

總結

梯度降低算法的調優,訓練數據集很小,直接採用批量梯度降低;每次只能拿到一個訓練數據,或者是在線實時傳輸過來的訓練數據,採用隨機梯度降低;其餘狀況或通常狀況採用批量梯度降低算法更好。內存

  • 本文首發自: RAIS
相關文章
相關標籤/搜索