📅  最后修改于: 2023-12-03 15:32:54.933000             🧑  作者: Mango
小批量梯度下降(mini-batch gradient descent)是机器学习中常用的一种优化算法,它可以有效地在训练大规模神经网络时优化模型参数。与传统的批量梯度下降算法相比,小批量梯度下降具有更快的收敛速度和更好的泛化能力。本文将介绍 Python 实现小批量梯度下降算法的基本思路和方法。
小批量梯度下降算法的基本思路是根据给定的损失函数(loss function),利用梯度下降算法来不断更新模型参数,使得损失函数达到最小值。在这个过程中,我们不是利用全部的数据进行更新,而是随机选择一小部分数据(比如 32 个样本)来计算梯度,然后利用这个梯度进行参数更新。这种方法既减小了计算复杂度,又能够使得模型更快地收敛。
下面是 Python 实现小批量梯度下降算法的基本方法:
import numpy as np
import random
def minibatch_gradient_descent(X, y, learning_rate=0.01, batch_size=32, num_epochs=100):
'''
X: 输入特征,维度为 (num_samples, num_features)
y: 输出标签,维度为 (num_samples, )
learning_rate: 学习率
batch_size: 每次更新参数时,选取的样本数
num_epochs: 更新参数的总次数
return:
thetas: 更新后的参数,维度为 (num_features, )
'''
# 初始化模型参数
num_samples, num_features = X.shape
thetas = np.zeros(num_features)
# 循环更新参数
for epoch in range(num_epochs):
# 随机选择一小部分样本
minibatch_indices = random.choices(range(num_samples), k=batch_size)
minibatch_X = X[minibatch_indices, :]
minibatch_y = y[minibatch_indices]
# 计算损失函数梯度
predictions = np.dot(minibatch_X, thetas)
errors = predictions - minibatch_y
gradient = np.dot(minibatch_X.T, errors) / batch_size
# 更新参数
thetas -= learning_rate * gradient
return thetas
在这个方法中,我们首先初始化模型参数 $\theta$(通常设置为全 0 向量)。然后,我们根据指定的更新次数循环进行更新:每次循环会从训练数据集中随机选择一小部分样本(大小为 batch_size
),并计算它们的梯度。然后,我们根据学习率和梯度来更新模型参数。最终,算法会返回更新后的参数 $\theta$。
下面是一个简单的使用示例,它演示了如何使用上述方法来训练一个简单的线性回归模型:
import numpy as np
import matplotlib.pyplot as plt
# 生成样本数据
num_samples = 1000
X = 2 * np.random.rand(num_samples, 1)
y = 4 + 3 * X + np.random.randn(num_samples, 1)
# 进行模型训练
thetas = minibatch_gradient_descent(X, y)
# 绘制数据和模型拟合结果
plt.plot(X, y, 'b.')
plt.plot(X, np.dot(X, thetas), 'r-')
plt.show()
小批量梯度下降算法是机器学习中常用的一种优化算法,它可以有效地优化神经网络模型参数,并具有更快的收敛速度和更好的泛化能力。本文介绍了 Python 实现小批量梯度下降算法的基本思路和方法,以及一个简单的使用示例。