16-03 比较优化器
题目
保留同一数据划分与初始化,分别用 SGD 和 Adam 训练,记录训练与验证曲线,再按相同指标解释差异。
推导与做法
SGD 与 Adam 都从相同种子、相同 Linear 参数和同一训练/验证划分开始。训练时只对前十二项反向传播,后八项仅计算验证损失。
题解保存每轮 train、validation,并绘制 optimizer-curves.svg。比较同一轮数与同一 MSE,观察下降速度及训练/验证差距;某一次曲线更低只说明这组参数和数据下的结果,不直接推出优化器永远更好。
实现与运行
查看带注释实现。本题与相关处理函数放在同一章节代码文件中;启动工具负责定位相邻项目和选择题号。
在配套目录的 PyTorch与模型开发/training_project 中运行。先按项目 README 执行 uv sync --locked。接口题先安装 serve 可选项:uv sync --locked --extra serve。
# 使用项目解释器运行本题,题号决定执行哪一组演示。
uv run python "../../学习索引/参考实现/代码/ch16.py" 16-03
程序按题号输出处理后的值、查询结果或状态。先和前面的手算比较,再修改一项输入重跑。
查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
{
"SGD": {
"first": {
"epoch": 1,
"train": 1.115538239479065,
"validation": 7.366790771484375
},
"last": {
"epoch": 40,
"train": 0.11448212713003159,
"validation": 1.0389423370361328
}
},
"Adam": {
"first": {
"epoch": 1,
"train": 1.115538239479065,
"validation": 7.993734836578369
},
"last": {
"epoch": 40,
"train": 0.008718016557395458,
"validation": 0.08351005613803864
}
}
}