【OA-ReactDiff】是首个生成「3D化学反应」的扩散生成模型,它不仅『加速了1000倍』的化学反应中的3D结构搜索,还可以生成和探索『全新未知』的化学反应。
在完成这个教程后,你将能够:
学习到扩散生成模型在化学和材料的一些应用和潜在的难点
了解【OA-ReactDiff】运行的原理并应用于你的项目中
阅读和跑通该教程【最多】需 20 分钟,让我们开始吧!
文章链接 👉 OA-ReactDiff
如果大家对把OA-ReactDiff应用到自己工作的想法,但不确定是不是完全合适或者不知道如何下手,欢迎联系作者段辰儒本人,duanchenru@gmail.com
©️ Copyright 2023 @ 段辰儒(Chenru Duan)
日期:2023-10-XX
共享协议:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
快速开始:点击上方的 开始连接 按钮,推荐选择 reactdiff:gpu 镜像及 c12_m92_1*NVIDIA V100 节点配置,连接之后即可运行(其余GPU节点也可,但运行速度稍慢)。如选择CPU节点,请相应选择reactdiff:cpu-demo 镜像。
全代码运行时间:1 V100 GPU: 2分钟; 32 core CPU: 8分钟
简单介绍一下扩散生成模型 (DDPM)
DDPM(Diffusion Probabilistic Models)是一种基于概率统计生成和随机噪声生成数据的扩散模型。它通过模拟一个扩散过程,将嘈杂的数据转化为干净的数据样本。
这些模型专注于建模数据的分布,并模拟从一个简单分布到更复杂分布的逐步演变过程。扩散模型的基本概念是将一个简单且易于抽样的分布,通常是高斯分布,转化为更复杂的数据分布。这个转化是通过一系列可逆操作实现的。一旦模型学习了这个转化过程,它可以通过从简单分布中的一个点开始,逐渐"逆扩散"到所需的复杂数据分布,从而生成新的样本。
DDPM模型的训练需要获取扩散过程参数的知识,有效地捕捉每个转换步骤中干净和嘈杂数据之间的关系。在生成过程中,DDPM从嘈杂数据(例如,嘈杂图像)开始,迭代地逆向应用已学到的变换,以获得去噪和逼真的数据样本。
想要上手把玩一下DDPM图像生成的小伙伴们可以参考 Notebook: Diffusion Models初探:你还是不懂扩散模型的基本原理?
图一|扩散生成模型在生成图像
拓展阅读 🔽
An Introduction to Diffusion Models for Machine Learning
Diffusion Models: A Comprehensive Survey of Methods and Applications
已经玩转了图像,那试试生成分子如何?
最近,DDPM的框架被逐渐应用在了化学分子相关的任务上。比如生成有机小分子的3D结构,蛋白-小分子对接,和基于蛋白质结构的药物设计。
分子的生成与上面的图像生成的核心区别在于他们的表示和对称性:
表示:对于NxN像素的彩色图像,一般我们用一个(N, N, 3)的张量表示,其中最后的3表示RGB三原色。而对于一个分子,我们需要使用(原子类别,坐标信息)来表示每一个原子。
对称性:在图像中,我们一般不要求严格的对称性。大家通常使用数据增强(augmentation)的方式使模型”记住“物体关于2D旋转的不变形。但是在分子中,因为我们直接学习三维的物体并且要求的精准度极高,数据增强往往会过于昂贵且不能满足精准度要求。于是,我们需要把对称性嵌入至模型之中。
图二|扩散生成模型生成单一分子的过程
生成分子时模型的SE(3)准变性不可或缺
我们在生成3D分子是需要保持分子上物理的对称性。其中一种方式就是使用具有SE(3)准变性的图网络模型。简单理解,就是对于一个分子,我们先旋转分子(D(g))再使用模型预测(f)和先用模型预测再旋转得到的结果是一样的,即
Siyuan之前有一篇对SE(3)准变性详细介绍的notebook, 希望深挖的同学们可以补充学习📚。我们这里只举一个例子给大家一个可视化的体验。
创建一个水分子作为测试体系
使用LEFTNet正向预测一个scalar和vector
随机旋转一下,再来一次
不管是scalar,还是vector, 结果都是等变的
化学的核心是反应,直接生成化学反应如何?
从古老的炼金术开始,化学一直是一门研究和控制物质之间相互反应的学科。既然已经成功实现了生成单一分子,我们为何不把目前的扩散生成模型推广到生成一组分子,比如化学中大家都关心的 「反应物,过渡态,生成物」?
图三|化学反应图示。黑线为能量曲线,「反应物, 生成物」对应极点,「过渡态」对应鞍点
带着这样的思考,我们将扩散生成推广到多体系生成。训练时,我们同时向「反应物(蓝),过渡态(黄),生成物(红)」加入噪声,并使用一个拥有特殊对称性(后面会详细描述)的图神经网络模型预测加入的三个噪声。生成时,我们开发了两种模式。
- 随机生成。这种情况下,我们直接从三个高斯分布出发,生成新的化学反应,即全新”未知的“ 「反应物,过渡态,生成物」.
- 条件生成。在化学反应中,我们通常知道部分信息。我们这里可以使用inpainting的条件生成,比如给定反应物和生成物,直接生成过渡态。这个过程中,我们每一步都将「反应物, 生成物」中加入固定噪声,并将它们与图神经网络模型预测得到的过渡态结合。一步步迭代,直到产生「反应物(“已知”),过渡态(“未知”),生成物(“已知”)」.
图四|扩散生成模型生成化学反应的过程详解
当我们旋转化学反应的任何分子,这个反应会变化吗?
在生成单一分子或者一个大的多分子体系时,我们一般只需要满足整个体系的SE(3)变化后(比如整体旋转)模型的输出对应转变(下图第二行)。
然而在化学反应中,这个对称性还不够强。反应中,我们还要求关于每个单一对象的SE(3)对称性(下图第三行)。一个简单的例子为,当我们旋转了反应物,模型的输出应当只旋转这个反应物,其余部分应当保持不变,而不是把它当做一个”全新的“反应。
图五|化学反应在不同的对称性(上)下经过不同转化(左)的行为
全体系SE(3)大失败 - 没有保持单个对象的对称性
考虑一个假想的“电解水反应”, H2O -> H2 + O.
注:这个反应过程纯属虚构,只是用来帮助我们理解反应中所需的对称性的一个简化模型。同时,我们省去了过渡态结构,只考虑「反应物,生成物」的对称性关系。加入过渡态并不不会改变结论。
在化学反应使用整体SE(3)时,我们所有的原子需要全部连接在一起,保证反应物和生成物可以通过图神经网络「相互作用」。否则的话,我们改变反应物,生成物也不会改变,问题就更大了😉
正向预测
我们旋转一下反应物
再预测一次这个反应。注意这两个反应的化学实质是一样的
但是我们scalar和vector上都丢失了等变性❌
我们在化学反应中需要”对象感知“的SE(3)模型
为了处理这个难点,从而将生成模型的框架拓展到化学反应中,我们开发了一种将SE(3)模型扩展为”对象感知“(object-aware)的SE(3)模型的普适方法,OA-ReactDiff。这个方法可以用于各种图神经网络和Transformer。
这部分比技术细节比较多,感兴趣的小伙伴可以点击我们上方的文章🔗。在这个notebook中,我们直接展示改进后的效果。
创立一个”对象感知“的LEFTNet
我们将不同原子分配到他们所属的对象中,在这里是「反应物和生成物」。
再来重复一遍刚才的旋转测试
经过检验,”对象感知“的LEFTNet会保持我们想要的对称性✅
从天到秒,OA-ReactDiff加速生成过渡态结构
在实验中,反应物和生成物存在的时间尺度相对较长,因此相对比较好表征(NMR, 质谱等等)。但是实验上表征过渡态结构很困难。因为过渡态存在时间短暂,其能量比反应物或产物更高,使得它们难以直接分离和研究。计算上,虽然大家发展了nudged elastic band等方法,但是这些方法都比较耗时,经常需要在一个24CPU的机器上跑一天,同时只有非常惨淡(30%左右)的成功率😭。
而我们文章中开发的OA-ReactDiff架构,可以将过渡态的搜索时间从几天缩短到6秒,大大加快我们探索化学反应机理的速度,成功率,和可研究化学反应网络的复杂度。我们准备了三个例子来展示OA-ReactDiff的应用场景🎬
导入预训练的模型并重新定义schedule
准备dataset和data loader并选取一个多分子参与的反应
故意将反应物的原子顺序相对于生成物打乱,并将生成物中的两个分子拉倒无限远(10 A)
对这组没有任何原子排序和几何排列的「反应物,生成物」生成过渡态结构
评测生成过渡态结构的质量
RMSD低于0.1A的两个分子的区别几乎肉眼不可区分。
图六|不同RMSD下两个分子的结构差别展示(两个分子的C原子分别有蓝色和淡黄色表示)
储存生成的过渡态并且检查它与该反应的真实过渡态的RMSD,我们的RMSD只有0.02A。
可以看到我们生成的过渡态原子序数和反应物原子序数是完全无需对应的,证明了OA-ReactDiff不需要原子排列的预处理
同时,虽然生成物由多个分子构成,也无需对它们进行特定的几何排列 (我们已经在生成前把两个分子拉到了”无穷“远)
画出我们的案例反应
从左下到右上分别对应「反应物,过渡态,和生成物」
仔细看一看过渡态结构
对于同一个反应,我们产生了多少不同的TS?
为了节省大家时间,我们已经提前使用OA-ReactDiff生成多个关于该「反应物,生产物」的过渡态结构,这个反应对应于我们文章中的图三右边的例子。
将这些生成的过渡态分类排序
计算这些过渡态之间的配对RMSD矩阵。如我们之前的对比图所见,RMSD低于「0.1」的分子的构型可以认为是一样的
通过K-Means将这些生成的过渡态根据结构分类
展示分类结果。可以清晰的看见很多过渡态结构是比较相近的(对角线上的红色方块为一个聚类)。
注:我们这里已经对RMSD做了log10处理,「-2」对应于『0.01A』, 「-1」对应于『0.1A』。
直观的总结一下不同的过渡态属于哪一个聚类(id: 『0』到『5』)
注: /opt/src/demo/example-3/opt_ts/26.ts.opt.xyz
所在的聚类对应于我们给定{反应物,生成物}的真实过渡态。
可以看到,在不同聚类的过渡态的几何结构完全不同。
我们生成的其余过渡态一文不值?
当然不是的。任意给定一个过渡态结构,都会对应一个唯一的化学反应。但是在计算当中,受限于个人的经验或者计算的方法,每个人所能探索的化学反应也是局限的
这种限制在研究未知的复杂反应时尤为致命。它会使我们忽略到一些潜在可能发生的反应,导致会反应机理的误判,进而影响催化材料设计的思路。赵祺源博士的一篇文章深入探索了这些现象,感兴趣的小伙伴可以深入了解。
在我们这个例子中,OA-ReactDiff除了找到了我们想要的那个反应的过渡态,同时由于随机过程的特点,还探索到了相关的五个“意外的”化学反应。这个特点可以弥补现有基于化学的直觉反应探索框架😄
比如我们生成的下面这个反应就是意料之外的全新反应。
随机生成反应
强烈建议大家使用V100 GPU机器执行此步(运行需30秒)。不然的话,可能会花费10分钟左右时间。大家可以给自己泡一杯🍵或者做做俯卧撑。
将生成的结果保存成xyz文件形式
随机画一个生成的反应
分析反应结果
找出独特不重复的稳定分子
我们这里只考虑稳定的(即非自由基等等)的分子
大家可以自己罗列一下,看看这里产生的分子是不是涵盖了所有的CONH四原子的稳定分子?😁
现在来画出这其中的一个分子
独特的反应路径
我们这里只分析稳定的分子之间的反应
所有的CNOH四原子稳定反应如下:
最后选取一个看一下这个反应是不是化学上合理的😄
展望: 让我们”生成“未来
化学材料发现的一个巨大挑战在于其巨大()的潜在设计空间。这个空间大到我们把NVIDIA所有的显卡买下来,耗尽全球的发电量也没有办法遍历。生成式AI绕过了筛选材料空间的困难,直接生成潜在有价值的分子和材料,带给了材料发现新的可能。
扩散生成模型在化学材料方面的拓展还处在初期萌芽阶段。如果大家对把OA-ReactDiff应用到自己问题的想法,但不确定是不是完全合适或者不知道如何下手,欢迎联系作者本人duanchenru@gmail.com👏🏻
量子御坂
段辰儒
1934152182@qq.com