自动微分技术在 AI for science 中的应用

frank_haha 2024-06-25 14:31:03 阅读 100

本文简记我在学习自动微分相关技术时遇到的知识点。

反向传播和自动微分

以 NN 为代表的深度学习技术展现出了强大的参数拟合能力,人们通过堆叠固定的 layer 就能轻松设计出满足要求的参数拟合器。

例如,大部分图神经网络均基于消息传递的架构。在推理阶段,用户只需给出分子坐标及原子类型,就能得到整个分子的性质。因此其整体架构与下图类似:

img

在模型设计阶段,我们用 pytorch 即可满足大部分需求,以 schnetpack 为例:

我们 from torch import nn 导入了设计 nn 常用的模块。在初始化模型时,我们直接继承了 pytorch 内置的模块 class AtomisticModel(nn.Module)有一些函数是重新编写的,例如激活函数 shiftedsoftplus

我们可以看到,模型的整体框架依然是基于 pytorch 的,但针对具体的应用场景,我们做了很多优化。

一方面,使用 pytorch 可以帮助我们快速建立类似上图的模型网络,pytorch 会自动执行梯度的反向传播。从 loss function 开始,逐层递进直至输入层。pytorch 还会帮助我们完成整个网络的参数迭代,学习率的迭代等等。。。

另一方面,针对一些特殊的需求,用户需要自行 DIY,完成需要的功能。

这其中隐含着,用户在程序设计时灵活性与便利性之间的折中。

注意到,刚才提到了梯度的反向传播,事实上,这种常用算法只是自动微分算法中的一种。引用 Gemini 的一个例子:

反向传播好像是计算小山丘斜率(仅限于 NN)的一种算法;自动微分则可以计算除了小山丘以外的所有物品的斜率(涵盖所有链式求导法则);

写到这里,自动微分技术的应用场景就很好理解了:

有一些应用场景不适合无脑堆叠 NN,但仍然需要优化参数,此时 from torch import nn 就不管用了,套用固定模版已经很难带来便利性;由于整个网络的框架已经不再是上图所示,规整的一层层的 NN 结构,反向传播算法就不再适用于参数优化了,需要更加灵活的自动微分方法;

pytorch 与 jax

我们可以将参数优化的相关框架归结为两个应用场景:

用户调用标准函数,搭建层级式标准 NN;用户自行设计函数,搭建非标准拟合器(仍需优化参数)

针对第一个场景,我们可以使用 pytorch,因为 pytorch 对常用网络架构封装很好。

针对第二个场景,使用 pytorch 会更加繁琐,此时可以切换为 jax ,因为 jax 对用户自定义函数形式更加友好,其内置自动微分算法使用起来更加方便。

除了应用场景的区别外,二者还有以下几个区别:

pytorch 支持静态/动态计算图,而 jax 仅支持静态图pytorch debug 起来更加方便jax 针对 GPU, TPU 等硬件优化更多,结合其 JIT(Just In Time) 特性,jax 模型一般比 pytorch 模型快得多二者间的相互转换难度不大(参见:一文打通PyTorch与JAX)

AI for Science 领域内三个应用案例

DMFF

余旷老师在他的系列博文里系统阐释了为什么 DMFF 要基于 jax 开发(参见:漫谈分子力场、自动微分与DMFF项目:4. DMFF和JAX概述)

总结一下,使用 jax 的原因有以下几点:

传统分子力场的形式不适合用 NN 建模

为方便大家理解,我举一个中学物理的例子。苹果从树上落下,遵从自由落体运动,位移随时间变化的规律:h=1/2 * g * t^2, 其中 g 作为引力常数就是需要通过多次落体实验测定的量。我们当然可以用多层 NN 拟合这一参数,但假如我们已经知道了这样一个表达式,此时直接使用该表达式即可。传统分子力场就是高度参数化的方程,发展至今已经有了一套函数形式,无需从头用 NN 的形式拟合 反向传播算法只适用与 NN,不适应上述高度参数化的方程,但优化力场参数仍需要自动微分技术

计算原子受力,整个盒子的维里均需要微分技术,使用 jax 编程会更加方便 jax 性能更高,速度快jax 可拓展性好

余旷老师在 漫谈分子力场、自动微分与DMFF项目:5. DMFF中势函数的生成和拓展 举了一个例子,使用 DMFF 能有效复用前人开发势函数模块,无需从头造轮子

E3x

在 Oliver T. Unke 近期的一篇论文中,作者介绍了名为 E3x 的神经网络框架,对标 pytorch_geometric。

其目的在于,方便用户设计具有 E3 等变性的图神经网络。

使用 E3x 能将所有 AI for Science 领域的 GNN 从 pytorch 迁移至 jax 框架,再结合 jax-MD,获得大幅性能提升。

作者在另一篇论文中透露了这种改造的效果:

请添加图片描述

在稳定性和受力误差不变的情况下,NequIP 提速 28 倍,SchNet 提速 15 倍。那么,E3x 做了哪些关键改动呢?

e3x 对不可约张量进行了压缩,降低了其稀疏性

请添加图片描述

e3x 设计了开箱即用的激活函数,全连接层、张量层等,这些网络结构都是 E3 等变的

DLDFPT

神经网络与密度泛函围绕理论的结合,论文地址

这是李贺大神今年上半年的一篇 PRL,说实话,我也没看懂。我只是理解到:

传统的 DFPT 理论在计算某一个矩阵的时候遇到了计算瓶颈;使用自动微分技术能绕开这一瓶颈



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。