小批量随机梯度下降算法代码
时间: 2024-10-07 07:00:20 浏览: 16
小批量随机梯度下降(Stochastic Gradient Descent, SGD)是一种优化算法,常用于机器学习中训练模型,特别是处理大规模数据集。它的核心思想是在每一步更新模型参数时,只使用部分样本来计算梯度,而不是整个数据集。
下面是一个简单的Python实现,使用了NumPy库:
```python
import numpy as np
def sgd(weights, gradients, learning_rate, batch_size):
# weights: 模型参数
# gradients: 当前批次样本的梯度
# learning_rate: 学习率
# batch_size: 批次大小
for i in range(0, len(gradients), batch_size): # 遍历每个批次
# 计算当前批次的平均梯度
avg_gradient = gradients[i:i+batch_size].mean(axis=0)
# 更新权重
weights -= learning_rate * avg_gradient
return weights
# 示例
initial_weights = np.random.randn(2) # 初始化权重
data = ... # 假设这是你的数据和对应的目标值
gradients = calculate_gradients(initial_weights, data) # 根据数据计算梯度
for _ in range(num_epochs): # 迭代次数
shuffled_indices = np.random.permutation(len(data)) # 随机打乱数据索引
batches = np.array_split(shuffled_indices, num_batches) # 划分批次
for batch_idx in batches:
batch_data = data[batch_idx] # 获取当前批次的数据
gradients_batch = calculate_gradients(initial_weights, batch_data) # 计算梯度
initial_weights = sgd(initial_weights, gradients_batch, learning_rate, batch_size)
```
在这个例子中,`calculate_gradients`函数负责计算给定权重下的一批数据的梯度。注意,这只是一个简化版本,实际应用中可能需要更复杂的逻辑,比如动量、指数移动平均等技巧来改进性能。