ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI绕开3D结构预测实现RNA设计,Science封面方法全解

AI绕开3D结构预测实现RNA设计,Science封面方法全解 做 RNA 序列设计的时候我最初接触的路线是“结构预测优先”先用深度学习模型把 RNA 折叠成什么样的 3D 结构算出来再反推序列。这套流程听起来完整真正跑起来却很痛苦——结构预测有误差序列设计又有误差误差一步一步累积最后进入湿实验的候选序列往往要经过好几轮返工。直到我看到这篇登上《Science》封面的工作才意识到一个关键问题也许我们根本不需要把“3D 结构预测”当作 RNA 设计的必经之路。AI 完全可以绕开它直接学习“序列到功能”的映射从功能出发生成可用的 RNA 序列。这篇文章我会从 RNA 设计的基本问题讲起对比传统“先结构后序列”和 AI“结构无关直接生成”两种范式拆解这篇 Science 封面工作的技术思路再用 Python 写一套可运行的验证流程最后总结常见问题、最佳实践和学习路线。无论你是做 AI 应用的开发者还是对生物信息学感兴趣的算法工程师这篇文章都能帮你建立完整的方法论框架。1. 背景与核心概念为什么 RNA 设计长期卡在 3D 结构预测1.1 RNA 设计的本质问题RNA 是生命体内一类非常特殊的分子。它既像 DNA 一样携带遗传信息又能像蛋白质一样折叠成特定空间结构并执行功能。一条 RNA 序列的基本组成很简单只有四种碱基腺嘌呤A、胞嘧啶C、鸟嘌呤G和尿嘧啶U。但正是这四种碱基的组合决定了 RNA 的二级结构碱基配对形成的茎环、发夹等局部结构、三级结构空间折叠最终决定它能不能结合某个蛋白质、能不能调控基因表达、能不能作为药物靶点。RNA 设计的核心问题可以概括为一句话给定一个想要的功能找到一条能实现该功能的 RNA 序列。这句话听起来简单实际做起来难在“功能”这个指标特别难量化。有些功能是“结合特定小分子”有些是“在细胞内被剪接酶识别”有些是“翻译成特定蛋白”还有些只是“能稳定折叠成一个特定形状”。同一个功能需求可能对应无数条候选序列但真正有效的往往只占极少数。传统方法把这个问题拆成两步先预测 RNA 的 3D 结构再根据结构反推序列本质上是在“序列空间”和“结构空间”之间来回搜索。1.2 传统“先结构预测、再序列设计”的瓶颈传统 RNA 设计流程长这样功能需求 → 预测目标 3D 结构 → 从结构反推序列 → 计算验证 → 湿实验验证这个流程每一步都有其合理性但每一步也都有显著的瓶颈。第一RNA 3D 结构预测本身不完美。RNA 分子的柔韧性比蛋白质强很多同一个序列在溶液里可能同时存在多种构象而且温度、离子浓度、结合蛋白的存在都会让结构发生漂移。即使像 AlphaFold3 这样的模型对 RNA 结构的预测精度也远没有达到对蛋白质那样可靠。如果第一步预测就不准后面所有基于该结构的设计都会跟着出错。第二从结构反推序列是一个“一对多”的逆向问题。一个特定结构可能对应成千上万条序列但其中只有少数能在真实环境中稳定折叠成所需构象。传统方法解决这个逆向问题的方式是用能量函数打分搜索比如 RNAfold、NUPACK、Rosetta 等工具。能量函数是物理近似速度慢不说还经常忽略长程相互作用、假结pseudoknot和共转录折叠动力学。第三也是最容易被忽略的一点RNA 的功能并不完全由静态 3D 结构决定。有些 RNA 的作用机制依赖构象变化有些依赖局部序列基序被蛋白质识别有些依赖翻译时的核糖体行为。如果设计流程只盯着“最终折叠成什么形状”就会丢失大量和功能直接相关的序列信息。换句话说结构预测是帮助理解 RNA 的重要手段但它不应该成为 RNA 设计的必经收费站。1.3 这篇《Science》封面工作带来什么改变这篇登上《Science》封面的工作做了一件听上去很简单、实际上方法论冲击力很大的事让 AI 直接从序列预测功能再从功能需求生成序列全程不依赖 3D 结构坐标。具体来说它不再让模型回答“这条序列会折叠成什么结构”而是让模型回答“这条序列能不能实现目标功能”。然后在反向生成时模型直接在庞大的序列空间中采样筛选出高概率满足功能约束的候选序列。这样的设计思路把 RNA 设计从一个“先物理建模、再搜索序列”的经典计算问题变成了一个“端到端学习、直接映射”的 AI 生成问题。需要说明的是这篇文章的方法细节、模型名称、实验验证范围要以论文原文和官方发布的补充材料为准。但即便只看方法论层面“绕过 3D 结构预测”这个思路本身就值得所有做 AI 落地的人认真思考当中间环节误差太大、成本太高时与其拼命优化中间环节不如重新思考中间环节是否真的不可替代。2. RNA 设计的传统范式与 AI 介入的两种路线2.1 正向问题结构预测在生物信息学里RNA 结构预测被称为“正向问题”给定序列预测结构。这个方向已经发展了四十多年从最早的动态规划算法如 Zuker 算法的最小自由能模型到后来的机器学习打分模型再到深度学习端到端预测精度在不断提升。但 RNA 结构预测相对蛋白质结构预测有一个天然劣势RNA 的构象采样空间更大实验测定的结构数据更少。蛋白质结构数据库PDB里 RNA 结构占比很低而且多数 RNA 结构都是和蛋白质结合后的复合物构象未必代表游离状态下的天然构象。数据不足直接限制了监督学习模型的精度上限。这也是为什么“先预测结构再设计序列”的路线一直没有出现 AlphaFold 式的爆发。2.2 逆向问题根据目标功能设计序列RNA 设计是“逆向问题”给定目标结构或目标功能反推序列。传统逆向设计通常分为两类第一类是结构逆设计。给定一个目标二级结构点括号表示法例如(((...)))表示一个发夹结构搜索能量最低的序列。典型工具包括 RNA Designer、Rosetta 的 RNA 设计模块。优点是目标明确缺点是需要人工指定结构而且设计出来的序列经常在真实环境中折叠不稳定。第二类是功能直接设计。不指定具体结构而是指定一个功能指标例如“能结合某小分子”“能切开某条靶标 RNA”“不被核酸酶降解”然后用进化算法、遗传算法或强化学习去搜索序列。这类方法更贴近生物真实需求但在传统方法下计算代价很大搜索空间是 4 的 n 次方n 稍微长一点就爆炸。2.3 结构预测 vs 结构无关一条分水岭这篇 Science 封面工作最核心的方法论分水岭就是“结构无关”。它跳过了“先把序列映射为坐标、再把坐标映射为序列”的两步走直接用监督学习或者生成模型学习“序列→功能”的映射。这样做有几个实际好处误差不叠加。中间少一个结构预测环节就少一类系统误差。数据来源更广。序列和功能标签比序列和 3D 结构标签容易获取得多高通量表型筛选、SELEX 适配体筛选、大规模基因敲除实验都能提供“序列→功能”训练对。搜索更高效。生成模型可以在序列空间直接采样不需要像传统方法那样反复调用折叠能量函数打分。当然结构无关不等于结构无用。结构信息仍可以作为辅助特征、先验约束或事后的可解释性分析工具。真正的关键是结构不再是设计的必需中间产物。2.4 两条路线对比对比维度传统“结构优先”路线AI“结构无关”路线核心流程序列→3D结构→序列序列↔功能直接映射主要工具RNAfold、NUPACK、Rosetta深度学习生成模型、预测器主要瓶颈结构预测误差累积、能量函数计算慢功能标签数据稀缺、湿实验验证成本高适用场景结构清晰、功能依赖静态构象的RNA功能机制复杂、结构动态变化的RNA输出形式通常是一次性给出少量候选可批量生成多样候选序列典型成本计算阶段慢序列成功率相对低训练阶段贵推理阶段快从工程角度看传统路线更像是一个“物理模拟器 搜索器”AI 路线更像是一个“数据驱动的生成器”。前者的优势是可解释、不依赖数据规模后者的优势是端到端、能捕捉复杂非线性的序列功能关系。两者在现阶段不是互相取代而是互相补充。3. 技术拆解绕过 3D 结构预测的 AI 设计方法3.1 端到端“序列→功能”映射绕过 3D 结构预测之后AI 模型需要回答两个基本问题第一给定一条序列它实现目标功能的概率有多高这本质上是一个判别模型类似一个打分器。它可以是一个卷积网络、Transformer 编码器也可以是预训练 RNA 语言模型后面接一个预测头。第二给定功能需求怎样采样得到大量候选序列这本质上是一个生成模型类似一个序列采样器。它可以是一个自回归语言模型、变分自编码器VAE、扩散模型或者强化学习策略网络。判别器和生成器通常配合使用生成器负责在序列空间探索判别器负责筛选和反馈。如果生成器本身就是可微的还可以用梯度上升不断优化序列。整体流程可以抽象成功能描述编码 → 序列生成 → 序列功能打分 → 迭代优化 → 多样化候选集 → 湿实验验证3.2 生成模型的两种代表思路结合我平时在 AI 工程实践中的经验我认为目前 RNA 序列生成主要有两种可以落地的模型思路。第一种是自回归语言模型。把 RNA 序列当成一种“自然语言”用海量 RNA 序列预训练一个语言模型让它学会 RNA 序列的“语法”也就是序列模式、保守基序、结构偏好。设计时通过条件输入引导生成方向比如在序列前缀里嵌入功能区信息或者用控制标记control token指定长度、GC 含量、目标类别。优点是生成速度快、序列语法自然缺点是难以精确控制全局结构性质可能出现局部合理、全局折叠崩坏的情况。第二种是扩散模型或 VAE 这类隐空间生成模型。把 RNA 序列编码到连续隐空间在隐空间里做采样、插值和约束优化再解码回序列。优点是可以把结构约束、功能评分直接加进采样目标更容易实现多目标优化缺点是离散序列的扩散模型训练难度高解码器本身可能成为瓶颈。这两种思路都可以搭配迭代精修先生成一批候选序列用功能判别器或快速折叠工具打分保留下高分序列作为下一轮生成的种子。这种“生成-筛选-再生成”闭环既能提高成功率又能避免模型陷入单一的局部最优。3.3 训练数据与评估指标“结构无关”路线最大的瓶颈不是模型而是数据。可用的数据来源一般有几类高通量实验数据例如大规模平行报告分析MPRA能同时测量数以万计 RNA 序列的表达或翻译活性。SELEX 筛选数据能得到大量“能结合靶标”的适配体序列。公共数据库例如 RNAcentral、Rfam、ENCODE 的转录组数据、GEO 里的功能筛选数据。文献里的点突变数据虽然规模小但能提供精细的序列-功能关系。评估指标方面需要分层来看。模型训练阶段通常看序列生成的有效性、多样性、结构合理性。有效性可以用“生成序列能否被折叠成目标二级结构”衡量多样性可以用序列两两之间的编辑距离或聚类数衡量结构合理性可以用 ViennaRNA 的最小自由能或二级结构匹配度衡量。进入湿实验阶段最终指标只能是实验测得的活性。这也是提醒所有做 AI 应用的人模型指标再漂亮都不代表真实世界一定买账。AI 只能压缩搜索空间不能替代物理实验。3.4 为什么“绕过结构”是可行的可能有人会问RNA 的结构决定功能是分子生物学的铁律绕开结构预测怎么还可行这里的关键在于“结构预测”和“结构信息”是两个概念。AI 模型虽然没有显式输出 3D 结构但它可以在隐层表示中隐式学习到很多结构规律。一个预训练 RNA 语言模型的注意力矩阵往往已经编码了碱基配对偏好、保守结构域等模式。换句话说模型不是“不知道结构”而是“不需要把结构作为中间产物显式输出”。从工程角度看显式输出结构会带来三重损耗预测误差、坐标离散化误差、以及结构到函数的再次建模误差。隐式学习把这些损耗全部吸收进端到端优化里让模型自己决定哪些结构特征值得保留、哪些可以忽略。这也是端到端学习在感知、语音、蛋白质设计等领域反复被验证有效的核心原因。3.5 局限与边界绕开 3D 结构预测并不意味着这个方向没有边界。首先是数据依赖问题。功能标签越难获取模型训练就越困难。对于“结合某个未知蛋白”这种全新功能如果没有构建相应的筛选实验AI 模型很难凭空生成有效的适配体。其次是可解释性不足。显式结构预测带来的一个好处是当设计失败时你可以回到结构里找原因。结构无关的模型设计失败时你只能看到“分数低”很难直接定位是哪个区域折叠错误。这给后续改进带来了困难。还有就是适用范围。对于那些功能高度依赖精确空间构象的 RNA比如核酶ribozyme或者核开关riboswitch的催化核心绕过结构约束直接生成序列成功率可能有限。最稳妥的工程策略是在结构无关生成模型输出的基础上用结构工具做一轮事后检验把两类方法的长处结合起来。4. 实战视角用 Python 跑一遍 RNA 设计验证流程这一节我从工程落地角度带大家跑一遍完整的 RNA 序列设计验证流程。环境基于 Linux 或 macOSPython 3.9重点演示三个工具ViennaRNA 做二级结构校验、遗传算法做序列优化、PyTorch 跑一个最小生成模型。完整的科技类代码示例都可以直接复制运行。4.1 环境准备先安装依赖# Python 3.9 环境 pip install ViennaRNA pip install torch pip install numpy其中 ViennaRNA 是 RNA 二级结构预测和设计的经典工具库提供RNA.fold等接口。安装成功后在 Python 里验证import RNA print(RNA.__version__)如果输出版本号说明安装正常。不同的 ViennaRNA 版本接口基本一致但个别函数参数可能有差异以你本机环境输出为准。4.2 用 ViennaRNA 校验序列二级结构在 AI 生成大量候选序列之后通常需要先做一轮快速结构校验过滤掉明显无法折叠的序列。这是一个非常实用的工程步骤代码如下import RNA def check_structure(seq): 预测 RNA 序列的二级结构并返回结构字符串和最小自由能。 最小自由能越负折叠越稳定。 structure, mfe RNA.fold(seq) paired sum(1 for ch in structure if ch in ()) ratio paired / len(structure) * 100 return structure, mfe, ratio seq GGGAAACCC structure, mfe, ratio check_structure(seq) print(序列:, seq) print(二级结构:, structure) print(最小自由能: %.2f kcal/mol % mfe) print(配对比例: %.2f%% % ratio)预期输出类似序列: GGGAAACCC 二级结构: (((...))) 最小自由能: -2.10 kcal/mol 配对比例: 66.67%(((...)))表示序列形成了一个经典的发夹结构两端的 GC 碱基配对中间的 AAA 形成环区。这个工具可以用来快速验证生成序列是否具备预期的二级结构特征。4.3 一个简单的 RNA 序列优化脚本下面用一个遗传算法示例演示如何从随机序列出发优化到一条能折叠成目标二级结构的 RNA。虽然这个算法简单但它体现了“功能打分 迭代搜索”的核心思想是结构无关设计的雏形import random import RNA # 目标二级结构一个 9 nt 的发夹 TARGET (((...))) N len(TARGET) POPSIZE 50 GENERATIONS 30 def random_seq(): return .join(random.choice(ACGU) for _ in range(N)) def fitness(seq): 折叠后与目标结构的点括号表示匹配比例越高适应度越高 structure, _ RNA.fold(seq) matches sum(1 for a, b in zip(structure, TARGET) if a b) return matches / N def mutate(seq): 随机替换一个位置的碱基 pos random.randrange(N) base random.choice(ACGU) return seq[:pos] base seq[pos 1:] # 初始化种群 population [random_seq() for _ in range(POPSIZE)] for gen in range(GENERATIONS): population.sort(keyfitness, reverseTrue) best population[0] best_fit fitness(best) print(f第 {gen 1:2d} 代 最优适应度{best_fit:.2f} 序列{best}) if best_fit 1.0: break # 精英保留前 10 个其余由前 20 个的变异产生 next_pop population[:10] while len(next_pop) POPSIZE: parent random.choice(population[:20]) next_pop.append(mutate(parent)) population next_pop structure, mfe RNA.fold(population[0]) print(最终序列:, population[0]) print(最终结构:, structure) print(最小自由能: %.2f kcal/mol % mfe)实际运行中遗传算法通常能在几十代内收敛到完全匹配目标结构的序列。这个示例说明即使不用复杂的深度学习模型只要定义清楚打分函数搜索算法就能在序列空间里找到不错的候选。真正的 AI 模型做的事情本质上是一样的只是把打分函数替换为学习到的“序列→功能”映射。4.4 最小深度学习生成器示例下面再看一个最小化的 PyTorch 生成模型用 LSTM 训练一批随机 RNA 序列让模型学会 RNA 的“碱基转移概率”也就是下一个碱基的分布。这是自回归 RNA 语言模型的雏形import random import torch import torch.nn as nn # 字母表 BASES ACGU base2idx {b: i for i, b in enumerate(BASES)} # 构造训练数据500 条长度 30 的随机序列 random.seed(42) torch.manual_seed(42) seqs [.join(random.choice(BASES) for _ in range(30)) for _ in range(500)] data [[base2idx[b] for b in s] for s in seqs] x torch.tensor([d[:-1] for d in data]) # 输入前 29 个碱基 y torch.tensor([d[1:] for d in data]) # 标签后 29 个碱基 class TinyLSTM(nn.Module): def __init__(self, vocab4, embed32, hidden64): super().__init__() self.emb nn.Embedding(vocab, embed) self.lstm nn.LSTM(embed, hidden, batch_firstTrue) self.fc nn.Linear(hidden, vocab) def forward(self, x): h, _ self.lstm(self.emb(x)) return self.fc(h) model TinyLSTM() loss_fn nn.CrossEntropyLoss() optimizer torch.optim.Adam(model.parameters(), lr1e-3) for epoch in range(5): optimizer.zero_grad() logits model(x) loss loss_fn(logits.reshape(-1, 4), y.reshape(-1)) loss.backward() optimizer.step() print(fepoch {epoch 1} loss{loss.item():.4f}) # 使用模型预测给定起始碱基“A”的下一个碱基 model.eval() start torch.tensor([[base2idx[A]]]) with torch.no_grad(): logits model(start) prob torch.softmax(logits[0, -1], dim-1) next_idx int(torch.multinomial(prob, 1).item()) print(以 A 开头的序列下一个碱基预测为:, BASES[next_idx])运行后会看到 loss 逐步下降说明模型在学习到一个简单的碱基共现概率。真实的 RNA 语言模型会在这个基础上大幅扩展模型规模更大、训练数据来自真实转录组、结构约束通过损失函数注入并且会引入功能标签做条件生成。4.5 运行结果说明三个示例分别对应 RNA 设计流程的三种工程组件结构校验、序列搜索、序列生成。把它们串起来就构成一个简化版的 AI RNA 设计流水线生成器LSTM/语言模型→ 大规模采样 → 结构校验ViennaRNA→ 功能打分 → 湿实验在实际项目中生成器和打分器需要针对具体任务单独训练采样后的筛选规则也要根据功能指标调整。工程上我强烈建议把每一步封装成独立的函数或微服务方便后续替换模型和调整阈值。5. 常见问题与排查思路在 RNA 设计 AI 化的工程实践中我总结出几个高频问题整理成表格供大家快速排查。问题现象常见原因解决思路生成序列在湿实验中活性很低训练数据与目标功能分布不一致构建目标功能的专属筛选实验引入湿实验闭环反馈模型在评测集指标好但泛化差训练集和测试集序列高度同源存在数据泄漏用序列同源性聚类划分数据集而不是随机划分生成序列折叠后和预期结构不符没有做结构校验只依赖模型输出生成后用 ViennaRNA/RNAfold 做二级结构快速校验生成序列出现大量重复低复杂度碱基生成模型坍塌或者训练数据里低复杂度序列过多增加序列多样性惩罚删除或降采样低复杂度训练序列模型训练 loss 不下降学习率不合适或序列过长、梯度消失调整学习率改用 Transformer 或增加层归一化候选序列之间高度相似采样温度设置过低或搜索策略单一提高采样温度使用 Beam Search 变体或增加多样性奖励湿实验验证成本过高、反馈周期太长一次验证过多候选、无优先级排序先做聚类选择代表性序列按模型分数和结构多样性加权排序如果遇到“模型生成序列过不了结构校验”这类问题可以按照下面的流程排查先确认训练数据本身的结构分布是否合理。如果训练集里的序列大多数是中性的模型天然学不出强结构偏好。再检查生成参数。温度过高会导致序列混乱温度过低会导致序列保守但功能不足通常取值 0.8 到 1.2 之间做调参。最后检查打分函数是否和验证目标一致。模型内部打分是学习出来的如果训练标签和实际需求不一致再好的模型也会南辕北辙。6. 最佳实践与工程建议6.1 数据层面的建议“结构无关”路线最怕的不是模型弱而是数据脏。建议在数据准备阶段做三件事去冗余把同源性超过 80% 的序列聚类确保训练集和验证集没有重叠去噪声对来自公共数据库的功能标签做人工审核排除实验条件不一致导致的假阳性补边界尽量包含长度、GC 含量、复杂度覆盖范围足够广的序列避免生成器只学会训练集的表面分布。6.2 模型层面的建议实验设计上先跑小规模基线再上大模型。我经常看到团队一上来就训练很大的 Transformer结果数据和算力都不够效果反而不如带强先验的小模型。推荐顺序是先用现有 RNA 语言模型做 zero-shot 或 few-shot 实验看基线表现如果不够再用目标功能数据做微调最后才考虑从头训练大规模模型。评估阶段不要只看一个指标。建议同时监控序列有效性、多样性、结构合理性和湿实验阳性率四个维度任何一个维度严重偏科都说明流程存在隐患。6.3 湿实验闭环AI 设计的 RNA 序列最终必须经过实验验证。这里我要强调一个工程原则模型迭代必须和实验反馈构成闭环而不是模型训完就结束了。具体做法是每一轮实验验证后把实验阳性序列和阴性序列重新加入训练集更新打分模型再生成下一轮候选。这个“设计-合成-筛选-再训练”的循环才是 AI 驱动 RNA 设计真正起效的关键。AI 模型的定位应该是实验效率放大器而不是实验替代品。6.4 安全与伦理边界RNA 设计作为合成生物学的一环天然具有双刃剑属性。合理的设计可以帮助开发 mRNA 药物、新型疫苗、基因治疗工具但同样技术也可能被用于制造有害生物制剂。作为技术从业者我建议遵守几条底线原则只使用合法合规的序列数据库不公开发布可能被滥用为生物危害的序列进行任何涉及细胞、动物或人类样本的实验前必须获得机构伦理和生物安全审批在涉及合成序列外包时选择有资质的合成服务商并完整填报序列用途。同时数据库权限和数据合规问题同样重要。如果设计流程使用到私有数据需要在模型部署时严格配置访问控制避免未授权访问和数据泄露。7. 总结与学习路线这篇 Science 封面工作给整个 RNA 计算领域带来的最核心启示不是某个模型涨了几个点而是提供了一种思考范式的转变不是所有复杂问题都需要按照“先建中间模型、再造最终模型”的传统路径来解。在中间环节误差大、成本高、甚至不可靠的情况下端到端直接学习反而是更优的工程选择。从技术体系来看AI 绕过 3D 结构预测实现 RNA 设计涉及的能力栈包括RNA 分子生物学基础、二级结构预测工具使用、生成模型训练与调优、湿实验设计意识、还有围绕数据安全和生物安全的工程规范。能把这五块融会贯通的人未来在这个方向会非常有竞争力。如果你对这个方向感兴趣下一步可以按这样的顺序学习先掌握 ViennaRNA、NUPACK 等基础工具能用 Python 调用它们分析 RNA 二级结构。再系统学习序列深度生成模型包括 LSTM、Transformer、VAE、扩散模型在生物序列上的应用。然后读几篇 RNA 语言模型相关的工作理解预训练模型怎么在无标注序列上学到结构规律。最后找一个具体的 RNA 设计任务比如设计适配体或优化 mRNA 的 5 UTR完整跑一遍“生成-筛选-湿实验-反馈”闭环。实操中请记住模型输出的候选序列永远只是假设湿实验才是唯一裁判。设计时保持多轮迭代的耐心才是这个方向能走通的关键。
返回列表