BoHuYeShan

Back

我的简历里有一行字:训练过语言模型。一行字背后是几百天的时间。从搭数据管线、训到一半 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 只做缩放不做平移:

RMSNorm(x)=x1di=1dxi2+ϵγ\text{RMSNorm}(x) = \frac{x}{\sqrt{\frac{1}{d}\sum\nolimits_{i=1}^{d}x_i^2 + \epsilon}} \cdot \gamma

  • 所有 bias 全删:同上,省内存搬运(瓶颈在数据搬运,不在计算)
  • SwiGLU/GeGLU 激活:Llama 系用 SwiGLU,Google 系用 GeGLU,区别极小。SwiGLU 是门控线性单元:SwiGLU(x)=(xW1)SiLU(xW2)\text{SwiGLU}(x) = (xW_1) \odot \text{SiLU}(xW_2)
  • RoPE 位置编码:2024 年后基本统一
  • GQA(分组查询注意力):推理时 KV cache 的算术强度能崩到 1/h1/h,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:

数据集清洗与标注:这套流程后来被我省着用#

这部分我想单独拉出来讲,因为它是三次迁移里复用率最高的思维,也是我踩坑最密集的地方。语言模型的数据管线拆开看,就是四件事:去重、过滤、防污染、标注。后面做蛋白质和药物数据时,我几乎是把这四个动作原样搬过去。

去重。 全网语料的重复程度超乎想象。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 32
bash

--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 混合标注要先换算成同一尺度:pChEMBL=log10(IC50)\text{pChEMBL} = -\log_{10}(\text{IC}_{50})(单位 nM 时即 pIC50),不然模型会被”单位差”带偏
  • 物理合理性过滤:PoseBusters 检查表(键长键角、原子碰撞、手性)筛掉”结构上不可能”的坏样本——这和我给文本做质量过滤是一个直觉

这一节我想特别说一句:语言模型数据工程的每一条纪律,都能在生物数据上找到对应物,但生物数据的稀缺性把所有纪律都放大了。去重做得不干净,语料多 20% 只是浪费算力;蛋白质数据去重不干净,可能直接让评测指标虚高——因为测试蛋白可能已经在训练里见过 95% 相似的兄弟。

训练预算:EvoLM 教我的三件事#

Harvard/Stanford/CMU 的 EvoLM 论文(NeurIPS 2025 oral)用 100+ 个从零训练的 1B/4B 模型把预训练到 RL 的每个阶段扒透了。这些结论我对照自己的实践,句句命中:

  1. 预训练不是越多越好。 计算最优的数据量大致服从 tokens20×params\text{tokens} \approx 20 \times \text{params}(Chinchilla 结论),但 EvoLM 的实测是:1B 模型训 80B token 就饱和,超过 160B 下游任务性能直接退化——通用预训练训到参数量的 80-160 倍就够,再多是纯烧算力还伤泛化。
  2. CPT(持续预训练)被严重低估。 纯领域数据 CPT 会导致灾难性遗忘,混入 5% 通用预训练数据就能解决。没有 CPT,RL 不仅没用,还会比纯 SFT 更差——CPT 是 RL 生效的前提。
  3. 中间 checkpoint 不可靠,PPL 也失效了。 从 160B 训练中切出的 40B checkpoint 远不如专门从头训的 40B(学习率衰减不完整)。后训练模型的 PPL 与下游性能相关度 r20r^2 \approx 0,评估要用 ORM(结果奖励模型),和准确率的相关性 r2r^2 有 0.62-0.84。

语言模型的预训练目标就是最大化下一个 token 的条件概率,等效于最小化交叉熵:

L(θ)=1Nt=1Nlogpθ(xtx<t)\mathcal{L}(\theta) = -\frac{1}{N}\sum_{t=1}^{N} \log p_\theta(x_t \mid x_{<t})

其他超参经验: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.4
bash

装完记得 source 环境变量,不然 npu-smi: command not found 会第一时间教你做人:

source /usr/local/Ascend/ascend-toolkit/set_env.sh
bash

日常命令的替代关系:CUDA_VISIBLE_DEVICESASCEND_RT_VISIBLE_DEVICESnvidia-sminpu-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.py
bash

算子生态的隐性成本#

昇腾适配最大的敌人不是框架,是算子。torch_npu 对主流模型的支持已经很好,LLaMA-Factory 甚至可以直接跑 Qwen 系列训练,但两个著名缺口:bitsandbytes 和 Xformers 在 NPU 上不可用——意味着 4bit 量化加载和 memory-efficient attention 这套在 CUDA 上顺手的东西要换方案。训练时还会遇到首次运行要编译算子的等待(不是卡死了,是真的在编译),以及某些小众算子在 CANN 上缺失需要绕道。

遇到过无法解决的问题只能求助华为运维工程师的情况,也是这段经历的一部分。昇腾生态确实比 CUDA 年轻,社区答案少,但主流场景(大模型训练/推理)已经稳了。910B 上 LoRA 训练用 CANN 融合算子替换原生实现,实测单次前向从 45ms 降到 4.2ms 量级——融合算子的收益比在 CUDA 上大得多,值得专门去查算子替换清单。LoRA 本身也很简单,低秩分解就两行:

W=W+ΔW=W+αrBA,BRd×r, ARr×kW' = W + \Delta W = W + \frac{\alpha}{r}BA, \quad B \in \mathbb{R}^{d \times r}, \ A \in \mathbb{R}^{r \times k}

分布式训练的差异#

昇腾上跑 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 bp300
500 aa(典型真核蛋白)~1500 bp500
1000 aa~3000 bp1000
2500 aa~7500 bp2500
5000 aa(AF3 Server 硬上限)~15000 bp5000

(按 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 种氨基酸:

LMLM=1MiMlogpθ(aia\M)\mathcal{L}_{\text{MLM}} = -\frac{1}{|M|}\sum_{i \in M} \log p_\theta(a_i \mid a_{\backslash M})

其中 MM 是被遮盖的氨基酸位置集合,a\Ma_{\backslash M} 是未遮盖的序列上下文。

更妙的是评估迁移。语言模型用困惑度评估已经过时(EvoLM 证明了 PPL 和下游性能无关),蛋白质这边有同样的”零样本”评估:ESM-1v 只靠序列,零样本预测突变效应就能达到与传统多序列比对方法相当的水平——因为它从进化序列中学到了哪些位置保守、哪些位置可以变,这本质上和语言模型从语料里学”哪些词可以替换”是同一件事。

从”会说话”到”会折叠”:结构信息怎么注入#

单靠序列预训练学不到全部结构信息。注入结构信息有几条路,都是给语言模型”加感官”的经典操作:

  • 结构 token 化:SaProt 用 Foldseek 把蛋白质结构编码成一维结构序列(3D 结构 token),与氨基酸 token 做笛卡尔积形成新词表(20×nfoldseek20 \times n_{\text{foldseek}} 个 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Å)的模型容易,训一个物理合理的模型难。

对接精度的评价指标就是配体原子坐标的均方根偏差:

RMSD(p,q)=1Ni=1Npiqi2\text{RMSD}(p, q) = \sqrt{\frac{1}{N}\sum\nolimits_{i=1}^{N}\|p_i - q_i\|^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):

L=Et,ϵ[ϵθ(xt,t,c)ϵ2]\mathcal{L} = \mathbb{E}_{t, \epsilon}\left[\left\|\epsilon_\theta(x_t, t, c) - \epsilon\right\|^2\right]

其中 xt=αˉtx0+1αˉtϵx_t = \sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1-\bar{\alpha}_t}\, \epsilon 是加噪后的配体坐标,cc 是蛋白质口袋条件。这和我在 LLM 里天天见的”预测目标 + 条件生成”是同一套东西,只是目标从 token 变成了三维坐标。

迁移点总结(第二次)#

从 LLM 到药物对接,迁移的思维有三层:

  1. 预训练-微调范式原封不动。Uni-Mol 就是”分子版 BERT”:在无标签 3D 结构上预训练,再在下游任务微调。这和 ESM、和 LLM 是同一个故事。
  2. 对称性是最大的先验。语言模型不需要物理先验,但分子在三维空间里旋转平移不改变性质——SE(3) 等变网络(如 E(3)-GNN)就是这个领域的”架构收敛项”:特征在旋转平移下不变,f(Rx+t)=Rf(x)+tf(Rx + t) = Rf(x) + t。E(3) 等变模型学不会手性,这是近年才被明确指出来、如今正被手性感知的分子场表示等方法攻克的坑——就像当年发现 attention 的算术强度问题一样,是”懂了先验才发现坑”的典型。
  3. 生成模型是通用引擎。DiffDock 的扩散、FLEXDOCK 的流匹配、NExT-Mol 的 1D 语言模型 + 3D 扩散两阶段——本质都是”分布传输”,和语言模型的 next-token 预测是同一件事的不同实现。FLEXDOCK 把全原子 RMSD<1Å 的比例从 32% 提到 42%,PoseBusters 通过率从 30% 提到 73%,靠的就是流匹配的松弛约束——这跟我在 LLM 训练里调”约束强度”的经验完全同构。

收束#

回头看,训练语言模型的经历给了我三样可以迁移的东西:

  1. 数据先行的纪律:先查数据分布和偏差(中文语料稀缺、PDBBind 激酶过拟合),再决定模型怎么训
  2. 预训练-微调范式的肌肉记忆:语言、蛋白质、分子,三种模态共用一套范式,差别只在 token 化和先验
  3. 对评估的警惕:PPL 失效就换 ORM,self-docking 好看就换 cross-docking——评估基准的偏差,往往比模型本身的缺陷更致命

从 LLM 到蛋白质到药物,表面上是三个领域,底层是同一套思维在反复使用。这也算是对”AI for Science”最朴素的理解:先学会训练一个模型,再学会把数据的语言翻译给模型听。

参考文献#

训练方法论(LLM 侧)

  1. 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
  2. Hoffmann, J., et al. Training Compute-Optimal Large Language Models (Chinchilla). NeurIPS 2022. arXiv:2203.15556. https://arxiv.org/abs/2203.15556
  3. 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
  4. Hu, E. J., et al. LoRA: Low-Rank Adaptation of Large Language Models. ICLR 2022. arXiv:2106.09685. https://arxiv.org/abs/2106.09685
  5. 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
  6. 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
  7. HuggingFace. datatrove(清洗流水线工具). https://github.com/huggingface/datatrove

长上下文与召回

  1. Machlab, D., & Battle, A. LLM In-Context Recall is Prompt Dependent. arXiv 2024. arXiv:2404.08865. https://arxiv.org/abs/2404.08865
  2. 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
  3. 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

蛋白质与序列建模

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. Steinegger, M., & Söding, J. MMseqs2 enables sensitive protein sequence searching. Bioinformatics 33(24):3977-3979, 2017. https://doi.org/10.1093/bioinformatics/btx105

结构预测与对接

  1. 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
  2. Zhou, G., et al. Uni-Mol: A Universal 3D Molecular Representation Learning Framework. ICLR 2023. https://arxiv.org/abs/2303.18482
  3. Corso, G., et al. DiffDock: Diffusion Steps, Twists, and Turns for Molecular Docking. ICLR 2023. https://arxiv.org/abs/2210.01776
  4. 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
  5. 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
  6. 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 设计噬菌体

  1. 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)
  2. 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
训练大模型教会我的事,后来都用在了生物医药上
https://bohuyeshan.top/2026/08/20/2026-08-20-01-%E8%AE%AD%E7%BB%83%E5%A4%A7%E6%A8%A1%E5%9E%8B%E6%95%99%E4%BC%9A%E6%88%91%E7%9A%84%E4%BA%8B-%E5%90%8E%E6%9D%A5%E9%83%BD%E7%94%A8%E5%9C%A8%E4%BA%86%E7%94%9F%E7%89%A9%E5%8C%BB%E8%8D%AF%E4%B8%8A/
Author BoHuYeShan
Published at 2026年8月20日