训练大模型教会我的事,后来都用在了生物医药上
我的简历里有一行字:训练过语言模型。一行字背后是几百天的时间。从搭数据管线、训到一半 loss 炸了重来、把整套东西搬到华为昇腾 910B 上再踩一遍坑,到后来发现这套"训练语言模型"的思维居然能一路迁移到蛋白质预测…
我的简历里有一行字:训练过语言模型。一行字背后是几百天的时间。从搭数据管线、训到一半 loss 炸了重来、把整套东西搬到华为昇腾 910B 上再踩一遍坑,到后来发现这套”训练语言模型”的思维居然能一路迁移到蛋白质预测、再迁移到 AI 药物对接——这篇文章就是把这三次迁移完整讲一遍。
先交代清楚开源状态:医药侧(蛋白质、药物)的代码和模型,我暂时没有开源;语言模型侧的代码和仓库,在简历 V1 里提到的启智社区(OpenI)个人主页可以看到:openi.pcl.ac.cn/bhys ↗。所以下面讲方法论和踩坑为主,代码点到为止。
第一部分:从零训练大语言模型,我踩过的坑#
架构别发明,抄已经收敛的模板#
训练 LLM 最反直觉的一件事是:架构设计在这个年代几乎不构成竞争力。Stanford CS336 课程的 Tatsu 讲过一句话我印象很深——2024 年大家都在 cosplay Llama2,2025 年的主题是”怎么训得不崩”,2026 年变成”怎么扛住长上下文”。我自己的经验印证了这一点:把主流开源模型的架构参数并排放在一起,90% 的维度几乎一模一样:
- pre-norm:LayerNorm 挪出残差流,梯度反传更稳
- RMSNorm 替代 LayerNorm:减均值加 bias 那部分没帮上忙。RMSNorm 只做缩放不做平移:
- 所有 bias 全删:同上,省内存搬运(瓶颈在数据搬运,不在计算)
- SwiGLU/GeGLU 激活:Llama 系用 SwiGLU,Google 系用 GeGLU,区别极小。SwiGLU 是门控线性单元:
- RoPE 位置编码:2024 年后基本统一
- GQA(分组查询注意力):推理时 KV cache 的算术强度能崩到 ,GQA 把 KV 头分组共享,推理成本砍掉约 80%,表达力几乎不损失
结论很简单:别在架构上标新立异,把精力留给数据和训练稳定性。训崩过一次的人都会同意,架构收敛是好事。
数据工程:90% 的时间花在这里#
训练 LLM 的时间分配,数据至少占一半。开源语料的现实是:英文管够、中文稀缺。Common Crawl 里中文网页只占约 1.4%,英文占 55%;FineWeb 有 15T token,RedPajama-1T 里 CommonCrawl 网页数据占 87%——但这些都是英文生态。中文高质量开源预训练语料至今是个缺口,国内开源模型(Qwen、Baichuan、GLM)的预训练数据几乎全部闭源,这是个残酷的事实。
几个我实际用过的数据工程动作:
去重。 SlimPajama 的经验:先删短小低质文档,再用精确(13-gram)+ 模糊(MinHashLSH)全量去重,滤掉了近一半的重复 token。不要相信”爬下来的网页质量还行”——去重之后才知道有多少垃圾在占算力。
清洗的淘汰率。 RefinedWeb 从 Common Crawl 清洗后的文本淘汰率接近 90%。看到这个数字再回头看自己手里的原始语料,心理预期就对了。
tokenizer 是隐藏的坑。 原始 Llama 词表只有 32K,主要按英文语料训练,中文字符大多不在词表里,一个汉字要拼 2-3 个 byte token——序列长度暴涨、语义碎片化。所以训中文模型,tokenizer 一定要自己训或换中文友好的,不要直接继承 Llama 的。给领域模型加新 token 也有讲究:resize_token_embeddings 调整嵌入层之后,新 token 的嵌入默认随机初始化,会导致训练初期不稳定——正确做法是用当前嵌入层所有 token 的平均嵌入权重初始化新 token:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("qwen/Qwen2.5-7B")
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen2.5-7B")
new_tokens = ["[PROTEIN]", "[LIGAND]", "[POCKET]"]
tokenizer.add_special_tokens({"additional_special_tokens": new_tokens})
# 用平均嵌入初始化新 token,而不是随机初始化
with torch.no_grad():
mean_emb = model.get_input_embeddings().weight.mean(dim=0, keepdim=True)
new_indices = range(len(tokenizer) - len(new_tokens), len(tokenizer))
for i in new_indices:
model.get_input_embeddings().weight[i] = mean_emb
model.resize_token_embeddings(len(tokenizer))python数据集清洗与标注:这套流程后来被我省着用#
这部分我想单独拉出来讲,因为它是三次迁移里复用率最高的思维,也是我踩坑最密集的地方。语言模型的数据管线拆开看,就是四件事:去重、过滤、防污染、标注。后面做蛋白质和药物数据时,我几乎是把这四个动作原样搬过去。
去重。 全网语料的重复程度超乎想象。SlimPajama 用精确去重(13-gram hash 全量比对)+ 模糊去重(MinHash LSH 估计 Jaccard 相似度)两层,滤掉了约 48% 的重复 token。我当时的体会是:去重不只是省算力,更是防止”测试集泄漏”的第一道防线——公共语料里往往嵌着评测数据集的原文。HuggingFace 开源的 datatrove 把所有清洗步骤做成模块,按顺序拼起来就能跑:
from datatrove.pipeline.readers import ParquetReader
from datatrove.pipeline.filters import GopherQualityFilter, LanguageFilter, URLFilter
from datatrove.pipeline.dedup import MinHashDedupFilter
from datatrove.pipeline.writers import ParquetWriter
pipeline = (
ParquetReader("s3://my-corpus/raw"),
LanguageFilter("zh"), # 先按语言切分
URLFilter(), # 官方文档、站点导航等固定噪声
GopherQualityFilter(min_avg_word_length=3, max_bulk_whitespace=0.2),
MinHashDedupFilter(num_hashes=256, ngrams=13), # 精确+模糊两级去重
ParquetWriter("s3://my-corpus/clean"),
)python质量过滤。 语言模型领域的经典做法是 Gopher(DeepMind 给训练 2800 亿参数模型做清洗的那篇)和 C4 的启发式规则:按行过滤过短/过长、统计词频分布、过滤高比例标点的文本。后来转向分类器打分(用一个小模型判别”像不像人写的高质量文本”)。这套”规则保底 + 模型打分”的组合,我现在回想起来,和给药物分子做物理有效性过滤(键长键角、手性检查)是同一个逻辑。
防污染。 训完模型发现它”会”某些不该见过的题,是最尴尬的事。做法是建立敏感数据集指纹(GSM8K、MATH、HumanEval 的 n-gram 指纹),在清洗时精确剔除重叠片段。训生物模型时我做了同样的操作——PDB 里的蛋白和评测蛋白序列去重必须用序列相似度(90% 同源阈值)而不是字符串匹配,这个教训后面专门讲。
标注。 预训练数据不需要标注,但 SFT/RLHF 数据要。我的来源有三个:真实用户数据(质量最高,但量少、分布歪)、人工撰写(小批量”黄金样本”,当 seed 用)、大模型合成(强模型改写扩写,量大但质量有天花板,需要抽检)。质量控制三件事:多样性去重(指令语义去重,防止 100 条指令只是同义词排列)、质量抽检(人工打标通过率低于阈值的批次整批废弃)、安全过滤。RLHF 的偏好标注则是同一套质量控制套在”两两比较”上——我在蛋白质模型上从来没做过偏好标注,因为那个领域根本没有”哪个回答更好”这种便宜的标准,这也解释了为什么蛋白质模型普遍止步于”预测”而不是”生成对话”。
蛋白质和药物数据迁移过去,清洗动作不变,对象变了:
蛋白质序列清洗。 原始 UniProt 不能直接用。先按质量过滤:只保留”reviewed”或达到覆盖度阈值的条目,滤掉含非标准氨基酸、长度极端(<30 或 >5000)的序列;再去冗余——UniRef90 就是 UniProt 在 90% 序列一致度聚类后的结果,ESM 系预训练都用它,一句话概括就是”序列去重的蛋白质版”。工具是 MMseqs2,一条命令的事:
mmseqs easy-cluster proteins.fasta clusterRes tmp \
--min-seq-id 0.9 --cov-mode 1 -c 0.8 --threads 32bash--min-seq-id 0.9 就是 90% 一致度聚类,-c 0.8 要求 80% 覆盖——这两个参数对应着”多像才算重复”的判断,和语料去重里的 13-gram 阈值是同一类决策。
结构数据清洗(PDB)。 分子结构数据比序列脏得多。实验测定(X 射线、冷冻电镜)本身有分辨率好坏之分,惯例过滤:分辨率 > 3.5Å 的删掉,R-free 值过高(>0.3 附近)的删掉,只保留含蛋白配体的条目。还有一个隐蔽坑:PDB 里大量条目只是”同源蛋白的拷贝”(同一蛋白被不同课题组重复解析),直接拿去训会重复计算——所以 UniProt 的 seq id 去重要先用,PDB 里再做一次结构级去重。
药物对接数据标注(PDBBind)。 这是”标注”思维迁移最深的一处。对接模型的训练标签是实验测得的结合亲和力(Ki/Kd/IC50,以 log 尺度归一化),这些标注值来自湿实验,全世界只有几千到一两万个——和 LLM 动辄上亿的标注量完全不是一个数量级。数据量小,清洗策略就格外小心:
- 按时间去重:测试集用 2019 年之前收集的结构,防泄漏(和 LLM 的防污染完全同构)
- 蛋白序列 90% 一致度去重:防止同一靶点蛋白在训练和测试里同时出现
- 活性数据归一化:IC50/Ki/Kd 混合标注要先换算成同一尺度:(单位 nM 时即 pIC50),不然模型会被”单位差”带偏
- 物理合理性过滤:PoseBusters 检查表(键长键角、原子碰撞、手性)筛掉”结构上不可能”的坏样本——这和我给文本做质量过滤是一个直觉
这一节我想特别说一句:语言模型数据工程的每一条纪律,都能在生物数据上找到对应物,但生物数据的稀缺性把所有纪律都放大了。去重做得不干净,语料多 20% 只是浪费算力;蛋白质数据去重不干净,可能直接让评测指标虚高——因为测试蛋白可能已经在训练里见过 95% 相似的兄弟。
训练预算:EvoLM 教我的三件事#
Harvard/Stanford/CMU 的 EvoLM 论文(NeurIPS 2025 oral)用 100+ 个从零训练的 1B/4B 模型把预训练到 RL 的每个阶段扒透了。这些结论我对照自己的实践,句句命中:
- 预训练不是越多越好。 计算最优的数据量大致服从 (Chinchilla 结论),但 EvoLM 的实测是:1B 模型训 80B token 就饱和,超过 160B 下游任务性能直接退化——通用预训练训到参数量的 80-160 倍就够,再多是纯烧算力还伤泛化。
- CPT(持续预训练)被严重低估。 纯领域数据 CPT 会导致灾难性遗忘,混入 5% 通用预训练数据就能解决。没有 CPT,RL 不仅没用,还会比纯 SFT 更差——CPT 是 RL 生效的前提。
- 中间 checkpoint 不可靠,PPL 也失效了。 从 160B 训练中切出的 40B checkpoint 远不如专门从头训的 40B(学习率衰减不完整)。后训练模型的 PPL 与下游性能相关度 ,评估要用 ORM(结果奖励模型),和准确率的相关性 有 0.62-0.84。
语言模型的预训练目标就是最大化下一个 token 的条件概率,等效于最小化交叉熵:
其他超参经验:SFT 学习率一般取预训练的 0.1 倍左右(预训练 9e-5 就配 9e-6),不然 10 万条 SFT 样本上 loss 都收敛不下去;warmup_ratio 0.01-0.015,warmup steps 两千左右。
第二部分:把训练搬到华为昇腾 910B#
训练环境从 NVIDIA 换到昇腾 910B,是我这个项目里最折磨也最值得的一段。910B 单卡 64GB 显存,比实验室里的 3090/4090 充裕,但迁移适配的坑一个不少。
环境矩阵先对齐,别凭感觉装#
昇腾生态的版本耦合极其严格:驱动/固件、CANN、PyTorch、torch_npu 四个版本必须对应,官网有对照表。我用的稳定组合是 PyTorch 2.1.0 + torch_npu 2.1.0 + CANN 8.0 RC1,对应的安装流程(LLaMA-Factory 社区验证过):
pip install torchvision==0.16.0
pip install torch==2.1.0
pip install torch_npu==2.1.0
pip install deepspeed==0.15.4bash装完记得 source 环境变量,不然 npu-smi: command not found 会第一时间教你做人:
source /usr/local/Ascend/ascend-toolkit/set_env.shbash日常命令的替代关系:CUDA_VISIBLE_DEVICES → ASCEND_RT_VISIBLE_DEVICES,nvidia-smi → npu-smi info,分布式通信从 NCCL 换到 HCCL。启动训练的差异其实很小:
# NVIDIA 上
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 train.py
# 昇腾 910B 上,其余代码几乎不用动
ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 train.pybash算子生态的隐性成本#
昇腾适配最大的敌人不是框架,是算子。torch_npu 对主流模型的支持已经很好,LLaMA-Factory 甚至可以直接跑 Qwen 系列训练,但两个著名缺口:bitsandbytes 和 Xformers 在 NPU 上不可用——意味着 4bit 量化加载和 memory-efficient attention 这套在 CUDA 上顺手的东西要换方案。训练时还会遇到首次运行要编译算子的等待(不是卡死了,是真的在编译),以及某些小众算子在 CANN 上缺失需要绕道。
遇到过无法解决的问题只能求助华为运维工程师的情况,也是这段经历的一部分。昇腾生态确实比 CUDA 年轻,社区答案少,但主流场景(大模型训练/推理)已经稳了。910B 上 LoRA 训练用 CANN 融合算子替换原生实现,实测单次前向从 45ms 降到 4.2ms 量级——融合算子的收益比在 CUDA 上大得多,值得专门去查算子替换清单。LoRA 本身也很简单,低秩分解就两行:
分布式训练的差异#
昇腾上跑 DDP 和 DeepSpeed 基本平滑,但通信层从 NCCL 换成 HCCL 之后,小 batch 下通信开销占比会变明显。MindSpeed(昇腾的大模型并行框架)的 DualPipeV 流水排布能把通信掩盖率做到 85% 以上——在 910B 集群上训模型,流水并行排布比在 NVIDIA 上更值得抠细节。910B 之间的互联带宽和 HBM 带宽是这张卡的命门,显存规划、重计算开关、ZeRO 分片策略,这些在 NVIDIA 上可以偷懒的地方,在昇腾上都要认真算。
第三部分:站在生物医药门口,先看清这个领域的地形#
在讲迁移之前,我想先把 AI 医药这个领域的地形画出来——因为我发现很多人(包括以前的自己)对它的理解停留在”AI 能预测蛋白质结构”这一层。实际上这个领域现在分四张牌桌,打法完全不同。
四张牌桌:现在的 AI 医药在做什么#
序列牌桌:蛋白质语言模型(ESM-1b/ESM-2、ProtTrans)和基因组语言模型(Evo 1/2、HyenaDNA)。吃的是序列数据,来源是测序——便宜、海量、随便下载。预训练范式和 LLM 几乎同构:词表换成 20 个氨基酸(或 4 个碱基),MLM / next-token 预测照搬。这是离”语言模型思维”最近的一张牌桌。
结构牌桌:AlphaFold、AlphaFold3、ESM-Fold。输入序列(加 MSA 共进化信息),输出三维结构。需要实验结构当监督信号,而实验结构稀缺——这是第一道真正的数据壁垒。
分子与对接牌桌:Uni-Mol、DiffDock、SurfDock、TankBind。输入小分子 3D 结构和蛋白口袋,预测结合姿态与亲和力。3D 数据稀缺、实验活性标注更稀缺,双稀缺叠加。
生成设计牌桌:Evo 设计噬菌体基因组、RFdiffusion 设计蛋白、Uni-Mol 生成分子。从”预测规律”走向”创造新物”。这是把语言模型思维用到底的打法。
数据壁垒:测序数据随便拿,3D 构型千金难求#
“生物数据大爆发”这句话只说对了一半。测序数据确实免费:一个基因组测序几百到几千元,NCBI 存了几十亿条序列,UniProt 有 2.5 亿条蛋白质序列——这部分和训练语料一样”随便拿”。但 AI 医药真正缺的不是序列,是结构和功能标注。
一个 3D 结构要用 X 射线晶体学、冷冻电镜或 NMR 测定,从样品制备到解出结构以月、年计。PDB 数据库至今只有约 24 万个实验结构,能做对接训练的蛋白-配体复合物只是其中一小部分。结合亲和力标注更贵:要湿实验测 Ki/Kd/IC50,PDBBind 攒了几十年也只有几千到一两万条。
我的感想:语言模型的瓶颈是算力,生物模型的瓶颈是数据。算力是钱能买到的东西——加卡就行;而生物数据的高质量标注是钱也难买到的东西,因为它受制于物理实验的周期和成本。这是性质完全不同的两个瓶颈,我是在 910B 上把 LLM 训练成本打到很低之后,才真正意识到这一点:能算的人和能测的人,中间隔着一道数据墙。
训练蛋白质预测模型,为什么比训练 LLM 更难#
直觉上,蛋白质序列那么短,训练应该更轻松。实际上更难,难在三个地方:
1. 上下文长度根本不是问题——但这反而凸显了难度的错位。 蛋白质序列天然短。AlphaFold3 按”1 个标准氨基酸 = 1 个 token”输入,一般限制单任务 5000 token(以 80GB 显存部署的 A100/H100 为例,最大支持 5120 token):
| 蛋白长度 | 编码区 bp(粗估) | AF3 token 数 |
|---|---|---|
| 300 aa | ~900 bp | 300 |
| 500 aa(典型真核蛋白) | ~1500 bp | 500 |
| 1000 aa | ~3000 bp | 1000 |
| 2500 aa | ~7500 bp | 2500 |
| 5000 aa(AF3 Server 硬上限) | ~15000 bp | 5000 |
(按 3 bp ≈ 1 个氨基酸粗算,但因起始密码子、终止密码子等影响,实际残基数通常少于 bp/3。AlphaFold3 吃的是氨基酸序列,1 个标准氨基酸 = 1 个 token,不是 DNA 的 bp。)
作为对照,大语言模型的”长上下文”其实是假繁荣:理论上现在的大模型都宣称支持 100 万上下文,但以召回率 >90% 为标准,能稳定保持的窗口大多在 50 万 token 以内,百万上下文实际可用率平均只有约 35%。UC Berkeley 的 BLOCKSEARCH 论文把机制拆了出来——注意力稀释(attention dilution):softmax 的分母随上下文长度膨胀,目标 token 的注意力质量被大量无关 token 摊薄,百万 token 尺度下召回率趋近于零。蛋白质领域根本没有这个烦恼:序列最长也就几千 token,连 1% 的”百万上下文焦虑”都不到。所以真正拉开难度的不是长度,而是下面两点。
2. 数据量倒挂。 LLM 预训练有几十 T token,蛋白质序列全量也就约 10 亿级(UniRef 2.5 亿条),带结构标签的只有几十万,带功能标注的更少。序列 → 结构 → 功能这条链上,越靠近功能,标注越稀——而蛋白质预测模型恰恰要在”标注最稀”的端点上做出最硬的承诺(预测对结构)。
3. 评估贵且慢。 语言模型可以每天在自动 benchmark 上刷分迭代;生物模型的最终裁判是湿实验,一轮验证以周、月计。这决定了生物模型的迭代速度天生比 LLM 慢一个数量级——你没法”今天调参,明天看榜”。
一个让我震动的例子:AI 设计噬菌体杀超级大肠杆菌#
2025 年 9 月,斯坦福 + Arc Institute 的 Hie、King 团队用基因组语言模型 Evo 1/Evo 2,设计出了第一批由 AI 生成完整基因组的功能性噬菌体。Evo 2 在 200 多万个噬菌体基因组上训练过(最先进的版本吃过约 9 万亿个碱基的 DNA)。他们以 ΦX174——一个只有 5386 个核苷酸、11 个基因的单链 DNA 病毒——为模板,生成数千个候选序列,筛选出 302 个方案,实际合成测试后有 16 个能感染大肠杆菌。更关键的是:把多个 AI 设计噬菌体组合成”鸡尾酒”,能杀死三种野生型 ΦX174 杀不掉的大肠杆菌菌株,其中不少是对抗生素耐药的”超级大肠杆菌”。这项工作从 bioRxiv 预印本(2025.9)走到 Science 正刊(2026),Nature 新闻标题直接叫《世界上第一批 AI 设计的病毒》。
我的感想:这个例子最震撼我的不是”生成基因组”这个技术动作,而是它把”语言模型思维”推到了极致——把生命本身当作一门语言来读写。Evo 设计噬菌体的流程(基因组语言模型预训练 → 模板约束生成 → 计算筛选 → 实验验证)和我训练 LLM 的流程(预训练 → 指令微调 → 对齐 → 评测)是同一套管线,只是最后的裁判从自动 benchmark 换成了湿实验。这也顺带回答了我一直在问自己的问题:迁移的终点是什么?终点是把生成式建模的能力直接作用在生命数据上——能预测,更能创造。
第四部分:第一次迁移——把语言建模思维搬到蛋白质#
训练完语言模型之后,我再看生物信息学,发现一件事:蛋白质序列就是一门语言,只是词表只有 20 个词(氨基酸),语料库叫 UniRef。 这个映射一旦建立,整套思维就搬过去了。
序列=句子,MLM=预训练#
蛋白质语言模型的路线和 BERT 几乎一一对应:对海量蛋白质序列做掩码语言建模(MLM)预训练——随机遮盖部分氨基酸,让模型根据上下文重建。Meta 的 ESM-2 用 UniRef50(约 6500 万条去冗余序列)预训练,参数做到 6.5B;ESM-1b 是 650M 的里程碑;ProtTrans 走的是 T5 路线。MLM 预训练让模型隐式学到残基间的共进化约束、空间邻近关联和折叠稳定性的物理化学规则——就像语言模型学到了语法和语义。
MLM 的目标函数和 BERT 一模一样,只是词表换成 20 种氨基酸:
其中 是被遮盖的氨基酸位置集合, 是未遮盖的序列上下文。
更妙的是评估迁移。语言模型用困惑度评估已经过时(EvoLM 证明了 PPL 和下游性能无关),蛋白质这边有同样的”零样本”评估:ESM-1v 只靠序列,零样本预测突变效应就能达到与传统多序列比对方法相当的水平——因为它从进化序列中学到了哪些位置保守、哪些位置可以变,这本质上和语言模型从语料里学”哪些词可以替换”是同一件事。
从”会说话”到”会折叠”:结构信息怎么注入#
单靠序列预训练学不到全部结构信息。注入结构信息有几条路,都是给语言模型”加感官”的经典操作:
- 结构 token 化:SaProt 用 Foldseek 把蛋白质结构编码成一维结构序列(3D 结构 token),与氨基酸 token 做笛卡尔积形成新词表( 个 token),再用 BERT 架构做 MLM 预训练——相当于让模型同时读”句子”和”结构注释”。
- 原子级掩码:ESM-AA 融合氨基酸和原子两个尺度,预训练目标包含掩码语言建模 + 成对距离恢复(PDR),让模型直接学习原子间距离。
- 远程同源性检测微调:把 ESM-2 在 SCOPe 折叠分类任务上微调(模型 lr 1e-5、MLP 头 lr 1e-4),让”序列差异大但结构相似”的蛋白质在表征空间里靠拢——这是给预训练模型补”结构感知”的轻量方案,参数量零增长:
from transformers import AutoModelForMaskedLM
from torch import nn
model = AutoModelForMaskedLM.from_pretrained("facebook/esm2_t33_650M_UR50D")
head = nn.Linear(model.config.hidden_size, n_folds)
for param in model.parameters():
param.requires_grad = False # 冻结 ESM-2,保留预训练知识
for param in model.encoder.layer[-4:].parameters():
param.requires_grad = True # 只解冻最后 4 层
optimizer = torch.optim.AdamW([
{"params": model.parameters(), "lr": 1e-5}, # 骨干:小学习率
{"params": head.parameters(), "lr": 1e-4}, # 新头:大学习率
])python训练细节上,蛋白质模型比 LLM 宽容得多:序列短(几百 token 级别)、不需要长上下文、不需要 GQA 这类推理优化。但评估要小心——蛋白质的 ground truth 往往来自 PDB(有解析偏差的实验数据),和语言模型的”测试集污染”问题是同一个坑。
迁移点总结(第一次)#
| 语言模型 | 蛋白质模型 |
|---|---|
| 词表(BPE 几万词) | 20 种氨基酸(+结构 token) |
| 预训练语料(FineWeb/RedPajama) | UniRef/PDB |
| MLM/BERT 预训练 | 同样的 MLM |
| 指令微调对齐 | 功能标签微调(EC 号、GO 注释) |
| 零样本评估 | 突变效应零样本预测(ESM-1v) |
第五部分:第二次迁移——从蛋白质到 AI 药物对接#
如果说蛋白质是”序列→结构”的问题,药物对接就是”结构×结构”的问题:预测小分子(配体)和蛋白质(受体)怎么结合。这一步的思维迁移,难度不在模型,在数据。
先看清数据的水有多深#
几乎所有深度学习对接模型(DiffDock、EquiBind、TankBind、Uni-Mol)都训练在 PDBBind 上,但 PDBBind 有系统性偏差:激酶占比畸高,GPCR 和离子通道严重不足(不到 5%)。这意味着模型对”热门家族”过拟合,对膜蛋白这类真实药靶泛化差。PoseBusters 那篇论文点破了另一个问题:AI 对接模型生成的构象经常违反物理约束——键长键角不对、原子碰撞、手性错误。训一个能刷分(RMSD<2Å)的模型容易,训一个物理合理的模型难。
对接精度的评价指标就是配体原子坐标的均方根偏差:
数据之外是基准设计的坑。传统评测是 self-docking(把共晶配体拿下来再塞回原口袋,像拼图最后一块),真实研发场景是 cross-docking(蛋白构象来自配体 A 的共晶,要对接配体 B,侧链要动、口袋要重塑)。PoseX(ICLR 2026)第一次做了大规模 cross-docking 基准,23 种方法横评,结论震撼:顶尖 AI 方法(SurfDock 77% 成功率)全面超越统治行业几十年的物理方法(最好的 GNINA 只有约 54%),但 AI 方法在”全新口袋”上表现断崖式下跌,泛化性是硬伤。
模型路线:三条技术谱系#
- 物理方法(Glide、AutoDock Vina):有物理能量函数兜底,稳定但慢、精度上限低
- AI 对接(DiffDock、SurfDock、Uni-Mol Docking):DiffDock 用扩散模型在 SE(3) 空间生成构象,PDBBind 上 top-1 成功率 38%(物理方法 23%);Uni-Mol 先在 2 亿个 3D 小分子 + 300 万个蛋白口袋上做结构预训练,V2 在 PoseBusters 上 77.6% 达到 RMSD<2Å,超过 AlphaFold3 汇报的精度
- AI 共折叠(AlphaFold3、RoseTTAFold-All-Atom):不做”对接”,直接端到端预测复合物结构,盲对接赛道最强,但推理成本高
扩散对接的核心是把对接当成”从噪声生成构象”,训练目标是去噪(score matching):
其中 是加噪后的配体坐标, 是蛋白质口袋条件。这和我在 LLM 里天天见的”预测目标 + 条件生成”是同一套东西,只是目标从 token 变成了三维坐标。
迁移点总结(第二次)#
从 LLM 到药物对接,迁移的思维有三层:
- 预训练-微调范式原封不动。Uni-Mol 就是”分子版 BERT”:在无标签 3D 结构上预训练,再在下游任务微调。这和 ESM、和 LLM 是同一个故事。
- 对称性是最大的先验。语言模型不需要物理先验,但分子在三维空间里旋转平移不改变性质——SE(3) 等变网络(如 E(3)-GNN)就是这个领域的”架构收敛项”:特征在旋转平移下不变,。E(3) 等变模型学不会手性,这是近年才被明确指出来、如今正被手性感知的分子场表示等方法攻克的坑——就像当年发现 attention 的算术强度问题一样,是”懂了先验才发现坑”的典型。
- 生成模型是通用引擎。DiffDock 的扩散、FLEXDOCK 的流匹配、NExT-Mol 的 1D 语言模型 + 3D 扩散两阶段——本质都是”分布传输”,和语言模型的 next-token 预测是同一件事的不同实现。FLEXDOCK 把全原子 RMSD<1Å 的比例从 32% 提到 42%,PoseBusters 通过率从 30% 提到 73%,靠的就是流匹配的松弛约束——这跟我在 LLM 训练里调”约束强度”的经验完全同构。
收束#
回头看,训练语言模型的经历给了我三样可以迁移的东西:
- 数据先行的纪律:先查数据分布和偏差(中文语料稀缺、PDBBind 激酶过拟合),再决定模型怎么训
- 预训练-微调范式的肌肉记忆:语言、蛋白质、分子,三种模态共用一套范式,差别只在 token 化和先验
- 对评估的警惕:PPL 失效就换 ORM,self-docking 好看就换 cross-docking——评估基准的偏差,往往比模型本身的缺陷更致命
从 LLM 到蛋白质到药物,表面上是三个领域,底层是同一套思维在反复使用。这也算是对”AI for Science”最朴素的理解:先学会训练一个模型,再学会把数据的语言翻译给模型听。
参考文献#
训练方法论(LLM 侧)
- Qi, Z., et al. EvoLM: In Search of Lost Language Model Training Dynamics. NeurIPS 2025 (Oral). arXiv:2506.16029. https://arxiv.org/abs/2506.16029 ↗
- Hoffmann, J., et al. Training Compute-Optimal Large Language Models (Chinchilla). NeurIPS 2022. arXiv:2203.15556. https://arxiv.org/abs/2203.15556 ↗
- Rae, J. W., et al. Scaling Language Models: Methods, Analysis & Insights from Training Gopher. arXiv 2021. arXiv:2112.11446. https://arxiv.org/abs/2112.11446 ↗
- Hu, E. J., et al. LoRA: Low-Rank Adaptation of Large Language Models. ICLR 2022. arXiv:2106.09685. https://arxiv.org/abs/2106.09685 ↗
- Penedo, G., et al. The RefinedWeb Dataset for Falcon LLM: Outperforming Curated Corpora with Web Data, and Web Data Only. NeurIPS 2023. https://arxiv.org/abs/2306.01116 ↗
- Soboleva, D., et al. SlimPajama: A 627B token cleaned and deduplicated version of RedPajama. 2023. https://www.cerebras.com/blog/slimpajama-a-627b-token-cleaned-and-deduplicated-version-of-redpajama ↗
- HuggingFace. datatrove(清洗流水线工具). https://github.com/huggingface/datatrove ↗
长上下文与召回
- Machlab, D., & Battle, A. LLM In-Context Recall is Prompt Dependent. arXiv 2024. arXiv:2404.08865. https://arxiv.org/abs/2404.08865 ↗
- Gollapudi, S., et al. Can Language Models Actually Retrieve In-Context? Drowning in Documents at Million Token Scale. arXiv 2026. arXiv:2607.01538. https://arxiv.org/abs/2607.01538 ↗
- Gong, A., et al. Beyond a Million Tokens: Benchmarking and Enhancing Long-Term Memory in LLMs (BEAM/LIGHT). ICLR 2026. https://openreview.net/forum?id=y59hf5lrMn ↗
蛋白质与序列建模
- Lin, Z., et al. Evolutionary-scale prediction of atomic-level protein structure with a language model (ESM-2/ESMFold). Science 379(6632):1123-1130, 2023. https://www.science.org/doi/10.1126/science.ade2574 ↗
- Meier, J., et al. Language models enable zero-shot prediction of the effects of mutations on protein function (ESM-1v). NeurIPS 2021. https://www.biorxiv.org/content/10.1101/2021.07.09.450648 ↗
- Chen, B., et al. SaProt: Protein Language Modeling with Structure-aware Vocabulary. ICLR 2024. https://www.biorxiv.org/content/10.1101/2023.10.01.560349 ↗
- Hayes, T., et al. Simulating 500 million years of evolution with a language model (ESM3). Science 387(6736):850-858, 2025. https://www.science.org/doi/10.1126/science.adr0018 ↗
- Nguyen, E., et al. Sequence modeling and design from molecular to genome scale with Evo. Science 386(6725), 2024. https://www.science.org/doi/10.1126/science.ado9336 ↗
- Brixi, G., et al. Genome modeling and design across all domains of life with Evo 2. arXiv 2025. arXiv:2502.03740. https://arxiv.org/abs/2502.03740 ↗
- Steinegger, M., & Söding, J. MMseqs2 enables sensitive protein sequence searching. Bioinformatics 33(24):3977-3979, 2017. https://doi.org/10.1093/bioinformatics/btx105 ↗
结构预测与对接
- Abramson, J., et al. Accurate structure prediction of biomolecular interactions with AlphaFold3. Nature 630:493-500, 2024. https://www.nature.com/articles/s41586-024-07487-w ↗
- Zhou, G., et al. Uni-Mol: A Universal 3D Molecular Representation Learning Framework. ICLR 2023. https://arxiv.org/abs/2303.18482 ↗
- Corso, G., et al. DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking. ICLR 2023. https://arxiv.org/abs/2210.01776 ↗
- Buttenschoen, M., et al. PoseBusters: AI-based docking methods fail to generate physically valid conformations or meet the basic sanity check. arXiv 2024. arXiv:2404.13062. https://arxiv.org/abs/2404.13062 ↗
- Jiang, Y., et al. PoseX: AI Defeats Physics-based Methods on Protein Ligand Cross-Docking. ICLR 2026. arXiv:2505.01700. https://arxiv.org/abs/2505.01700 ↗
- Liu, M., et al. A Structural Biology Community Assessment of AlphaFold2 Applications (PDBBind 基准讨论). Nature Structural & Molecular Biology 29:1056-1067, 2022. https://www.nature.com/articles/s41594-022-00849-4 ↗
AI 设计噬菌体
- King, S. H., et al. Generative design of bacteriophages with genome language models. Science 393(6811), 2026. DOI: 10.1126/science.aec2657. https://www.science.org/doi/10.1126/science.aec2657 ↗ (预印本:bioRxiv 2025.09.12.675911,https://www.biorxiv.org/content/10.1101/2025.09.12.675911) ↗
- Kavanagh, K. World’s first AI-designed viruses a step towards AI-generated life. Nature 646:16, 2025. DOI: 10.1038/d41586-025-03055-y. https://www.nature.com/articles/d41586-025-03055-y ↗