全批量梯度下降:
# 全批量梯度下降示例
for epoch in range(num_epochs):
l = loss(net(features, w, b), labels) # 使用全数据集计算损失
l.backward() # 计算梯度
sgd([w, b], lr, 1) # 更新参数,batch_size 设为 1(不使用)
在这种情况下,梯度计算(backward)的结果已经是全数据集的平均值,因此在参数更新时不需要再除以批量大小。
小批量梯度下降:
# 小批量梯度下降示例
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) # 更新参数
因此,在不同的梯度下降方法中,是否需要除以批量大小取决于您所采用的方法。如果使用全批量,您直接计算整体数据的平均梯度;如果使用小批量,则需要处理和标准化每个小批量的影响。