SheepNav
新上线今天0 投票

从零实现自动微分:PyTorch 如何为物理信息神经网络计算梯度

arXiv 最新发布了一篇教育性论文(arXiv:2607.13042),由 Abdeladhim Tahimi 撰写,详细拆解了 PyTorch 自动微分引擎在物理信息神经网络(PINN)训练中的完整工作流程。这篇论文以1-3-3-1 多层感知机和常微分方程初值问题 $y'(t)+y(t)=0, y(0)=1$ 为例,用显式数值一步步追踪了从计算图构建到反向传播的每一个节点,特别解释了处理“双重微分”需求的 create_graph=True 机制。

为什么要关注双重微分?

在标准神经网络训练中,我们只需要对损失函数求一次参数梯度。但在 PINN 中,损失函数本身包含物理残差项——例如 $\hat{y}'(t) + \hat{y}(t)$,其中 $\hat{y}'(t)$ 是网络输出对输入的导数。这意味着:

  1. 首先需要通过自动微分计算 $\hat{y}'(t)$(物理导数);
  2. 再对包含 $\hat{y}'(t)$ 的损失求参数梯度 $\nabla_\theta L$。

这就形成了“图上有图”的嵌套结构。论文用实际数值展示了 PyTorch 如何在一次反向传播中高效计算全部 22 个参数梯度,并验证了每个伴随值(adjoint value)与手动推导结果一致。

计算图与 VJP 的直观连接

论文的一大亮点是将 PyTorch 的向量-雅可比积(VJP)机制与 Tahimi 先前提出的 $P/Q$ 敏感性框架联系起来。通过逐节点解析计算图,读者可以清晰地看到:

  • 前向传播如何构建包含物理导数的计算图;
  • 反向传播如何利用链式法则逐层传播梯度;
  • create_graph=True 时,PyTorch 如何保留高阶导数所需的计算图结构,从而实现对损失函数中已含导数项的再次求导。

谁适合阅读这篇论文?

这篇论文定位为教育性教程,包含完整的数值推导和计算图分析,适合:

  • 希望深入理解自动微分底层机制的研究者和学生;
  • 正在使用或计划使用 PINN 解决物理问题的开发者;
  • 对 PyTorch autograd 引擎实现细节感兴趣的机器学习工程师。

论文提供了可复现的数值示例,即使没有深厚数学背景的读者也能跟随步骤理解核心概念。

小结

在 AI for Science 日益兴起的今天,PINN 已成为求解偏微分方程的重要工具。这篇论文填补了从理论到实践之间的细节空白——它不只是一篇算法描述,更像是一份可交互的调试日志,让开发者看清梯度计算的每一个“齿轮”如何转动。如果你曾因 create_graph=True 报错而困惑,或者想确认自己的手算结果与框架是否一致,这篇论文值得一读。

延伸阅读

  1. 数字监控重塑印尼渔业执法:从船舶追踪到算法执法
  2. AI警察帝国:科技公司如何向执法部门兜售“未来警务”
  3. 电网运营商考虑为数据中心引入高压直流供电
查看原文