一、什么是小批量梯度下降法
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等,它们在小批量梯度下降法的基础上加入了一些优化技巧,可以获得更好的性能。