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

从零实现MNIST神经网络:Gradient descent 3D可视化需求问询

Loss Landscape 3D可视化实现步骤

1. 高维参数降维处理

你的模型参数总维度达784128 + 12810 + 128 + 10 = 102,506,直接做3D可视化不现实,必须先将高维参数投影到2D平面:

  • 把所有参数(W1、W2、b1、b2)flatten成一维向量params_vec,每个训练步骤对应一个该向量
  • 选择降维方案:
    • PCA降维:对训练过程中保存的所有params_vec做PCA,提取前2个主成分作为投影的x、y轴,能最大程度保留参数变化的核心方向
    • 随机方向投影:随机生成两个正交高维向量作为基,将每个params_vec投影到这两个基上得到x、y值(适合快速验证,但可能无法捕捉参数变化的主要趋势)

2. 生成Loss Landscape基底网格

确定投影方向后,绘制目标区域的loss分布:

  • 划定投影范围:根据训练轨迹的投影结果,取x、y轴的最小/最大值,再向外扩展10%-20%,确保覆盖轨迹及周边区域
  • 生成网格点:用np.meshgrid生成均匀分布的x、y网格(比如50x50密度)
  • 还原高维参数:将网格点的(x,y)映射回高维参数空间(如PCA逆变换、随机基线性组合),叠加初始参数偏移,保证网格聚焦在轨迹附近
  • 计算网格点loss:固定用MNIST验证集(或训练集子集)计算每个网格点对应参数的损失值,作为z轴数值

3. 训练轨迹投影转换

对保存的每一步参数执行相同降维操作:

  • 每个训练步骤的params_vec通过同一投影方法,得到对应的(x,y)坐标
  • 同步记录该步骤的loss值,作为轨迹的z坐标

4. 3D可视化绘制

用Python可视化工具实现:

  • Matplotlib:用plot_surface绘制loss landscape的3D曲面,用plot3D绘制训练轨迹(可按训练步数递增设置颜色渐变,比如从蓝到红),添加坐标轴标签(x: 主成分1/随机方向1,y: 主成分2/随机方向2,z: Loss)
  • Plotly:生成交互式3D图,方便旋转查看细节,用Surface绘制曲面,Scatter3d绘制轨迹,支持hover显示每一步的步数与loss值

关键注意事项

  • 计算网格点loss时,建议用小批量数据或验证集子集,降低计算量
  • 若用PCA,需用所有训练参数拟合PCA模型,不能仅取部分步骤数据
  • 轨迹绘制可每隔N步取一个点,避免点过多导致图形杂乱
  • 给loss landscape添加颜色映射,用颜色区分loss高低,提升直观性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:44:50