Mini-batch梯度下降是梯度下降法的一种改进版本,它通过每次迭代使用数据集的一个小批量(mini-batch)样本来更新模型参数,从而在训练过程中更加高效。相比于批量梯度下降,mini-batch梯度下降在大型数据集上的训练速度更快,并且相对于随机梯度下降,其收敛过程更为稳定。
数据准备: 将整个训练数据集分成多个小批量(mini-batch)。
初始化参数: 初始化模型的参数(权重和偏置)。
迭代训练: 对于每个小批量,计算梯度并使用梯度来更新模型参数。
重复步骤3: 重复上述步骤,直到达到指定的迭代次数或达到收敛条件。
评估模型: 使用验证集或测试集评估模型性能。
更快的训练速度: 由于每次迭代使用的是小批量数据,相较于批量梯度下降,训练速度更快。
更好的泛化性能: 相较于随机梯度下降,mini-batch梯度下降的更新过程更为平滑,有助于模型达到更好的泛化性能。
适用于大型数据集: 可以处理大型数据集,不需要将整个数据集加载到内存中。
import numpy as np
def mini_batch_gradient_descent(X, y, learning_rate=0.01, batch_size=32, epochs=100):
m, n = X.shape
theta = np.zeros((n, 1)) # 初始化参数
num_batches = m // batch_size
for epoch in range(epochs):
# 打乱数据集
indices = np.random.permutation(m)
X_shuffled = X[indices]
y_shuffled = y[indices]
for i in range(num_batches):
# 获取一个小批量数据
start_idx = i * batch_size
end_idx = (i + 1) * batch_size
X_batch = X_shuffled[start_idx:end_idx]
y_batch = y_shuffled[start_idx:end_idx]
# 计算梯度
gradient = (1 / batch_size) * X_batch.T.dot(X_batch.dot(theta) - y_batch)
# 更新参数
theta = theta - learning_rate * gradient
return theta
# 示例用法
# 假设X和y是训练数据
# X = ...
# y = ...
# 使用mini-batch梯度下降训练模型
# trained_parameters = mini_batch_gradient_descent(X, y)
在这个例子中,mini_batch_gradient_descent
函数接受训练数据 X 和标签 y,以及一些超参数(学习率、批量大小、迭代次数等)。它返回训练得到的模型参数。在每个迭代中,数据集被打乱并分成小批量,然后使用每个小批量来更新模型参数。这个过程重复进行指定的迭代次数。