Mini-Batch梯度下降

2023-12-17 22:28:06

Mini-batch梯度下降是梯度下降法的一种改进版本,它通过每次迭代使用数据集的一个小批量(mini-batch)样本来更新模型参数,从而在训练过程中更加高效。相比于批量梯度下降,mini-batch梯度下降在大型数据集上的训练速度更快,并且相对于随机梯度下降,其收敛过程更为稳定。

下面是使用Mini-batch梯度下降的基本步骤:

  1. 数据准备: 将整个训练数据集分成多个小批量(mini-batch)。

  2. 初始化参数: 初始化模型的参数(权重和偏置)。

  3. 迭代训练: 对于每个小批量,计算梯度并使用梯度来更新模型参数。

  4. 重复步骤3: 重复上述步骤,直到达到指定的迭代次数或达到收敛条件。

  5. 评估模型: 使用验证集或测试集评估模型性能。

Mini-batch梯度下降的优点包括:

  • 更快的训练速度: 由于每次迭代使用的是小批量数据,相较于批量梯度下降,训练速度更快。

  • 更好的泛化性能: 相较于随机梯度下降,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,以及一些超参数(学习率、批量大小、迭代次数等)。它返回训练得到的模型参数。在每个迭代中,数据集被打乱并分成小批量,然后使用每个小批量来更新模型参数。这个过程重复进行指定的迭代次数。

文章来源:https://blog.csdn.net/weixin_54703767/article/details/135050755
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。