
做蛋白质设计这些年我越来越觉得这个领域缺的不是想象力而是“把想法落到实处的工程能力”。尤其是在从头设计新蛋白时长期被一个“先有鸡还是先有蛋”的困局卡住序列决定三维结构而结构又反过来决定序列能否稳定折叠。传统的做法是绕圈子——先设计结构再反推序列再验证折叠方案繁琐且成功率低。最近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的细节会有完全不同的领悟。