☰
SimpleDesign解读:Transformer如何联合生成蛋白质序列与三维结构
2026/9/28 17:33:03 网站建设 项目流程

做蛋白质设计这些年,我越来越觉得这个领域缺的不是想象力,而是“把想法落到实处的工程能力”。尤其是在从头设计新蛋白时,长期被一个“先有鸡还是先有蛋”的困局卡住:序列决定三维结构,而结构又反过来决定序列能否稳定折叠。传统的做法是绕圈子——先设计结构,再反推序列,再验证折叠,方案繁琐且成功率低。最近Apple和Mila合作提出的SimpleDesign,试图用“一个Transformer直接联合生成蛋白序列与三维结构”的方式正面解决这个困局。这篇文章我会结合我自己的理解,把它的核心思路、技术背景、复现难点和实际应用讲清楚,特别是Transformer在里面到底扮演了什么角色,以及为什么“联合生成”这件事,比表面看起来要难得多。

这个方向的内容适合三类人:做AI for Science的算法工程师、搞结构生物学但想引入生成式AI的科研人员,以及准备在药物设计、酶工程、合成生物学领域落地的产业团队。即使你之前只跑过Vision Transformer或者做过文本生成,也应该能从中找到共通的技术点。

1. 为什么需要“联合生成”?——序列与结构割裂的百年难题

1.1 一个核心事实:蛋白质的性质藏在结构里

蛋白质由20种标准氨基酸按特定顺序串成链,也就是一级序列。在生理环境下,这条链会自发折叠成特定三维构象,只有折叠成正确构象,蛋白质才能发挥功能——酶催化、抗体结合、信号传导等全部依赖构象。所以序列本身不是终点,结构才是功能的执行者。

但“序列如何决定结构”这个基本问题,科学界破解了很久也没有彻底根治。即便AlphaFold已经能从序列高精度预测结构,我们离“任意写出一条序列就直接得到想要结构”依然差得远。原因在于序列空间极其巨大——一个由100个氨基酸组成的蛋白,理论上就有20的100次方种可能,这个数量远超可观测宇宙中的原子数。

在这样巨大的搜索空间里,随机突变然后筛选天然蛋白,效率极低。科研人员更想要的是一种“逆向设计”能力:我先画出三维拓扑,再由AI直接把对应的氨基酸序列和空间坐标一起生成出来。

1.2 传统设计的“两步走”困境

过去几年的主流蛋白设计路线,是典型的pipeline流程:

  • 第一步,用结构生成模型(比如RFdiffusion)生成一个空间骨架;
  • 第二步,用序列设计模型(比如ProteinMPNN)在这个骨架上反推氨基酸序列;
  • 第三步,用AlphaFold或实验手段验证这个序列是否真能折叠成目标结构。

每一步都是独立的深度模型,看起来“模块化很清晰”,但实际操作起来问题非常多。

最大的问题在误差传递。第一步生成的结构可能局部合理性不足,第二步拿到这个带误差的结构后,原本能设计出好序列的模型会因为“输入分布偏移”而性能暴降。我在实际项目里见过太多这种情况:RFdiffusion生成的结构看着不错,ProteinMPNN给出的序列也能量守恒,但AlphaFold回测折叠时直接崩溃。每个环节都是单独最优,串起来却不好用,这是pipeline方式的天生缺陷。

第二,这种两步走的方案在“绕路”。结构信息里其实已经暗含序列约束,反向设计时也隐含着结构偏好,分开了就要各自重新学习一遍,浪费数据和算力。更重要的是,它们之间没有共享的梯度传播——上游模型不知道下游模型需要怎样的结构,下游模型也无法反过来指导上游结构生成。整个系统无法端到端优化。

第三,从信息论视角看,联合设计比“结构到序列的单向翻译”信息量要大得多。联合模型可以在全局上下文里同时搜索序列和结构,而不是人为把它们切成两个独立搜索任务。

1.3 “联合生成”的机会点

SimpleDesign想做的事情,用一句话概括是:把“设计序列”和“设计结构”放进同一个Transformer,一次前向过程同时输出氨基酸类型和三维空间坐标。

这不只是工程上的糅合,而是建模哲学的改变。它不再把结构当作“输入”,也不把序列当作“输出”,而是把序列和结构都看作同一潜在空间中的不同视图。Transformer天然的全局注意力机制,恰好适合建模这种“每个残基的序列信息与空间信息彼此纠缠”的关系。

我个人的判断是,联合生成的方向会成为未来两年AI蛋白设计的主赛道。它借鉴的其实是多模态生成模型的思想——就像目前的文生图模型同时理解文本和图像分布一样,蛋白领域的联合模型也要同时理解序列分布和结构分布。SimpleDesign是这个方向上一个相当有代表性的尝试,而且苹果这次和Mila合作,也说明产业界开始认真下注“生成式结构生物学”。

2. Transformer凭什么能同时管住序列和结构

2.1 回顾Transformer的三个核心组件

把Transformer用在蛋白质上,和用在文本上本质没有区别:输入是一串token,输出是一串token。SimpleDesign之所以选Transformer而不是别的架构,核心在于三个组件。

第一个是自注意力机制。在一层自注意力中,序列里的每个token都会和同序列内其他所有token计算相关性权重,从而建模长距离依赖。蛋白序列中相距很远的残基可能在三维空间里紧紧挨着,这种远距离相互作用正是决定三级结构的关键。CNN需要层数很深才能扩大感受野,而Transformer一层就能让全局信息直接建立联系,这是它在结构预测和生成任务上的绝对优势。

第二个是位置编码。文本中的位置编码用来告知模型token出现的先后顺序。但对于蛋白质三维结构来说,顺序信息还不够,模型还需要知道残基在空间中的相对位置。实际处理空间坐标时位置编码的设计要复杂得多,这一点我在第三部分专门展开。

第三个是前馈网络(FFN)。自注意力负责融合信息,FFN负责非线性变换和特征抽象。每一层Transformer其实是“先交互、再思考”的过程,深层叠加后,模型就能逐步从氨基酸空间中提炼出高层次的结构语义。

这三件事组合在一起,让Transformer成为“灵活处理任意关系的通用架构”。对蛋白质这种序列和结构高度耦合的数据,它几乎是天然的工具。

2.2 从预测到生成:把结构变成“另一种语言”

如果说AlphaFold是“读”蛋白序列,输出结构坐标,那么SimpleDesign就是“写”蛋白——直接采样出新序列和新结构。预测与生成之间有本质区别:预测任务学习的是条件概率分布P(结构 | 序列),生成任务学习的是联合概率分布P(序列, 结构)。

实现联合生成的关键,是把连续的三维结构信息“翻译”成模型能够处理的离散或连续特征。目前公开的类似方案中,大致有几种表示方法:

  • 二面角表示:每个残基骨架有φ、ψ、ω几个扭转角,把连续角度离散成桶(bin),角度值就变成了类似token的东西;
  • 距离矩阵表示:计算每对残基Cα原子间的距离,构成一个对称矩阵,这相当于把三维结构压缩成二维关系信息;
  • 原子坐标表示:直接用Cα或全原子坐标作为连续特征,适合用扩散或回归的方式生成。

Transformer本身不挑食,连续特征和离散特征都能处理。真正难点在于,序列是离散的(20种氨基酸分类),结构是连续的(坐标或角度),两种数据分布在同一个模型里如何统筹优化。我倾向于认为SimpleDesign采用的是某种混合表示:序列端做分类,结构端做回归或离散化处理,然后通过统一的注意力块把它们对齐。

结构一旦被变成了模型可处理的表征,蛋白质结构生成就变成了“序列生成”问题的空间版本。这也解释了为什么Transformer在文本生成里积累的大量工程经验——比如温度采样、top-p采样、自回归解码——都能迁移到蛋白生成任务上。

2.3 为什么选择Transformer而不是CNN/GNN

蛋白结构领域过去十年里,GNN(图神经网络)是被用得最多的工具,因为它天然把原子和残基当作图节点、把化学键和空间距离当作边。理论上,图结构很适合描述蛋白质。那为什么SimpleDesign还会选择Transformer?

关键在于图的“连接假设”。GNN的图边通常是手工定义的,比如用物理距离阈值截断、只连接5埃以内的残基对。这虽然省算力,但也会漏掉一些重要远距离联系。Transformer用全连接注意力替代手工图边,让模型自己判断哪些残基对重要,不预设空间阈值,在表达上都更灵活。

RostLab在ESMFold里改用“线性的Transformer”做端到端结构预测,也证明了Transformer在大规模蛋白数据上的可扩展性。CNN、GNN和Transformer三者对比,大概是这样子:

维度CNNGNNTransformer
长距离依赖弱,需深层堆叠依赖图连接定义天然全连接
结构信息利用需手动编码需要手工构图注意力自动学习
可扩展性中中高,适合大数据
序列和结构联合建模困难中等最自然

从这张表能明显看出来,要做联合生成,Transformer的表达潜力最大。付出的代价是算力和显存开销较高——注意力矩阵的复杂度是序列长度的平方,蛋白序列动辄几百上千残基,这个成本在实战中相当扎心。但苹果和Mila敢用Transformer做这件事,说明他们大概率在注意力稀疏化或显存优化上有自己的方案。

3. SimpleDesign的设计思路拆解

3.1 统一表示:序列与结构的token化

要在一个Transformer里联合生成序列和结构,第一步必须先建立“共同的表示空间”。也就是说,结构信息要能和序列信息一样被Transformer当作序列数据来消费。

我见过的蛋白生成模型,会采用“残基级token”方案:把蛋白质视作一连串残基,每个残基是一个token。这个token身上挂两种属性——氨基酸种类(离散标签,20类)和骨架坐标(连续向量,通常是N、Cα、C、O四个原子坐标或二面角)。

在SimpleDesign这种联合生成框架下,设计者需要在“单序列自回归”和“多轨道同时生成”之间做取舍:

  • 如果采用纯自回归序列生成,模型逐个残基输出,顺序是1到N,每个残基同时预测氨基酸类型和结构参数。实现简单,但生成顺序带有方向性,可能会忽略远距离的协同约束。
  • 如果采用非自回归或扩散式生成,模型在一开始就初始化完整序列和“粗糙结构”,然后逐步去噪修正。这种方案能更好地满足全局约束,但训练和采样都比较复杂。

从标题中“直接联合生成”这个表述来判断,它更像是跳跃了“先生成结构再反向序列”的过程,在同一个生成过程中用注意力机制让序列选择和结构形成协同优化。

我自己写Transformer时,特别喜欢用一个类比:序列是文字,结构是画面。文生图模型发展到现在,早就发现“画一个地方再临时想别的地方”会产生大量不协调,而是应该先用模糊的全球构图,再逐步细化局部。蛋白的序列和结构联合生成,本质上也该走这条路线——全局结构框架先确定,局部氨基酸序列与空间坐标再协同精修。

3.2 联合生成:不是“先序列后结构”也不是“先结构后序列”

联合生成的重点在于“不分先后”。这一步的设计思想是最颠覆传统的。

传统路线是条件生成,比如“给结构,给序列”(结构为render序列设计)或“给序列,给结构”(用AlphaFold预测)。条件生成的问题是:模型只在单一方向的条件下学习,生成的多样性受限。它在设计任务上不够“自由”,因为你总要先提供一个条件。

SimpleDesign式的联合生成,则更像无条件生成。模型从纯噪声或一个起始token出发,同时搜出序列与结构。并不是说模型不能接受条件输入,比如你给模型一个“要生成α螺旋”的先验,或者一段已知功能motif的序列,它应该能在这个条件下生成。关键在于,条件不是硬性的、顺序化的输入,而是参与到整个注意力计算中的一个约束信号。

在实际架构中,这种随机过程通常是这样实现的:生成过程中,某一时刻t,模型手中有当前的部分序列(可以是自回归已生成的部分,也可以是扩散迭代的中间态)和部分结构信息,注意力机制同时观察到这两部分,预测下一步应该放什么氨基酸、它在空间里应该怎么放。

一个很有意思的细节是,模型在预测某个残基的结构时,应该看到全部序列信息;而在预测序列时,也应该同时看到全部结构信息。这样才能真正实现“序列指导结构,结构反馈序列”的闭环。要做到这一点,注意力机制必须是双向的,或者模型必须经过多次迭代更新——这也是为什么本轮生成模型普遍喜欢用Diffusion结构而不是普通单向Transformer。

3.3 训练与推理中的关键问题

从训练细节来看,联合模型面临几个普通序列模型不会面临的挑战。

第一个是损失函数的尺度问题。序列预测用交叉熵损失,结构预测用坐标或角度上的回归损失(比如L2、L1损失)。这两个量级通常不一样,直接相加会导致某一头被吃掉。业界基本都会做动态权重调整或让模型自动学习损失权重,一个常用做法是使用同方差不确定性来加权多个任务损失。

第二个是坐标的旋转等变性(equivariance)。给整个蛋白做一次刚性旋转,结构坐标全部变了,但序列和功能应该完全不变。如果模型直接吃绝对坐标,它就得同时唯记这些旋转冗余,白白增加学习负担。很多模型会选择只吃内部坐标(单键距离、键角、二面角),或者用相对位置几何计算替代绝对坐标。SimpleDesign应该也走了“几何不变量”或“相对坐标”路线,这几乎是这类模型的必选项。

第三个是生成的自一致性。自回归方式生成到后半段时,早先预测的结构甚至和后来的结构撞车,需要训练时做随机“打乱”增强,让模型学会修正。扩散式生成则天然有“从全局到局部”的自一致性优势,这也是我认为这个框架更容易成功的原因。

推理阶段,如果模型支持条件生成,就能实现很实用的功能。比如你画一个活性位点的序列结构草图,让模型补全整个蛋白,它将是一个非常好用的“蛋白补全”工具。甚至你可以指定目标结构大致拓扑,让模型完成序列设计和细节修正,这对工程化应用的价值极大。

4. 实操视角:复现与应用路上的真实问题

4.1 数据:从哪里拿,怎么清洗

搞清Transformer在蛋白质上能走多远,很大程度取决于训练数据质量。对于SimpleDesign这类联合生成模型,需要的不是一个数据集,而是两个对齐的数据集:序列-结构对。

最大的公开来源有三个:

  • 蛋白质数据银行(PDB):有实验验证的蛋白结构,数量大约二十万量级,是黄金标准,但它对“人类想要的新功能蛋白”覆盖不全;
  • AlphaFold数据库(AFDB):有上亿条预测结构,量大但包含不少低置信度区域,直接拿来训生成模型可能会学到“预测的错误”;
  • 序列数据库(UniProt/BFD等):量极大但没有结构对应,联合模型用不了。

实际跑下来我的体会是:PDB一定得有,但远远不够,因为它的结构空间覆盖度太低。要冲大规模,必须用AFDB增强,但要对pLDDT(每残基置信度)做严格过滤。我一般会把pLDDT低于70的分区扔掉,再用序列同源性聚类做去冗余,把相似度超过30%的序列划到同一簇,保证训练集和测试集之间没有“背答案”式的泄漏。

序列-结构配对还有一个被低估的坑:PDB里很多结构包含非蛋白组成部分(核苷酸、配体离子等),预处理时必须决定是保留这些上下文还是只提取蛋白链。如果不小心把配体信息当成了蛋白残基,模型会被带偏。

4.2 算力与显存

Transformer的显存开销是绕不过去的坎。单条蛋白序列500残基时,自注意力的复杂度是250000个交互对,乘以层数和头数,再叠加结构坐标预测头,显存压力非常具体。

复现时我建议按这个思路降门槛:

  • 先用短链(100-200残基)小模型跑通实验流程,验证曲线能收敛再放大;
  • 开FlashAttention和激活重计算,这两项几乎白赚 30%-50% 显存;
  • 用混合精度训练,参数用FP16/FP32,注意力分数用FP16,损失计算时回退FP32,别偷懒省这一步;
  • 如果连一张H100/A100都没有,就别先折腾整套系统。先把结构生成模型和序列模型分开跑明白了,再去挑战联合模型。

我自己的经验是,这类蛋白质生成模型对batch size非常敏感。batch太小,模型看不到足够多样的蛋白形状,容易收敛到局部奇怪结构。如果显存到瓶颈,优先保持较长序列,再降batch大小,最后才考虑梯度累积。

4.3 评估指标:怎么判断生成结果好不好

生成一个蛋白容易,判断它好不好难。这个难是两层的,第一层是计算,第二层是实验。

计算层面,我觉得至少要看四个指标:

指标看什么注意事项
结构可折叠性回测到AlphaFold的pLDDT用ESMFold做交叉验证更保险
序列可恢复性用ProteinMPNN反推序列的恢复率高恢复率说明序列和结构匹配度好
物理合理性Ramachandran图、原子碰撞检测拉氏图分布集中则构象合理
序列多样性生成序列的平均同源性多样性太低说明模型复读训练集

我最看重第一项和第三项。一个生成蛋白就算序列再漂亮,如果回测到AlphaFold里预测构象和生成构象差异大,就说明sequences与structure根本没对齐,这在联合模型里是要重点返工的点。回测时我习惯生成一批(比如64条),画CA-RMSD分布,中位数小于2埃才算过关。

实验层面那就更残酷了。蛋白要在大肠杆菌里表达、纯化、测圆二色谱、做SEC(分子筛)看是否单分散,每一个环节都会淘汰一批计算模型的设计。如果读者是产业人士,一定要在心里留一个预期:计算成功率能到 10%-20% 已经算非常优秀的模型了,AI生成批次一定要配实验筛选流程,而不是指望一次性命中。

5. 我踩过的坑:生成蛋白的典型翻车现场

5.1 只训练序列不管结构:生成“死蛋白”

刚开始尝试这个方向时,我犯过一个经典错误:只拿序列数据训练了一个普通的因果Transformer,目标就是学习氨基酸序列分布。练完之后生成的序列能通过绝大多数“看起来像蛋白质”的特征检测——氨基酸组成正常、没有终止密码子、也没明显异常疏水段。可是把这些序列丢进AlphaFold预测结构,发现一半以上是松散的无规卷曲或错误折叠状态。

原因其实我说了很久了:序列分布里潜藏的结构信息太稀疏。一条序列能对应很多种构象,当模型没有把结构当监督信号时,它学到的是“平均化的序列特征”,而不是“能折叠的序列特征”。这件事让我彻底明白,联合生成不是一个炫技选项,而是功能性蛋白设计的必要手段。

5.2 结构损失权重调太高:序列变为废码

后来我把结构信息加进模型,但又走了另一个极端——把结构回归损失权重调得很高,想让模型快速把骨架坐标准确率提上去。结果结构确实很快收敛,但蛋白质序列却开始出现大量不合理的疏水核心或带电残基聚集,很多生成的序列甚至无法在生理条件表达。

原因是模型发现“只要结构坐标系能配上,就拼命优化它”,而序列熵在总损失里占比太低,被放弃了。这涉及到我在3.3里说的损失权重问题。后来我用“预热”策略解决了部分问题:前若干步让序列损失权重占主导,然后再逐步加入结构损失。另一种做法是让结构损失只监督Cα坐标这个较粗粒度级别,给序列预测更多的容错空间。

5.3 自回归顺序导致“地鼠式”生成

还有一个有趣的现象:在纯自回归联合生成中,模型有时候会陷入“地鼠式”行为——先预测一个残基的序列和坐标,下一轮看到自己的坐标往回修正,然后又输出一个很不稳的跳跃,看起来像系统在局部震荡。

我个人的解决方案分两方面。一方面,训练时大量采用真实结构信息作为“教师强制”(teacher forcing)输入,但加入一定比例的结构噪声扰动,让模型学会纠正自身错误。另一方面,推理时不做一次走到底的自回归,可以做某种迭代精修:先生成整体粗框架,再对局部做几轮“洗牌”重采样,最后校验几何合理性。这与扩散模型的“去噪逐步细化”思想一致,效果明显更稳。

6. 后续扩展方向与个人体会

6.1 Beyond SimpleDesign:可控生成才是终点

联合生成模型跑通之后,下一个问题自然浮现:如何控制生成结果?

科研和工业场景从来不需要“随便一个稳定的蛋白”,而是“带有特定功能位点的蛋白”。比如我想设计一个能结合特定抗原表位的抗体,那模型必须在我的约束下生成——CDR区域要有某种序列模式,框架区要稳定等。

目前来看有这么几条可控路径:一是用结构motif作为条件输入,让模型学习保持motif的同时补全其余部分;二是用强化学习或分类器梯度引导采样,让生成过程倾向高活性、高表达序列;三是与语言模型结合,利用已有的蛋白质语言模型输出“天然序列先验”,再接上结构联合模块做坐标细化。

我严重的认为,“可控联合生成”会成为新一阶段的竞赛焦点。SimpleDesign打好的地基会让后来者更快地在这个框架上生长。

6.2 我的实验经验与对读者的建议

我从两个多月的时间开始接触这个方向,从最初用现有模型跑序列设计,到后来自己在框架上修改,经历了太多失败。如果让我重新从零到底,最重要的几条建议是:

  • 先把“单模型联合生成”当成一个概率分布学习问题,而不是“结构预测 + 序列翻译”的拼装;
  • 评估永远比训练重要。先把指标流程搭好,再开始大规模训练,否则你连“模型变好了还是变坏了”都不知道;
  • 一定要在基准数据上和我对比已知方法。生成蛋白不能只看生成loss,要看回测折叠成功率;
  • 拥抱Bottleneck思维——显存有限就限制序列长度和模型深度,先做小验证,再放大规模。别一开始就想跑千残基蛋白。

我在实际操作中发现,对Transformer而言,真正通用的“大道理”其实就那几个:数据质量决定上限、表示设计决定可行性、收敛细节决定成败。Protein领域也不例外,只是它把“表示设计”的难题推到了极致——因为一维序列和三维坐标之间的鸿沟,比自然语言与图像之间的鸿沟更纠缠。

这篇文章写到这里,我想起一个具体的moment:第一次看到模型同时产出一小段序列和对应空间坐标打印在屏幕上时,有点分不清这是AI生物技术的真实进展,还是我们习惯把一切技术演进了“万物皆可生成”的叙事的错觉。但做过几次实验验证后,我倾向于相信后者也有一部分成立——生成模型的潜力只有在和真实世界发生交互才有意义。SimpleDesign这类做法的价值恰恰在于,把AI的能力和生物实验的约束摆在了很近的位置。

如果你正准备踏入这个方向,我最后的建议是:别等“完美模型”了。就基于现有开放资源,造一个最简版联合生成模型,哪怕只能生成60个残基的小蛋白,也能让你把这里的每个坑都踩明白。踩完这些坑,你再去看SimpleDesign的细节,会有完全不同的领悟。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询