梯度下降和随机梯度下降的区别 给出代码案例
时间: 2024-11-25 22:32:53 浏览: 5
基于Jupyter实现梯度下降案例(python)
梯度下降和随机梯度下降都是优化算法,在机器学习中用于最小化损失函数。它们的主要区别在于更新策略:
1. **梯度下降** (Batch Gradient Descent):
- 它在每次迭代时会计算整个训练集或全部数据点的梯度。
- 全局视角,每个步骤都尽可能接近全局最优解,但计算量大,对于大规模数据集可能导致训练速度慢。
- 代码示例(Python,使用scikit-learn库简化表示):
```python
def batch_gradient_descent(model, X, y, learning_rate, num_epochs):
for epoch in range(num_epochs):
gradients = compute_gradients(model, X, y)
model.update(gradients, learning_rate)
```
2. **随机梯度下降** (Stochastic Gradient Descent, SGD) 或 **小批量梯度下降** (Mini-Batch Gradient Descent):
- 使用单个数据点或一小部分数据点的梯度进行更新,每次迭代速度快。
- 局部视角,更新更频繁,可能陷入局部最优,但对大规模数据来说更为高效。
- 代码示例(简化版):
```python
def stochastic_gradient_descent(model, X, y, learning_rate, batch_size, num_epochs):
for epoch in range(num_epochs):
shuffled_indices = np.random.permutation(len(X))
for i in range(0, len(X), batch_size):
batch_indices = shuffled_indices[i:i+batch_size]
gradients = compute_gradients(model, X[batch_indices], y[batch_indices])
model.update(gradients, learning_rate)
```
阅读全文