什么是梯度下降?有哪些常见的梯度下降算法?代码举例讲解

梯度下降是机器学习中常用的优化算法,用于寻找函数的最小值点。它的基本思想是:沿着函数的梯度方向移动,逐渐逼近最优解。

常见的梯度下降算法有:

  • 普通梯度下降:每次迭代移动步长为一个固定值。简单但收敛慢。
  • 随机梯度下降:每次迭代仅使用一部分数据计算梯度,可以处理大数据集。
  • 批量梯度下降:每次迭代使用整个训练集计算梯度,稳定但 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()

梯度下降算法是机器学习中最基本和最重要的算法之一。掌握不同梯度下降算法的原理和特点,可以帮助我们训练出更优的机器学习模型。