全批量梯度下降与小批量梯度下降

  1. 全批量梯度下降:

    # 全批量梯度下降示例
    for epoch in range(num_epochs):
        l = loss(net(features, w, b), labels)  # 使用全数据集计算损失
        l.backward()  # 计算梯度
        sgd([w, b], lr, 1)  # 更新参数,batch_size 设为 1(不使用)
    
    

    在这种情况下,梯度计算(backward)的结果已经是全数据集的平均值,因此在参数更新时不需要再除以批量大小。

  2. 小批量梯度下降:

    # 小批量梯度下降示例
    for epoch in range(num_epochs):
        for X, y in data_iter(batch_size, features, labels):  # 小批量
            l = loss(net(X, w, b), y)  # 计算小批量损失
            l.sum().backward()  # 计算梯度
            sgd([w, b], lr, batch_size)  # 更新参数
    
    

总结

因此,在不同的梯度下降方法中,是否需要除以批量大小取决于您所采用的方法。如果使用全批量,您直接计算整体数据的平均梯度;如果使用小批量,则需要处理和标准化每个小批量的影响。