从头实现自动微分:PyTorch如何在物理信息神经网络中计算梯度
本文通过一个1-3-3-1多层感知机和初值问题y'(t)+y(t)=0, y(0)=1,详细追踪了PyTorch自动微分引擎在物理信息神经网络训练中的完整计算流程,包括前向计算图构建、反向传播计算22个参数梯度,以及通过create_graph=True实现基于物理残差的正确微分的图上图机制。所有伴随值均与Tahimi(2026)的手工推导核对,将P/Q敏感性框架与PyTorch的向量-雅可比积联系起来。
本文是一篇教育性教程,详细解析了PyTorch自动微分引擎如何在物理信息神经网络(PINN)训练中计算梯度。PINN训练需要两个层次的微分:首先通过网络计算物理导数ŷ'(t)=dŷ/dt,然后计算依赖于ŷ'(t)的损失函数对参数的梯度∇θL。作者采用一个1-3-3-1多层感知机,并求解初值问题y'(t)+y(t)=0, y(0)=1,逐步追踪了完整的微分流水线。文章首先描述了前向传播过程中计算图的构建,随后展示了反向传播如何通过一次遍历计算出全部22个参数梯度。重点在于解释create_graph=True这一关键参数,它启动图上图机制,使得基于物理残差的损失函数能够被正确微分。每一处的伴随值(adjoint)都与Tahimi(2026)的手工推导进行了数值验证,从而将P/Q敏感性框架与PyTorch autograd引擎实际使用的向量-雅可比积(VJP)联系起来。全文共25页,包含9幅计算图和分析图表,适合希望深入理解自动微分底层实现的读者。这篇文章不仅解释了理论,还提供了完整的数值计算示例,使读者能够逐节点跟踪计算过程。通过使用一个具体的简单ODE问题,作者清晰地展示了从网络输出到损失函数再到参数梯度的完整链式法则应用。对于希望将自动微分应用于科学计算和物理模拟的研究人员来说,这是一份宝贵的教学资源。