MSA Transformer

过去的蛋白质语言模型以单个序列为输入,MSA Transformer以多序列比对的形式将一组序列作为输入。该模型将行和列注意力交织在输入序列中,并在许多蛋白质家族中使用mask语言建模目标进行训练。模型的性能远超过了当时最先进的无监督学习方法,其参数效率远高于当时最先进的蛋白质语言模型。

来自:MSA Transformer, ICML2021

目录

  • ESM-MSA-1b概述
    • 输入
    • 绑定行注意力
    • 预训练
  • 结果
    • 无监督接触图预测
    • 有监督接触图预测

ESM-MSA-1b概述

ESM-MSA-1b是一个在UR50上训练的掩码语言模型,ESM-MSA-1b在三种下游任务:无监督氨基酸接触图预测、有监督氨基酸接触图预测和二级结构预测上均达到了当时的SOTA水平。

模型采用随机mask,其中,Transformer做了改进,使内存占用降低。模型与普通Transformer的区别是,其特殊的轴向注意力机制,见图1所示。对于蛋白质通用规律的学习,MSA信息中同源序列不同位置上的氨基酸对于当前的氨基酸的权重信息并不大,当前氨基酸最重要的关注点还是同一序列其他氨基酸(行)和同源不同序列同一位置的其他氨基酸(列),因此注意力限制在横纵这两条轴向范围就可以了,可以大大降低时间复杂度。
fig1

  • 图1左,注意力稀疏结构。通过将注意力限制在行和列上,计算成本从 O ( ( L M ) 2 ) O((LM)^{2}) O((LM)2)降低到 O ( L M 2 ) + O ( L 2 M ) O(LM^{2})+O(L^{2}M) O(LM2)+O(L2M),其中 M M M是MSA中的行数, L L L是列数。
  • 中间:未绑定的行注意力对MSA中的每个序列使用不同的注意力。绑定行注意力对MSA中的所有序列使用单个注意力图,从而约束了接触结构。
  • 右:一个MSA Transformer块。所描绘的架构来自最终模型。

输入

Transformer是强大的序列模型,能够将信息从任何位置传递到任何其他位置。然而,它们并不适用于一组对齐的序列。在MSA中简单地连接长度为 L L L M M M个序列将允许跨所有序列的注意力,但 ( M L ) 2 (ML)^{2} (ML)2的自注意力map将占用大量内存。MSA Transformer主要贡献是将Transformer预训练扩展到在MSA上运行,同时将其结构视为 M × L M\times L M×L特征矩阵。

作者将输入MSA描述为矩阵 x ∈ R M × L x\in\mathbb{R}^{M\times L} xRM×L,其中行对应MSA中的序列,列对应对齐序列中的位置,条目 x m i x_{mi} xmi取整数值1,编码序列 m m m在位置 i i i处的氨基酸同一性(与参考氨基酸相同)。编码输入后,每一层都有一个 R M × L × d \R^{M\times L\times d} RM×L×d状态作为输入和输出。对于Transformer的核心,作者采用了Ho等人(2019)和Child等人(2019年)的轴向注意力方法。这种方法将注意力交替放在2D状态的行和列上(见图1)。MSA上注意力的这种稀疏模式使列注意力的注意力成本为 O ( L M 2 ) O(LM^2) O(LM2),行注意力的注意力为 O ( M L 2 ) O(ML^2) O(ML2)

对于token embedding,将不同氨基酸用整数表示,形成一个整型向量。词库包括20种标准氨基酸、5种非标准氨基酸和4种特殊字符,共29种氨基酸token。

对于position embedding,标准Transformer位置嵌入是添加到序列中每个位置的1D信号。最常用的是固定正弦或可学习位置嵌入。Rives等人发现,学习位置嵌入通常会使蛋白质语言模型的下游性能更好。MSA是一个2D输入,因此必须考虑两种类型的位置嵌入。对于所有训练过的模型,作者提供了一个1D序列位置嵌入,它独立地添加到MSA的每一行。这使得模型能够区分不同的对齐位置。对于一个模型,作者还为MSA的每一列独立添加了一个位置嵌入,这允许模型区分不同的序列(如果没有这个,模型会将输入序列视为一个无序集)。作者还确保序列中的第一个位置始终是参考,这样就可以通过位置嵌入来唯一识别它。最后发现,引入列位置嵌入会略微提高性能

绑定行注意力

轴向注意力的标准实现允许输入的每一行和每一列都有独立的注意力图。然而,在MSA中,每个序列都通常应该具有相似的结构。为了利用这种共享结构,作者假设将MSA中的序列之间的行注意力图绑定起来是有益的。另一个好处是,绑定注意力将行注意力的内存占用从 O ( M L 2 ) O(ML^2) O(ML2)减少到 O ( L 2 ) O(L^2) O(L2)

预训练

模型在2600万MSA的数据集上进行训练。通过使用HHblits搜索UniClust30,为每个UniRef50序列生成MSA。MSA的平均深度为1192。

模型使用masked training方法进行训练,直接输出的是每一个masked token处为各种氨基酸的概率。然而主要目标并不是得到这些概率,而是要通过训练后的attention map预测蛋白质二、三级结构。

  • 二级结构:基于MSA Transformer的特征表示向量(representation)预测8种折叠,准确率为72.9%。
  • 三级结构:基于MSA Transformer各层、各注意力头的attention map,训练logistic回归模型,对蛋白质三级结构进行预测。

结果

无监督接触图预测

Rao等人表明,蛋白语言模型在没有监督的情况下能够捕捉蛋白质结构信息。可以通过在有限数量的蛋白质结构上训练一个小的逻辑回归来实现,同时可以根据注意力头的残基之间的注意力来预测残基 i i i j j j之间接触的概率。

使用相同的验证方法。对trRosetta数据集中的20个训练结构进行逻辑回归拟合。然后,这被用来预测trRosetta数据集中另外14842个结构上的蛋白质接触概率(不包括训练结构)。本质其实还是有监督

有监督接触图预测

作者将MSA Transformer作为监督结构预测管道的一个组件进行评估。根据Rives等人的研究,使用0.001的学习率训练了一个具有32个激活块的深度残差网络。使用15051个MSA和结构的trRosetta训练集对网络进行分箱成对距离分布(distogram)的监督(给接触距离做了更细粒度的分箱标签)。输入残差网络的特征是,查询序列中,两个氨基酸embedding的concat。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT实现有限元软件操作界面

本系列文章致力于实现“手搓有限元,干翻Ansys的目标”,基本框架为前端显示使用QT实现交互,后端计算采用Visual Studio C。 本篇将二维矩形截面梁单元(Rect_Beam2D2Node)组成的钢结构桥作为案例来展示软件功能。 也可以…

推荐一款好用的翻译类浏览器扩展插件

给大家推荐一款实用的翻译工具——沉浸式翻译。这是一款免费、高效的AI驱动浏览器扩展插件,能够帮助用户轻松打破语言障碍,享受沉浸式的阅读体验。 主要特性 沉浸式阅读体验:通过智能识别网页主内容区域并进行双语对照翻译,让用户…

ElasticSearch-文档元数据乐观并发控制

文章目录 什么是文档?文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES,最近在检索资料的时候翻阅到了 ES 的官方文档,里面对 ES 的基础与案例进行了通俗易懂的解释,读下来也有不少收获&#xff0…

开源的瓷砖式图像板系统Pinry

简介 什么是 Pinry ? Pinry 是一个开源的瓷砖式图像板系统,旨在帮助用户轻松保存、标记和分享图像、视频和网页。它提供了一种便于快速浏览的格式,适合喜欢整理和分享多种媒体内容的人。 主要特点 图像抓取和在线预览:支持从网页…

Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

【数据结构】初识链表

顺序表的优缺点 缺点: 中间/头部的插入删除,时间复杂度效率较低,为O(N) 空间不够的时候需要扩容。 如果是异地扩容,增容需要申请新空间,拷贝数据,释放旧空间,会有不小的消耗。 扩容可能会存在…

I.MX6ULL 中断介绍上

i.MX6ULL是NXP(原Freescale)推出的一款基于ARM Cortex-A7内核的微处理器,广泛应用于嵌入式系统。在i.MX6ULL中,中断(Interrupt)是一种重要的机制,用于处理外部或内部事件,允许微处理…

4-图像梯度计算

文章目录 4.图像梯度计算(1)Sobel算子(2)梯度计算方法(3)Scharr与Laplacian算子4.图像梯度计算 (1)Sobel算子 图像梯度-Sobel算子 Sobel算子是一种经典的图像边缘检测算子,广泛应用于图像处理和计算机视觉领域。以下是关于Sobel算子的详细介绍: 基本原理 Sobel算子…

苍穹外卖——数据统计

在商家管理端的左侧,有一个名为"数据统计"的菜单,该页面负责展示各个维度的数据统计,分别是营业额统计、用户统计、订单统计、销量排名top10。统计的数据是借助一些图形化的报表技术来生成并展示的。在左上角还可选择时间段&#x…

优盘恢复原始容量工具

买到一个优盘,显示32mb,我见过扩容盘,但是这次见到的是缩容盘,把2g的容量缩成32MB了,首次见到。。用芯片查询工具显示如下 ChipsBank(芯邦) CBM2199E 使用以下工具,恢复原始容量。。 其他CMB工具可能不行…

Flutter Candies 一桶天下

| | | | | | | | 入魔的冬瓜 最近刚入桶的兄弟,有责任心的开发者,对自己的项目会不断进行优化,达到最完美的状态 自定义日历组件 主要功能 支持公历,农历,节气,传统节日,常用节假日 …

[Collection与数据结构] B树与B+树

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

ROS应用之SwarmSim在ROS 中的协同路径规划

SwarmSim 在 ROS 中的协同路径规划 前言 在多机器人系统(Multi-Robot Systems, MRS)中,SwarmSim 是一个常用的模拟工具,可以对多机器人进行仿真以实现复杂任务的协同。除了任务分配逻辑以外,SwarmSim 在协同路径规划方…

新鲜速递:DeepSeek-R1开源大模型本地部署实战—Ollama + MaxKB 搭建RAG检索增强生成应用

在AI技术快速发展的今天,开源大模型的本地化部署正在成为开发者们的热门实践方向。最火的莫过于吊打OpenAI过亿成本的纯国产DeepSeek开源大模型,就在刚刚,凭一己之力让英伟达大跌18%,纳斯达克大跌3.7%,足足是给中国AI产…

【Rust自学】15.5. Rc<T>:引用计数智能指针与共享所有权

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.5.1. 什么是Rc<T> 所有权在大部分情况下都是清晰的。对于一个给定的值&#xff0c;程序员可以准确地推断出哪个变量拥有它。 …

UE5制作视差图

双目深度估计开源数据集很多都是用UE制作的&#xff0c;那么我们自己能否通过UE制作自己想要的场景的数据集呢。最近花了点时间研究了一下&#xff0c;分享给需要的小伙伴。 主要使用的是UnrealCV插件&#xff0c;UnrealCV是一个开源项目&#xff0c;旨在帮助计算机视觉研究人…

基于遗传优化GRNN和Hog特征提取的交通标志识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 HOG 4.2 GRNN&#xff08;General Regression Neural Network&#xff09;模型原理 4.3 遗传算法&#xff08;GA&#xff09;优化GRNN平滑因子 5.算法完整程序工程 1.算法运行效果图预…

C语言【基础篇】之流程控制——掌握三大结构的奥秘

流程控制 &#x1f680;前言&#x1f99c;顺序结构&#x1f4af; 定义&#x1f4af;执行规则 &#x1f31f;选择结构&#x1f4af;if语句&#x1f4af;switch语句&#x1f4af;case穿透规则 &#x1f914;循环结构&#x1f4af;for循环&#x1f4af;while循环&#x1f4af;do -…

C++实现状态模式

首先上代码&#xff1a; #include <iostream> #include <memory>class Context;class State { public:virtual void Handle(Context * context) 0; //纯虚函数virtual ~State() default; //虚析构函数 };//创建状态A class ConcreateStateA : public State{…

【React】PureComponent 和 Component 的区别

前言 在 React 中&#xff0c;PureComponent 和 Component 都是用于创建组件的基类&#xff0c;但它们有一个主要的区别&#xff1a;PureComponent 会给类组件默认加一个shouldComponentUpdate周期函数。在此周期函数中&#xff0c;它对props 和 state (新老的属性/状态)会做一…