三種梯度下降算法的區(qū)別(BGD, SGD, MBGD)
前言
我們在訓練網(wǎng)絡(luò)的時候經(jīng)常會設(shè)置 batch_size,這個 batch_size 究竟是做什么用的,一萬張圖的數(shù)據(jù)集,應(yīng)該設(shè)置為多大呢,設(shè)置為 1、10、100 或者是 10000 究竟有什么區(qū)別呢?
- # 手寫數(shù)字識別網(wǎng)絡(luò)訓練方法
- network.fit(
- train_images,
- train_labels,
- epochs=5,
- batch_size=128)
批量梯度下降(Batch Gradient Descent,BGD)
梯度下降算法一般用來最小化損失函數(shù):把原始的數(shù)據(jù)網(wǎng)絡(luò)喂給網(wǎng)絡(luò),網(wǎng)絡(luò)會進行一定的計算,會求得一個損失函數(shù),代表著網(wǎng)絡(luò)的計算結(jié)果與實際的差距,梯度下降算法用來調(diào)整參數(shù),使得訓練出的結(jié)果與實際更好的擬合,這是梯度下降的含義。
批量梯度下降是梯度下降最原始的形式,它的思想是使用所有的訓練數(shù)據(jù)一起進行梯度的更新,梯度下降算法需要對損失函數(shù)求導數(shù),可以想象,如果訓練數(shù)據(jù)集比較大,所有的數(shù)據(jù)需要一起讀入進來,一起在網(wǎng)絡(luò)中去訓練,一起求和,會是一個龐大的矩陣,這個計算量將非常巨大。當然,這也是有優(yōu)點的,那就是因為考慮到所有訓練集的情況,因此網(wǎng)絡(luò)一定在向最優(yōu)(極值)的方向在優(yōu)化。
隨機梯度下降(Stochastic Gradient Descent,SGD)
與批量梯度下降不同,隨機梯度下降的思想是每次拿出訓練集中的一個,進行擬合訓練,進行迭代去訓練。訓練的過程就是先拿出一個訓練數(shù)據(jù),網(wǎng)絡(luò)修改參數(shù)去擬合它并修改參數(shù),然后拿出下一個訓練數(shù)據(jù),用剛剛修改好的網(wǎng)絡(luò)再去擬合和修改參數(shù),如此迭代,直到每個數(shù)據(jù)都輸入過網(wǎng)絡(luò),再從頭再來一遍,直到參數(shù)比較穩(wěn)定,優(yōu)點就是每次擬合都只用了一個訓練數(shù)據(jù),每一輪更新迭代速度特別快,缺點是每次進行擬合的時候,只考慮了一個訓練數(shù)據(jù),優(yōu)化的方向不一定是網(wǎng)絡(luò)在訓練集整體最優(yōu)的方向,經(jīng)常會抖動或收斂到局部最優(yōu)。
小批量梯度下降(Mini-Batch Gradient Descent,MBGD)
小批量梯度下降采用的還是計算機中最常用的折中的解決辦法,每次輸入網(wǎng)絡(luò)進行訓練的既不是訓練數(shù)據(jù)集全體,也不是訓練數(shù)據(jù)集中的某一個,而是其中的一部分,比如每次輸入 20 個??梢韵胂?,這既不會造成數(shù)據(jù)量過大計算緩慢,也不會因為某一個訓練樣本的某些噪聲特點引起網(wǎng)絡(luò)的劇烈抖動或向非最優(yōu)的方向優(yōu)化。
對比一下這三種梯度下降算法的計算方式:批量梯度下降是大矩陣的運算,可以考慮采用矩陣計算優(yōu)化的方式進行并行計算,對內(nèi)存等硬件性能要求較高;隨機梯度下降每次迭代都依賴于前一次的計算結(jié)果,因此無法并行計算,對硬件要求較低;而小批量梯度下降,每一個次迭代中,都是一個較小的矩陣,對硬件的要求也不高,同時矩陣運算可以采用并行計算,多次迭代之間采用串行計算,整體來說會節(jié)省時間。
看下面一張圖,可以較好的體現(xiàn)出三種剃度下降算法優(yōu)化網(wǎng)絡(luò)的迭代過程,會有一個更加直觀的印象。

總結(jié)
梯度下降算法的調(diào)優(yōu),訓練數(shù)據(jù)集很小,直接采用批量梯度下降;每次只能拿到一個訓練數(shù)據(jù),或者是在線實時傳輸過來的訓練數(shù)據(jù),采用隨機梯度下降;其他情況或一般情況采用批量梯度下降算法更好。