ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Science封面:AI绕过3D结构预测,直接生成RNA序列

Science封面:AI绕过3D结构预测,直接生成RNA序列 这次我们来看的不是又一个文生图或者大语言模型而是实打实发在《Science》封面上的 AI 生物技术突破模型绕过了 RNA 三维结构预测这条传统路径直接从序列层面完成 RNA 设计。如果你平时关注生成模型、扩散模型、GNN 在生物序列上的应用或者本身就是做合成生物学、RNA 药物开发的这篇文章适合认真读一遍。先说这个突破的直观价值。过去的 RNA 设计逻辑很重先定义目标三维结构再把结构翻译成候选序列然后用折叠预测软件反推验证最后才能进实验室测试。这套流程中每一环都可能引入误差三维结构预测不准后面全部白做。而这篇工作把链路缩短了一大截让模型从“功能约束”直接学习到“基因序列”的映射等于把设计问题变成了序列生成问题。这篇文章不会停留在新闻复述上。我会拆解六个层面为什么“绕过 3D 结构预测”能行、模型训练的基本框架、数据与评估指标怎么设计、如何做干实验验证和湿实验衔接、批量推理怎么落地以及真实的显存与算力成本怎么估算。不需要你是生物信息专家能跑通 Python 深度学习环境的工程师完全可以按这套思路复现核心流程。1. 核心能力速览先给一张速览表把这项技术的关键属性和传统方法对比清楚。表格里的信息区分了“论文已明确的结论”和“需要按复现环境验证的推断”后者我会在正文里直接标注。能力项说明项目类型生物序列生成模型具体说是 RNA 序列设计核心突破绕过 RNA 3D 结构预测直接从功能约束/序列模式生成候选序列科学价值降低 RNA 设计对结构计算和湿实验筛选的依赖缩短设计周期主要功能RNA 序列生成、功能/结构约束生成、候选序列打分排序输入数据类型RNA 序列A/U/G/C、功能标签、二级结构约束、化学修饰谱等输出数据类型RNA 候选序列列表附带打分或置信度传统方法对比传统目标结构 - 反推序列 - 折叠预测 - 实验验证本方法目标约束 - 直接生成序列训练环境通常需要多卡 GPU 服务器具体卡型和数量以论文 Methods 为准推理环境根据模型参数量单卡 V100/3090/4090/A100 都有可能需实测接口 API论文若开源仓库提供推理脚本通常可封装为 API否则需要自己写调 wrapper批量任务支持RNA 设计天然是批量生成候选序列的场景适合人群生物信息工程师、RNA 药物研发团队、合成生物学研究者、AI for Science 开发者需要特别强调一点论文登封意味着科学方法的重大创新但不等于发布了一个开箱即用的一键部署包。作者团队是否公开权重、开源推理脚本要仔细看论文补充材料和 GitHub。如果仓库还没放权重那就只能先用同类型的开源模型做流程验证但不能说这就是论文模型的复现。2. RNA 设计的技术背景从结构预测到序列生成要理解“绕过 3D 结构预测”为什么是突破得先知道传统流程卡在哪里。2.1 传统 RNA 设计流程的局限性RNA 是一类由四个碱基组成的生物大分子腺嘌呤A、尿嘧啶U、鸟嘌呤G、胞嘧啶C。它的功能不只看一级序列还要看折叠后的空间结构。比如核糖体、tRNA、核酶、核糖开关这些功能单元都依赖特定的三维折叠方式。传统 RNA 设计的基本流程是这样的确定目标功能需要的 3D 结构或二级结构基序。根据目标结构用 NUPACK、RNAfold、Rosetta 等工具反推候选序列。对候选序列跑结构预测确认折叠结构是否符合预期。通过体外转录、细胞实验验证候选 RNA 是否真的有功能。这个流程的第一个问题是 3D 结构预测本身并不完美。RNA 折叠自由度极高比蛋白质更难预测。第二个问题是“序列到结构”和“结构到功能”两个环节误差会叠加。第三步预测没问题的序列进实验室可能完全没活性。你真正要优化的是“功能”但传统流程等于把它间接拆解成了“先优化结构、再指望结构带来功能”中间的损失很严重。2.2 为什么序列生成能绕开结构预测AI 直接做序列生成的思路本质上是把问题重新建模不再把结构当作必经变量而是直接学习“序列 - 功能”的映射。模型在训练时见过的不是一堆原子坐标而是大量带标签的 RNA 序列样本标签可能是“这个序列在核糖体实验里翻译效率高”“这个序列是某个核酶的活性形式”“这个序列在细胞里稳定存在”。当训练数据足够多、数据中的规律足够明确时神经网络能隐式学会哪些序列模式对应哪些功能特征。生成时你提供功能约束模型直接吐序列候选分子中间没有显式的结构预测模块。这不代表模型完全无助地猜序列它很可能隐式记住了结构规律只是不再用可微的 3D 预测模块把它显式建模出来。从工程角度说这种“跳过中间变量、直接优化目标”的做法和端到端深度学习在其他领域的成功逻辑完全一致。自动驾驶里跳过手工特征直接输出控制信号语音合成里跳过频谱特征直接生成波形都是同一个思路。3. “绕过 3D 结构预测”的技术原理拆解这一节重点讲模型侧可能采用的技术路径。由于论文全文的架构细节必须看原文这里给出通用技术框架帮助你把论文读得更顺。3.1 序列编码表示RNA 序列要喂给神经网络先要变成数值张量。常见编码方式如下字典编码把 A、U、G、C 映射成 0、1、2、3。One-Hot 编码每个碱基变成 4 维向量比如 A [1,0,0,0]。K-mer 编码把长度为 k 的碱基片段作为基本单位能捕获局部模式。结构引导编码额外拼接二级结构点括号标注或化学修饰谱数据作为条件输入。如果论文强调“绕过 3D 结构预测”那么模型训练时很可能不输入原子坐标或残基接触图而是用更轻量的约束例如二级结构基序、自由能阈值、特定位置的碱基偏好。这能大幅简化特征工程。3.2 生成模型主流架构RNA 序列生成可以用几种不同的模型架构实现从公开技术趋势看候选方案包括自回归 Transformer按序列位置逐碱基生成每次预测下一个碱基的概率分布。优点是上下文依赖建模能力强适合长序列缺点是生成速度慢且错误会累积。扩散模型对连续潜在表征加噪去噪或者对离散序列做多步去噪。优点是生成质量高、多样性可控缺点是训练和采样都比较重。GNN VAE把 RNA 二级结构建模为图结构用图神经网络编码再用变分自编码器生成序列。优点是可解释性好能在生成时明确控制结构约束。遗传算法 代理模型先随机生成一批序列用打分模型评估再通过变异和交叉迭代。优点是工程上容易落地不需要大规模生成模型缺点是搜索效率不如深度生成模型。论文方法很可能会结合多种架构例如用预训练的 RNA 语言模型做基础特征提取器再连接一个生成头。尤其值得注意的是RNA 领域已经积累了核酸语言模型比如基于海量基因组序列预训练的模型这类模型能捕获剪接位点、RNA 结合蛋白基序等高阶模式让下游生成任务不需要从零开始学基础语法。3.3 条件控制和约束注入真正能用 RNA 设计的模型必须有条件控制能力。输入条件可能包括序列长度范围。GC 含量目标范围。指定位置必须出现的碱基或基序。二级结构约束例如要求在某个区间形成茎环。功能标签例如“适配体目标蛋白为 TPS”“实现细胞核定位”“毒性低”。Transformer 模型通常用条件 token 拼接或交叉注意力机制注入这些约束。扩散模型则在去噪过程中加入条件向量。关键点是模型必须能同时满足多个约束这是 RNA 设计里最容易失败的地方。如果你复现模型后发现生成序列只满足长度约束、不满足 GC 约束那大概率是条件注入的权重没调好。4. 数据准备与评估指标论文能成立说明数据和指标设计一定做得比较扎实。这里给出一套通用做法也方便你判断论文中哪些数据支撑了最终结论。4.1 训练数据来源RNA 设计模型训练数据通常来自以下几类公共序列数据库如 NCBI 的 GenBank、Rfam、RNAcentral能提供大量天然和人工设计的 RNA 序列。结构数据库如 PDB 中的 RNA 三维结构、RNA 二级结构注释。注意论文说“绕过 3D 结构预测”不等于完全不用结构数据。它可能在预训练阶段用过结构数据辅助学习只是推理阶段不再依赖结构预测环节。功能实验数据例如高通量测序得到的核酶活性数据、RNA 适配体筛选数据、核糖体翻译效率数据。化学修饰图谱SHAPE-MaP、DMS-seq 等数据能间接给出 RNA 结构特征比完整 3D 结构更容易大规模获取。训练数据的质量直接影响生成效果。天然序列多样性足够但可能缺少极端功能标签实验室数据标签准确但规模有限。优秀的论文通常会把多源数据混合并用专门的数据增强策略提升模型的泛化能力。4.2 数据划分的陷阱RNA 序列数据划分不能像普通图像任务那样直接随机切分因为同源序列比例很高。如果训练集和测试集来自同一个 RNA 家族模型很可能只是“记住了家族共性的模版”而不是真正学到了功能规律。正确的划分方式是按序列相似性聚类保证测试集与训练集相似度低于一定阈值。你复现论文时要用 CD-HIT 或 MMseqs2 按 80% 相似度去冗余再切分数据。4.3 评估指标体系一篇好的 RNA 设计论文不会只看生成序列有多像训练数据而是要看生成序列是否满足约束、能否折叠成预期结构、能否在功能实验中存活。典型评估指标如下评估维度指标说明序列有效性序列字符合法性、长度分布基础质量检查不合格直接丢弃约束满足度指定基序保留率、GC 含量误差判断模型是否真正执行了条件控制结构可折叠性最小自由能MFE、结构多样性用 RNAfold/NUPACK 计算预测折叠结构结构相似性与目标二级结构的距离用结构比对分数衡量功能保留率实验验证阳性率最严格的标准需要湿实验多样性生成序列两两之间的编辑距离避免模型只会输出同质化序列新颖性与训练集最大相似度判断模型是否在死记硬背从工程复现的角度看前五项是干实验就能完成的第六、七项是判断生成模型质量的必备检查。建议你在验证模型时先跑一个 100 条的批量生成用 RNAfold 检查候选序列的最小自由能分布如果 MFE 普遍很高说明模型生成的序列折叠能量上不合理需要调生成温度或加结构约束。5. 模型训练与湿实验验证流程5.1 训练流程概览RNA 设计模型训练流程和自然语言生成模型非常相似大体分为四步对训练数据进行预处理、去重复、划分聚类。选择预训练模型或从头训练编码器得到 RNA 序列的向量表征。在表征之上训练生成头和条件控制模块用序列重建损失和结构约束损失联合优化。用验证集评估生成质量调整超参和约束权重。需要注意这里说的损失函数往往是多目标的。只有一个“预测下一个碱基”的交叉熵损失还不够通常需要加上结构一致性损失生成序列的预测二级结构与目标结构的差异。约束惩罚项GC 含量偏差、基序缺失等。物理合理项考虑热力学稳定性例如最小自由能过高则增加惩罚。这种多目标优化是 RNA 设计模型与普通语言模型最大的区别。如果你复现一个开源模型但效果不佳优先检查损失函数是否完整覆盖了这些目标而不是急着换模型架构。5.2 干实验验证干实验验证是所有工程师最容易上手的部分。即使没有生物学实验条件也可以完成以下验证用 RNAfold 计算生成序列的最小自由能看分布是否合理。用 NUPACK 做多序列平衡分析检查二级结构是否与目标一致。用 blast 比对生成序列与已知 RNA 家族序列确认新颖性。检查序列是否包含终止密码子、连续寡聚序列等不利于实验合成的模式。这一步花费极低却是过滤大量无效候选序列的最快方法。通常生成一万条候选序列经过干实验筛选能留下几百条进入湿实验验证。5.3 湿实验衔接湿实验验证是论文可信度的关键。对 RNA 设计来说湿实验通常包括体外转录把 DNA 模板转录成 RNA检测转录效率。折叠实验用 SHAPE 或 DMS 化学修饰检测 RNA 的真实结构。功能实验对核酶检测切割活性对适配体检测结合亲和力对 mRNA 检测翻译效率。稳定性实验在细胞裂解液或血清中检测 RNA 降解半衰期。作为工程师你可能没法直接操作这些实验但必须理解实验反馈如何回到模型迭代闭环。论文的“AI 设计 - 湿实验验证 - 反馈修正模型”循环比一次性的静态预测更有价值。如果论文只是展示了一批设计序列并说“预测结构很好”没有湿实验数据那科学说服力会弱很多。6. 推理部署与批量序列设计如果模型权重和推理代码已经公开工程侧的落地方式就很直观了。这里给出通用部署流程和批量设计框架实际命令以仓库 README 为准。6.1 环境准备RNA 生成模型通常基于 PyTorch 实现环境准备与标准深度学习项目一致# 创建虚拟环境Python 版本具体要求看项目 conda create -n rna-design python3.10 conda activate rna-design # 安装核心依赖 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install transformers biopython numpy pandas生物信息工具按需要安装# RNA 二级结构和热力学分析 conda install -c bioconda ViennaRNA pip install nupack如果论文仓库提供了 requirements.txt直接用它生成环境即可。注意不同 RNA 分析包之间有版本兼容性冲突建议严格锁定版本。6.2 模型加载与单条序列生成假设项目提供了 Python 推理接口通用加载流程如下from rna_design import RNADesignModel, tokenizer # 加载模型权重实际路径替换为仓库中的 checkpoint model RNADesignModel.from_pretrained(./checkpoints/rna_design_v1.pt) model.eval() # 定义设计条件 conditions { length: 80, gc_content: (0.4, 0.6), motif: AUG, stem_loop: [10, 30] # 第10到30位形成茎环 } # 生成单条序列 sequence model.generate(conditionsconditions, temperature0.8) print(sequence)注意上面是伪代码风格的调用方式不同仓库接口名差异很大。你要做的是先读仓库里的inference.py或README.md把函数名和参数映射到自己的封装层里。6.3 批量生成与筛选流水线RNA 设计最实用的工作流是批量生成候选序列再用一套打分模型过滤。建议用 Python 脚本统一管理。import csv import numpy as np import RNA # ViennaRNA Python 接口 from rna_design import RNADesignModel model RNADesignModel.from_pretrained(./checkpoints/rna_design_v1.pt) model.eval() conditions { length: 100, gc_content: (0.45, 0.55), motif: AUG } def score_sequence(seq): 打分函数结合结构稳定性和约束满足度 # 计算最小自由能 (mfe, _) RNA.fold(seq) # 简化打分负值 MFE 表示结构更稳定这里取负值转正 structure_score -mfe # 检查 GC 含量 gc (seq.count(G) seq.count(C)) / len(seq) gc_penalty abs(gc - 0.5) return structure_score - 0.5 * gc_penalty # 批量生成 candidates [] for i in range(500): seq model.generate(conditionsconditions, temperature0.9) score score_sequence(seq) candidates.append((seq, score)) # 排序并输出 Top 50 candidates.sort(keylambda x: x[1], reverseTrue) top_50 candidates[:50] with open(top50_rna_candidates.csv, w, newline) as f: writer csv.writer(f) writer.writerow([sequence, score]) for seq, score in top_50: writer.writerow([seq, round(score, 4)]) print(批量生成完成Top 50 已保存)这套流水线把 AI 生成和经典 RNA 热力学分析结合起来了。实际项目中你可以替换打分函数为更复杂的模型比如单独训练一个结构预测代理模型做打分效果通常比单纯的 MFE 更好。6.4 封装 API 服务如果要把模型接入内部工具链建议封装成 HTTP 服务。一个可用的 FastAPI 示例from fastapi import FastAPI from pydantic import BaseModel from rna_design import RNADesignModel app FastAPI() model RNADesignModel.from_pretrained(./checkpoints/rna_design_v1.pt) model.eval() class DesignRequest(BaseModel): length: int 80 gc_min: float 0.4 gc_max: float 0.6 motif: str AUG batch_size: int 10 app.post(/design) def design_rna(req: DesignRequest): conditions { length: req.length, gc_content: (req.gc_min, req.gc_max), motif: req.motif } sequences [model.generate(conditionsconditions, temperature0.9) for _ in range(req.batch_size)] return {sequences: sequences} if __name__ __main__: import uvicorn uvicorn.run(app, host127.0.0.1, port8000)启动后用 curl 直接测试curl -X POST http://127.0.0.1:8000/design \ -H Content-Type: application/json \ -d {length: 80, gc_min: 0.4, gc_max: 0.6, batch_size: 5}注意这类科研模型的推理接口稳定性一般不如商业模型批量请求过大容易导致显存溢出。建议在 API 层加队列和超时控制。7. 性能观察与成本控制7.1 推理速度与显存占用RNA 序列长度通常几十到几百个碱基和动辄几千 token 的文本生成模型比长度压力小很多。但生物序列模型如果用了较重的 Transformer 结构显存占用依然可能很高。从通用经验来看一个百兆参数级别的 RNA 生成模型在单卡 3090/4090 上推理单条序列生成大约在秒级。如果一次批量生成几百条序列建议把batch_size控制在 8 到 32 之间避免显存溢出。如果模型参数量达到十亿级别那推理需要 A100 级别显卡普通单卡很难跑动论文里一般会有说明。以上数字是通用推断论文实际模型规模和显存需求必须去 Methods 部分确认。你在本机验证时可以用nvidia-smi实时监控显存占用。7.2 CPU 推理的可行性RNA 序列生成任务如果模型不大、序列不长CPU 推理也能跑通只是速度慢不少。建议先用 GPU 做批量试验再把推理脚本放到 CPU 环境做回归验证。实际落地时如果 AI 生成只作为流水线第一步后接大量 RNA 热力学分析那些分析工具大多是 CPU 版本整体流程其实可以不在 GPU 集群上跑完。7.3 批量任务稳定性批量任务容易在长时间运行后崩溃。建议批量生成加入断点续跑逻辑每生成 100 条保存一次 checkpoint。在循环内部捕获异常单条失败不中断整体任务。对生成结果去重避免重复序列进入下游筛选。输入输出分目录管理建议目录结构如下project/ ├── data/ │ ├── raw/ # 原始训练数据 │ └── processed/ # 预处理后数据 ├── checkpoints/ # 模型权重 ├── results/ │ ├── candidates/ # 生成候选序列 │ └── screens/ # 打分筛选结果 └── scripts/ # 训练和推理脚本8. 常见问题与排查方法AI 与生物序列结合的工程复现坑比普通深度学习项目更多。下面列出高频问题。问题现象可能原因排查方式解决方案生成的序列总是很短或长不长长度条件未正确注入或模型生成到终止符提前停止检查条件编码逻辑和模型生成代码在生成时强制指定长度最后做 padding 或截断GC 含量和目标偏差大条件中 GC 约束权重过小绘制 GC 含量分布图并与目标区间对比提高 GC 约束在损失函数中的权重生成序列结构稳定性差模型只学到了序列模式没有学到折叠约束用 RNAfold 计算 MFE 分布添加结构约束损失或在打分阶段过滤掉高 MFE 序列生成序列之间高度相似模型温度参数过低或训练数据多样性不足打印生成序列的编辑距离分布提高采样温度或增加数据增强复现结果与论文不一致数据划分方式不同、超参未对齐、随机种子不同对比数据处理流程和超参配置按论文补充材料重新配置显存溢出batch_size 过大或序列过长观察 nvidia-smi 显存占用降低 batch_size、使用梯度检查或混合精度推理速度太慢模型过大或没有开启 GPU检查是否真的在用 GPU确认 device 设置开启 bf16/fp16 推理湿实验阳性率低生成序列是计算合理但生物不可合成检查序列是否包含复杂重复区域或毒性结构增加实验反馈数据到训练集微调模型除了表格里的问题最容易忽视的是数据泄漏。如果论文没有明确说明去冗余方法你在复现时用默认随机划分的数据集评估指标会虚高。建议用 CD-HIT 按 80% 相似度去冗余后重新评估。另一个工程坑是打分函数设计不合理。很多人喜欢把多个指标直接加权相加但不同指标量纲差异很大。更好的做法是设计成约束式筛选先用硬性约束过滤比如必须包含起始密码子、GC 含量必须在区间内再用软性分数排序。这样可以避免某个指标在加权求和里被其他指标淹没。9. 最佳实践与合规使用建议9.1 工程侧最佳实践第一次验证时用小参数量模型跑通全流程确认数据格式、损失函数和评估指标没有 bug再上大模型。保留一套最小可运行配置便于快速回归。所有实验记录随机种子、模型版本、数据划分方式、超参配置这对复现论文和排查问题至关重要。批量任务要加日志和失败重试别让一条坏数据拖垮整个流水线。接口服务要限制访问范围不要随便暴露到公网尤其当模型能力可能被滥用时。9.2 生物安全与合规边界RNA 设计是合成生物学的基础工具天然具有双刃剑属性。实际使用必须注意涉及病毒序列、毒素蛋白编码序列、致病基因片段时必须遵守《生物安全法》和相关实验室管理规定。所有合成 DNA/RNA 实验都需要通过机构伦理委员会和生物安全委员会审批。设计结果只能用于合法、合规的科研和药物研发用途不得用于制造生物武器或规避监管。进入湿实验前建议用专门的保守序列筛查工具检查设计序列是否含有潜在毒性或致病因子片段。9.3 知识产权与版权合规论文训练的模型和数据可能受版权和专利保护商用前要确认授权协议。从公共数据库获取的训练数据要看清楚每类数据的使用条款特别是人类基因组相关序列数据有严格隐私限制。生成序列的新颖性需要通过公开数据库比对确定避免无意中侵权已有专利。10. 总结与下一步这项研究真正值得关注的点不在于“AI 很强大”这层表面叙事而是它把 RNA 设计从“结构预测驱动”的重流程转变成了“功能约束驱动”的轻流程。工程侧最值得先验证的是模型生成序列是否真的能同时满足多个约束并保持结构稳定性和序列多样性。最容易踩的坑则是数据划分泄漏、约束权重失衡和打分函数设计不合理。如果你打算跟进这个方向建议优先做三件事。第一去论文主页查清楚权重是否公开如果没公开先用同类开源模型跑流程。第二把干实验验证管线搭建起来至少能把生成的序列批量跑 RNAfold统计 MFE 和结构分布。第三建立一个实验反馈记录表把湿实验阳性序列和阴性序列都记录下来这是未来微调模型最宝贵的数据资产。后续的扩展方向可以关注把模型迁移到其他核酸类型如 mRNA 编码序列优化、tRNA 设计、DNA 调控元件设计以及在生成框架中加入强化学习用湿实验反馈实时优化生成策略。这里面的工程空间很大适合有 AI 开发能力和湿实验条件交叉背景的团队长期做下去。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进