重学ProteinMPNN原理1

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

ProteinMPNN

一、首先什么是MPNN for protein

机器学习中常见的蛋白数据表示在这里插入图片描述

1.蛋白序列的独热编码
2.基于多序列比对的进化信息
3.二级结构信息
4.残基间距离
5.二面角扭转角度或其他结构物理信息
6.蛋白表面信息
7.原子坐标信息
8.蛋白质图(蛋白质的氨基酸残基被表示为图中的节点(vertices),而氨基酸之间的相互作用(如共价键、氢键、范德华力等)被表示为边(edges))

MPNN架构在这里插入图片描述

训练过程
1.初始化
根据蛋白质结构中的位置和局部环境进行每一个氨基酸的初始化(为每个氨基酸残基分配一个特征向量)(也就是为什么输入要是完整结构而不能仅仅是backbone)
2.消息传递(分为聚合消息和节点更新两个步骤)
MPNN 通过消息传递机制来更新节点的嵌入。每个节点的嵌入会根据其邻居节点的信息进行更新。具体来说,每个节点会接收来自其邻居节点的消息,并通过聚合这些消息来更新自己的嵌入
在这里插入图片描述
消息传递中比较重要的两个参数选择
1.邻域大小:这篇文章中选择的邻域大小为30,也就是只选择空间上最近的30个氨基酸的信息进行传递
2.αC传递方向
在这里插入图片描述

3.自回归解码
对于节点级别的表示是不够的,需要获得氨基酸级别的表示
每个氨基酸的生成依赖于之前生成的氨基酸和当前节点的嵌入信息(其中,第一个氨基酸的生成是基于初始节点嵌入和结构信息进行的)

模型比较

在这里插入图片描述
与Rosetta固定骨架优化侧链协议在同一测试集上进行了比较:更快、序列有功能概率更高(Recovery)、对于复杂结构设计的序列可靠程度更高
注:Recovery衡量的是identity not similarity

二、ProteinMPNN

在这里插入图片描述
衡量了几种方法在蛋白核心(相邻8Cb距离近)和蛋白表面(相邻8Cb距离远)的序列恢复度,因为表面受到的物理约束更小,所以可能的氨基酸种类更多,恢复度较低。在这里插入图片描述
proteinMPNN与2019的MPNN baseline模型相比,增加了以下三点改进:

①增加了除αC原子以外的几个原子之间的距离作为边的特征
②update edges:在消息传递过程中不止更新节点信息,还更新边的信息(两个氨基酸几个原子之间的欧几里得距离、一个氨基酸指向另一个的方向向量、两个氨基酸之间的二面角、氢键和范德华力等)
③在原始的N→C顺序解码的基础上增加了随机解码模式,使模型能学习到更广泛的序列生成模式(这样可以保证固定一些关键位置或者关键链的氨基酸,跳过他们生成其他位置的氨基酸)

评估指标除了recovery外还是添加了生成序列用AF2预测的精度

在这里插入图片描述
最后衡量了几种方法在蛋白核心(相邻8Cb距离近)和蛋白表面(相邻8Cb距离远)的序列恢复度,因为表面受到的物理约束更小,所以可能的氨基酸种类更多,恢复度较低。

PS:微调策略

找到train.py文件中的下面这段代码

model = ProteinMPNN(node_features=args.hidden_dim, 
                    edge_features=args.hidden_dim, 
                    hidden_dim=args.hidden_dim, 
                    num_encoder_layers=args.num_encoder_layers, 
                    num_decoder_layers=args.num_encoder_layers, 
                    k_neighbors=args.num_neighbors, 
                    dropout=args.dropout, 
                    augment_eps=args.backbone_noise)

后面加上冻结的层

# 冻结全部参数
for param in model.parameters():
    param.requires_grad = False

# 只解冻 decoder 层和输出层
for layer in model.decoder_layers:
    for param in layer.parameters():
        param.requires_grad = True

for param in model.W_out.parameters():
    param.requires_grad = True

写训练参数脚本,如

--previous_checkpoint model_weights/epoch_last.pt 
--path_for_training_data ./data/pdb_2021aug02 \
--path_for_outputs ./exp_test1 \
--num_epochs 100 \
--batch_size 8000 \
--hidden_dim 128 \
--num_encoder_layers 4 \
--num_decoder_layers 4 \
--dropout 0.1 \
--backbone_noise 0.2 \
--mixed_precision True

然后开始训练

参考资料
https://www.youtube.com/watch?v=6z4XmUAwdNA&t=80s
Robust deep learning–based protein sequence design using ProteinMPNN.2022
Generative models for graph-based protein design.2019

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值