编译 | 刘名权 审稿 | 夏忻焱
本文介绍一篇来自比利时Switch实验室的Joost Schymkowitz和Frederic Rousseau发表在Nature Communication上的文章《PyUUL provides an interface between biological structures and deep learning algorithms》。由于生物学结构和机器学习方法之间缺少接口,使得现代神经网络(NN)架构在结构生物信息学中很难得到应用。这阻碍了基于结构的生物信息学方法的发展,导致生物学研究出现瓶颈。作者提出了PyUUL库,它能将生物学结构转化为三维张量,从而能让先进的深度学习(DL)算法利用其工作。PyUUL将生物学大分子转换为计算机视觉领域中典型的数据结构,例如体素和点云。除此之外,PyUUL允许GPU的使用和稀疏计算。最后,作者展示了如何使用PyUUL来解决典型的生物信息学问题,例如结构识别和对接。
1
介绍
先进的ML算法在结构生物学和生物信息学的应用过程是缓慢的,这意味着ML领域的前沿成果和其它使用ML的领域之间存在着技术差距。AlphaFold和RoseTTA在蛋白质折叠预测上的惊人成果展示出DL在生物学和生物物理学问题上取得了关键突破。
具体的,将ML运用到蛋白质预测是这种技术性差距的一个方面。大部分现有的基于结构的计算方式仅间接地使用了可用的结构信息(也就是PDB结构)。例如统计势,然后将统计势输入到传统的ML方法(支持向量机、随机森林、多层感知机)中。这是次优的解决方式,因为一些重要的结构信息可能不能被统计势捕获而被不小心丢失。尽管如此,研究者们不得不采用这种方式,原因是(1)缺少工具无缝地将表示三维大分子结构的复杂结构转化为适合ML方法的格式;(2)相对于传统的一维特征向量,传统的ML方法对复杂结构化的输入数据处理并不灵活。
由于大量开源库的存在,研究者们可以通过将任意复杂维的张量结构作为输入来对任意给定的问题建立临时的模型,从而解决所提到的传统ML方式的方法论限制。然而将深度学习方法运用到结构生物学这一过程仍存在缺口:缺少一种将原始的3D大分子结构从PDB结构转换为可直接作为近期的NN架构(包括3D卷积神经网络、Transformer)输入特征的工具。在这篇论文中,作者提出PyUUL用于处理生物分子(蛋白质、药物、核酸)的3D结构,将它们转换为可微的、ML-ready的张量表示,例如体积网格或者点云。转换过程对于用户来说是完全透明的,因而掩盖了3D结构的内在复杂性。此外,PyUUL遵循端对端的方式,意味着它可以作为NN的内部组件并允许反向传播梯度经它流通。
2
结果
PyUUL支持多种结构表示
PyUUL在生物学结构和DL算法中提供一个接口。用户可以在多种生物结构的张量表示(基于体素、表面点云、体积点云)中进行选择(如图1A所示)。基于体素的表示方法:每一个大分子表示为一个三维盒子,其中体素(3D像素)大小都是由用户进行定义(分辨率)。每个原子可以用用当前区域的球进行描述,球的半径和原子半径相关。同图片的红绿蓝类似,体素也包含多个通道,每个通道指定了一个特定原子类型的密度;表面点云表示方法:在大分子表面进行采样,用这些点来表示它的结构;体积点云表示方法:这种方法和表面点云类似,但除了对分子表面进行采样之外,它还对每个原子体积内部进行采样,这种方法适用于处理大型大分子。
PyUUL volumes可用于深度学习
作者给出了一个例子来展示NN模型如何利用PyUUL工作。作者建立了一个NN来识别蛋白质结构中的alpha螺旋。作者选择这个例子是因为,虽然它很容易被一个相对简单的NN解决,但它需要从描述输入蛋白质的体素化体积中提取结构信息,进一步表明蛋白质被正确转换为一个保留结构信息的张量数据结构。此外,可以更清楚地可视化出简单的NN的学习过程。图1B展示使用PyUUL构建一个基于体积的NN过程。图2A展示了该三维卷积NN在训练过程中的演变。如图所示,随着迭代次数的增加,NN迅速收敛并识别出alpha螺旋所在区域。这个例子的目的是为了说明PyUUL的体积表示方法具有很高的信息量,而且机器学习方法能很容易的从它那里建立结构生物学概念。
PyUUL对核酸和小分子同样适用
PyUUL可以将任何生物分子转换为张量表示,包括小分子和核酸。这一功能的目的是为了帮助用户在药物重定位和化学发现中应用ML方法。当前的PyUUL版本提供了大多数常见的非蛋白质生物分子和原子的数据。然而,如果提供了原子半径,它能处理含有更多奇特原子的分子。
用PyUUL进行端对端的基于结构蛋白质聚类
在这里作者构建了一个用于蛋白质结构旋转不变量度量学习NN,用于蛋白质折叠识别。作者收集了491种蛋白质结构,分为4个不同的SCOP类,并基于PyUUL的体素表示训练NN来进行有监督聚类。作者使用的NN是3D Siamese NN,将蛋白质的PyUUL体素表示作为输入并将其映射到潜在空间,其中使用ST(Spatial Transformer)层保证旋转不变性。作者将学习到的5D潜在空间进行PCA(Principal Component Analysis)降维得到如图2B所示的聚类效果。我们可以看到属于不同类别的点之间的相隔较远,而属于同一类别的点分布的更靠近。最后,对应于四个类别形成了四个集群。
用PyUUL对基于梯度的蛋白质结构进行优化
作者处理了优化三磷酸鸟苷(GTP)在其结合口袋中的结构的任务。然而,配体的方向对于标准对接算法来说往往是麻烦的。因此,我们用PyUUL建立一个NN来学习蛋白质-GTP复合物的最佳构象,然后用它将配体对接到口袋中。为了做到这一点,作者首先收集了515个蛋白质与GTP的复合体(可在git资源库中找到)。对于每个蛋白质,作者将GTP旋转一个随机的角度,然后训练一个三维卷积网络来识别旋转的构象和原始构象。训练结束后,给NN一个蛋白质-配体复合物,其中的GTP被随机旋转和翻译,用NN把它放回最佳位置,有效地执行GTP-蛋白质结合的优化。整个过程是在分组的5折交叉验证中进行的,其中组间序列的一致性最多为30%,以防止网络只学习到氨基酸组成。因此,参与分类的蛋白质与进行GTP姿势优化测试的蛋白质不具有同源性。515个优化复合物中的473个得到收敛,而42个在100次迭代后没有收敛。图 2C显示了基于体积的NN对5H74进行的GTP位置的迭代重构。
用点云进行蛋白质特征编码
作者为每个GTP结合口袋生成固定长度的signature。这样的编码可以被用于,比如说,在线药物筛选,类似于对小分子的分子指纹所做的那样。因此,希望找到一种能够保留口袋之间相似性的编码。为此,作者使用表面云点表示。然而,该网络结构也可用于体积点云。首先,对于所研究的每个GTP结合蛋白,我们用PyUUL计算了表面点云表示。然后,我们使用快速全局配准算法,这是一种经常用于计算机视觉中的三维点云配准的算法,它发现了两个点云之间的最佳叠加,以估计每对口袋的成对距离。然后,作者应用了参考文献中提出的编码器FoldNet的一个变体。该网络将一个云点作为输入,生成一个固定大小的signature。与蛋白质识别部分不同的是,每个蛋白质都有一个标签(蛋白质类别),这里只有成对的距离。因此,度量学习和对比损失并不直接适用于这个问题。为了获得口袋的signature,作者提出了一种基于回归的方法:计算每个口袋的signature,然后计算它们之间的成对距离矩阵,然后与用快速全局配准算法获得的矩阵进行比较。从而,该网络学会了分配保留点云距离矩阵信息的signature。作者上一节使用的GTP结合袋上测试了这种方法,进行了5折的分层交叉验证,其中SI大于30%的蛋白质被归为一组。使用10个特征作为编码维度,基于signature和基于云点的配对距离矩阵之间的皮尔逊相关系数可以达到0.72。
GPU并行、稀疏张量和资源用途
PyUUL使用Pytorch中的稀疏张量进行计算。由于空体素占主导地位,这通常会带来显著的性能提升,尤其是对于大批量数据。PyUUL有完整的GPU计算支持,所有的操作都可以由CPU或者GPU处理。尽管Pytorch对稀疏NN的支持在一定程度上是有限的,但许多第三方库和Facebook研究小组一起对稀疏NN提供了支持。
3
讨论
在结构生物学中,最新的DL算法的利用往往比其他科学领域要慢。主要的原因是我们通常用特殊的数据格式存储生物学结构,从而不易被DL方法所使用。作者提出PyUUL通过关联大分子的原始结构化数据和DL所需要的输入格式来解决该问题。同其它的体素转换方式相比,PyUUL是以一种可微的方式进行转化,这意味着它能传递pytorch所计算的梯度,这一特征对于end-to-end、sequence-to-structure型NN来说非常重要,因为梯度能畅通无阻的从输入流到损失函数。
在CASP14竞赛中,end-to-end架构的Alphafold取得重大成功,证明了end-to-end 型NN的潜力。PyUUL也因此能在这样的架构中被使用来实现3D-based NN模块。
PyUUL是一个开源软件,而且将会根据社区反馈和领域先进成果进行更新和扩充。
参考资料
Orlando, G., Raimondi, D., Duran-Romaña, R. et al. PyUUL provides an interface between biological structures and deep learning algorithms. Nat Commun 13, 961 (2022).
https://doi.org/10.1038/s41467-022-28327-3
PyUUL库
https://bitbucket.org/grogdrinker/pyuul/