一、什麼是小批量梯度下降法
1、小批量梯度下降法(Mini-batch Gradient Descent, MBGD)是一種介於梯度下降法(GD)和隨機梯度下降法(SGD)之間的優化算法。在每次迭代時,它不像GD一樣使用所有的訓練樣本,也不像SGD一樣只使用一個樣本,而是使用一小部分訓練樣本(通常是2到1000個)。
2、這樣可以在降低隨機性和提高算法效率之間取得平衡。與SGD相比,MBGD在每次迭代時使用更多的數據,因此更可能找到全局最優解;與GD相比 ,MBGD在每次迭代時使用更少的數據,因此更快、更節省內存。
二、小批量梯度下降法的實現
1、首先需要定義一個損失函數(Loss Function),通常是均方誤差函數,表示預測結果與真實結果之間的差距。
def loss_function(y_true, y_pred): return ((y_true-y_pred)**2).mean()
2、然後需要定義模型(Model),通常是一個線性回歸模型,也可以是其他類型的模型。
class LinearRegression: def __init__(self, n_features): self.n_features = n_features self.weights = np.random.randn(n_features) self.bias = np.random.randn() def forward(self, x): return np.dot(x, self.weights) + self.bias def backward(self, x, y, y_pred): n_samples = x.shape[0] d_weights = (2 / n_samples) * np.dot(x.T, (y_pred - y)) d_bias = (2 / n_samples) * np.sum(y_pred - y) return d_weights, d_bias
3、在訓練過程中,需要隨機抽取一小部分樣本構成一個batch,計算這個batch的損失和梯度,然後更新模型參數。
def train_step(model, optimizer, x_batch, y_batch): # forward y_pred = model.forward(x_batch) # backward d_weights, d_bias = model.backward(x_batch, y_batch, y_pred) # update optimizer.update(model, d_weights, d_bias) # compute loss loss = loss_function(y_batch, y_pred) return loss
三、小批量梯度下降法的優點和缺點
1、優點:
(1)相對於梯度下降法,小批量梯度下降法更快,內存消耗更少,更適合大規模數據集的訓練;
(2)相對於隨機梯度下降法,小批量梯度下降法更穩定,更容易找到全局最優解;
(3)由於小批量梯度下降法使用了一部分數據,因此可以獲得比隨機梯度下降法更準確的梯度,從而更快地收斂。
2、缺點:
(1)需要調整batch size的大小,太小容易增加噪聲,太大會佔用過多的內存;
(2)需要調整學習率(learning rate)的大小,太小可能導致收斂過慢,太大可能導致震蕩不收斂;
(3)需要對數據進行shuffle,否則容易陷入局部最優解。
四、小批量梯度下降法的應用
1、小批量梯度下降法是深度學習中最常用的優化算法之一,廣泛應用於神經網絡的訓練;
2、小批量梯度下降法也可以應用於其他機器學習領域,如線性回歸、邏輯回歸、支持向量機等;
3、小批量梯度下降法的變種還有動量梯度下降法、Adam等,它們在小批量梯度下降法的基礎上加入了一些優化技巧,可以獲得更好的性能。
原創文章,作者:SSNSG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/349483.html