梯度下降是机器学习中常用的优化算法,用于寻找函数的最小值点。它的基本思想是:沿着函数的梯度方向移动,逐渐逼近最优解。
常见的梯度下降算法有:
- 普通梯度下降:每次迭代移动步长为一个固定值。简单但收敛慢。
- 随机梯度下降:每次迭代仅使用一部分数据计算梯度,可以处理大数据集。
- 批量梯度下降:每次迭代使用整个训练集计算梯度,稳定但 computationally 昂贵。
- 动量梯度下降:考虑上一时刻的梯度方向,加速收敛并稳定路径。
- AdaGrad:自适应调整每个特征的学习率,处理不同尺度特征。
- RMSprop:修正AdaGrad的一些缺点,使其更稳定和快速。
- Adam:结合Momentum和RMSprop的优点,是深度学习中常用的优化算法。
代码示例:
普通梯度下降:
python
learning_rate = 0.1
for epoch in range(100):
pred = model(x_train) # 获取预测值
loss = loss_fn(pred, y_train) # 计算损失
loss.backward() # 反向传播计算梯度
model.weight -= learning_rate * model.weight.grad # 梯度下降更新参数
model.zero_grad() # 梯度清零
随机梯度下降:
python
batch_size = 32
n_batches = len(x_train) // batch_size
for epoch in range(100):
for batch in range(n_batches):
pred = model(x_train[batch*batch_size:(batch+1)*batch_size])
loss = loss_fn(pred, y_train[batch*batch_size:(batch+1)*batch_size])
loss.backward()
model.weight -= learning_rate * model.weight.grad
model.zero_grad()
Adam:
python
optimizer = torch.optim.Adam(model.parameters(), lr=0.1, betas=(0.9, 0.999))
for epoch in range(100):
pred = model(x_train)
loss = loss_fn(pred, y_train)
loss.backward()
optimizer.step() # 使用Adam更新参数
optimizer.zero_grad()
梯度下降算法是机器学习中最基本和最重要的算法之一。掌握不同梯度下降算法的原理和特点,可以帮助我们训练出更优的机器学习模型。