You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradient Descent(梯度下降)过程中展示误差的演化情况?

梯度下降过程中误差演化的记录与展示

要在梯度下降过程中展示误差的变化,核心是记录每一步的损失值,之后通过绘图工具可视化即可。以下是针对你的R语言PyTorch代码的修改方案:

方案1:记录每个batch的损失(细致观察波动)

直接在每个batch计算损失后,将损失值存入历史列表,最后绘制完整的迭代损失曲线:

x <- df_tensor[,4,drop=FALSE]
y <- df_tensor[,1,drop=FALSE]

my_model <- nn_linear(1,1)

ds <- tensor_dataset(x, y)
dl <- dataloader(ds)

optimiser <- optim_sgd(my_model$parameters, lr = 0.01)
loss <- nnf_mse_loss

# 初始化损失历史容器
loss_history <- c()

for (e in 1:10) {
  coro::loop(for (b in dl) {
    y_pred <- my_model(b[[1]])
    
    c_loss <- loss(y_pred, b[[2]])
    # 将当前batch的损失值转为R数值并存入历史
    loss_history <- c(loss_history, as.numeric(c_loss))
     
    optimiser$zero_grad()
    c_loss$backward()
    optimiser$step()
  })
}

# 绘制损失演化曲线
plot(loss_history, type = "l", xlab = "迭代步数", ylab = "MSE损失", main = "梯度下降过程中损失变化")

方案2:记录每个epoch的平均损失(观察整体趋势)

如果想更清晰地看每一轮训练的整体损失变化,可以计算每个epoch的平均损失,曲线会更平滑:

x <- df_tensor[,4,drop=FALSE]
y <- df_tensor[,1,drop=FALSE]

my_model <- nn_linear(1,1)

ds <- tensor_dataset(x, y)
dl <- dataloader(ds)

optimiser <- optim_sgd(my_model$parameters, lr = 0.01)
loss <- nnf_mse_loss

# 初始化epoch级损失历史容器
epoch_loss_history <- c()

for (e in 1:10) {
  total_loss <- 0
  batch_num <- 0
  
  coro::loop(for (b in dl) {
    y_pred <- my_model(b[[1]])
    
    c_loss <- loss(y_pred, b[[2]])
    total_loss <- total_loss + as.numeric(c_loss)
    batch_num <- batch_num + 1
     
    optimiser$zero_grad()
    c_loss$backward()
    optimiser$step()
  })
  
  # 计算当前epoch的平均损失并记录
  avg_loss <- total_loss / batch_num
  epoch_loss_history <- c(epoch_loss_history, avg_loss)
  # 控制台打印每轮损失
  cat(sprintf("第%d轮训练,平均损失:%.4f\n", e, avg_loss))
}

# 绘制epoch级损失曲线
plot(1:10, epoch_loss_history, type = "l", xlab = "训练轮次(Epoch)", ylab = "平均MSE损失", main = "每轮训练平均损失变化")

可选:用ggplot2美化曲线

如果需要更美观的可视化效果,可以使用ggplot2包:

library(ggplot2)

# 针对batch级损失
loss_df <- data.frame(
  step = 1:length(loss_history),
  loss = loss_history
)

ggplot(loss_df, aes(x = step, y = loss)) +
  geom_line(color = "#2E86AB") +
  labs(x = "迭代步数", y = "MSE损失", title = "梯度下降过程中损失演化") +
  theme_minimal()

# 针对epoch级损失
epoch_loss_df <- data.frame(
  epoch = 1:10,
  avg_loss = epoch_loss_history
)

ggplot(epoch_loss_df, aes(x = epoch, y = avg_loss)) +
  geom_line(color = "#D81E5B") +
  labs(x = "训练轮次(Epoch)", y = "平均MSE损失", title = "每轮训练平均损失演化") +
  theme_minimal()

内容的提问来源于stack exchange,提问作者Gaspard_Boyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:55:16