Lecture 15 · 领域基础模型:代码、生物医学、法律与 RNA · Domain Foundation Models

Advances in Foundation Models · Lecture 15。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS324 Winter 2023 Advances in Foundation Models,Syllabus 阅读清单 “Text and (Masked) Language Modeling FMs”(GPT-2、GPT-3、InstructGPT、CodeGen、AlphaFold、ESM、GatorTron、PubMedGPT、Pile of Law,以及课后发表的 LegalBench);2/13 Lecture: Unlocking the RNA Universe(Raphael Townshend)。 依据说明:课程网站没有提供 slides 或录像。RNA 部分依据 Townshend 的公开工作:Geometric deep learning of RNA structure(ARES,Science 2021)、他所在的 Atomic AI 公司 2023 年底发布的 ATOM-1 预印本;他具体讲了什么,我无法确认。代码模型部分依据 Codex 论文全文(Chen et al. 2021)和 CodeGen 的摘要;生物、医学、法律部分依据各论文的摘要和 Stanford CRFM 的 BioMedLM 博客。GPT-2、GPT-3、InstructGPT 在第 1、3、7 讲已经讲过,这里只作为”通用模型”的对照。文献里的数字都是我在原文或摘要里读到的;§7”2023 年之后”是我补充的。 配套代码 Code:code/lecture15/(PyTorch;3 个脚本 + 1 个模块。代码 01 约 75 秒,02 第一次约 55 秒、之后约 30 秒,03 约 10 秒) 预计阅读时间:3 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲,你应该能够:

  1. 说清”把配方搬到一个新领域”要回答的三个问题:数据从哪里来(多少、谁拥有、能不能公开)、结构是什么(应该写进模型的归纳偏置)、怎样评测(有没有客观的对错)。
  2. 解释共进化:为什么蛋白质 / RNA 家族里配对的位置会协同变化,互信息和 APC 怎样把它找出来,以及掩码语言模型为什么会在注意力里学到同样的信号(ESM);用语言模型给突变打分(零样本突变效应)。
  3. 说出 AlphaFold2(多序列比对 + 结构模块)和 ESMFold(单序列语言模型)的区别,以及”单序列方法需要规模,共进化方法需要同源序列”。
  4. 写出 pass@k 的无偏估计,解释代码模型为什么用功能正确性评测、为什么”多采样 + 用测试挑选”有效、温度怎样取舍。
  5. 比较”从零训练领域模型”(GatorTron、BioMedLM)和”通用模型 + 适配”;说出法律数据(Pile of Law)和领域评测(LegalBench)带来的特殊问题。
  6. 解释在数据极少的领域(RNA 三维结构)为什么几何归纳偏置(旋转不变 / 等变)至关重要,以及 ATOM-1 “为机器学习专门产生数据”的思路。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面几讲再展开 Previewed only
第 3 讲 §4:掩码语言模型(BERT)与因果语言模型(GPT)训练数据的隐私(第 16 讲)
第 6 讲 §5:继续预训练(DAPT)与 BioMedLM代码数据的许可与版权(第 19 讲)
第 11 讲 §2:交叉熵与码长;第 12 讲 §2:注意力里能读出什么生物安全等双重用途的风险(第 18 讲)
第 14 讲 §2:对比学习;§6:一个模型给另一个模型打分 / 打标签

0.3 本讲地图 Map

§1  "语言"不只是人话:把配方搬到新领域时要问的三个问题
§2  蛋白质与 RNA:共进化、掩码语言模型、零样本突变效应、AlphaFold 与 ESM     ← 代码 01
§3  代码:功能正确性、pass@k、温度;Codex 与 CodeGen                        ← 代码 02
§4  医学与法律:领域预训练 vs 通用模型;隐私、过滤规范与专业评测
§5  数据稀缺的领域:RNA 与几何深度学习(Townshend:ARES、ATOM-1)            ← 代码 03
§6  领域模型的共同问题
§7  2023 年之后
§8–12  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 记号 Notation(只列本讲新增的,其余见第 1 讲 §0.4)

符号 / 术语含义例子
MSA多序列比对(multiple sequence alignment):一个家族的同源序列,按位置对齐AlphaFold2 的输入
共进化 coevolution空间上挨着(或配对)的位置在进化中协同变化RNA 的 G-C → A-U
MI、APC两个位置之间的互信息;平均乘积校正MI′(i,j)=MI(i,j)−MI‾i⋅MI‾⋅j/MI‾\text{MI}'(i,j) = \text{MI}(i,j) - \overline{\text{MI}}_{i\cdot}\overline{\text{MI}}_{\cdot j}/\overline{\text{MI}}
PLL伪对数似然:逐个遮住每个位置、把真实 token 的 log 概率加起来给突变打分
pass@k每道题采样 kk 个程序,至少一个通过全部单元测试的概率HumanEval
RMSD两个结构最优对齐后的均方根距离候选结构离天然结构多远
不变 / 等变输入旋转时输出不变 / 输出跟着一起旋转两两距离是旋转不变的

0.5 关于数字 · About the numbers

讲义里的实验数字都来自 code/lecture15/ 的实际输出(固定种子、PyTorch 单线程,同一台机器上重复运行逐字相同;代码 02 训练的模型缓存在本目录的 checkpoints/,删掉后重新训练得到逐位相同的结果)。三个”领域”都是知道真相的合成世界:48 个碱基、3 个茎环的 RNA 家族;一门只有 x、数字和 + − * 的小编程语言;16 个点的三维螺旋。几处结果和我写代码前的预想不一样,最重要的是:在多个家族上训练的小语言模型几乎不能从单条序列读出结构(规模不够);以及”坐标 + 随机旋转增强”的模型能分清镜像,而”只看距离”的模型不能。完整清单在代码 README 的”关于实验结果”里。


1. “语言”不只是人话 · Sequences as language

1.1 配方可以搬家

第 1 讲的配方是:把数据切成 token,用自监督目标(预测下一个 token / 被遮住的 token)在海量数据上训练一个大模型,然后适配到下游任务。这个配方里没有任何东西要求 token 必须是英文单词:

领域token自监督数据代表模型(阅读清单)
通用文本子词网页、书籍GPT-2、GPT-3、InstructGPT
代码子词(代码 + 注释)GitHubCodex、CodeGen
蛋白质20 种氨基酸UniProt 等序列数据库ESM;AlphaFold2(用 MSA)
RNA4 种核苷酸Rfam、测序数据、实验数据ARES(结构)、ATOM-1
临床文本子词电子病历GatorTron
生物医学文献子词(领域分词器)PubMedPubMedGPT / BioMedLM
法律子词判决书、法规、合同Pile of Law;LegalBench(评测)

阅读清单把 GPT-2、GPT-3、InstructGPT 和这些领域模型放在同一个标题下,正是在强调:它们是同一个配方。

1.2 搬家时要问的三个问题

配方相同,难点却因领域而异。每进入一个新领域,都要回答三个问题:

  1. 数据:有多少?谁拥有?能不能公开?蛋白质序列有数亿条,已知结构的 RNA 却只有很少;病历有几百亿个词,却受隐私法保护,几乎不能离开医院;代码在 GitHub 上公开,却带着各种许可证。
  2. 结构:这个领域有什么”物理规律”应该写进模型?分子转个方向还是同一个分子(旋转不变);左手和右手分子不同(手性);代码有语法、能执行。
  3. 评测:有没有客观的对错?代码可以运行测试;结构可以和实验测出的结构比;医学和法律的”对”常常需要专家判断。

本讲的四个部分(生物、代码、医学与法律、RNA)分别把这三个问题中的一个推到前台。


2. 蛋白质与 RNA:为什么掩码语言模型能学到结构 · Biology

2.1 背景:序列决定结构,结构决定功能

蛋白质是氨基酸链,RNA 是核苷酸链。链会折叠成三维结构,结构决定了它能做什么(催化反应、结合别的分子、调控基因)。测序很便宜,测结构(X 射线晶体学、冷冻电镜)却又贵又慢——已知序列的蛋白质有数亿个,已知结构的只有约二十万个,RNA 更少。从序列预测结构因此是生物学的核心问题之一。

几十年来最有效的线索来自进化。同一个蛋白质(或 RNA)在不同物种里有许多”同源”版本,它们的序列不同、结构相似。把这些同源序列按位置对齐,就得到多序列比对(MSA)。RNA 的例子最直观:茎(stem)里的第 ii 个碱基和第 jj 个碱基配对(G-C、A-U,或”摆动配对”G-U)。进化中如果 ii 从 G 变成 A,jj 往往也要从 C 变成 U,才能保持配对——否则结构被破坏,这个分子很可能失去功能、被自然选择淘汰。所以在 MSA 里,配对的两个位置会协同变化:这就是共进化。蛋白质里,空间上挨着的氨基酸也有类似的协同变化(虽然规则复杂得多)。

2.2 用统计找共进化:互信息与 APC

代码 01 造了一个 RNA 家族:长 48 个碱基、3 个茎环、16 对配对,按一棵简单的进化树(祖先 → 6 个分支 → 每支若干条序列)生成;配对的位置总是一起突变成另一种合法配对,5% 的配对被随机破坏(模拟非经典配对和测序噪声)。

.(((((...))))).((((((....)))))).(((((....)))))..
CCCUGGCGACCAGGAGCAUCCAACAGGAUGCCUGUUGACAGUAAUAUA
CCCGGCCCAGCCGGUGGCCUUCAUAAGGUCCCUCUUGGUGGUGAGAUA
CCCCGGCGCCCGGGCGAAGGUACUAGCGUUCCUGUUUUGAGAGAUGCA

第一对配对(位置 1 和 13)在 1000 条序列里的碱基组合:C-G 705,G-C 191,A-U 25,U-G 23,U-A 18……几乎全是合法配对——共进化的信号一目了然。

互信息衡量两个位置有多”一起变”:

MI(i,j)=∑a,bfij(a,b)log⁡fij(a,b)fi(a) fj(b).\text{MI}(i,j) = \sum_{a,b} f_{ij}(a,b)\log\frac{f_{ij}(a,b)}{f_i(a)\,f_j(b)} .

取 MI 最高的 16 对,看有几成是真的配对:

序列条数原始 MIMI + APC
200.5000.688
500.7500.938
2000.8121.000
10000.8121.000

(随机猜:16 / 990 ≈ 0.016。)两个教训:

  • 进化树制造了假的相关。 原始 MI 在序列很多时也停在 0.812:同一个分支的序列在很多位置上一起不同,这些位置之间也有互信息(1000 条序列时排在前面的假配对都涉及位置 14,它是一个”枢纽”)。平均乘积校正(APC,Dunn et al. 2008)减掉每一行、每一列的背景水平:MI′(i,j)=MI(i,j)−MI‾i⋅ MI‾⋅j/MI‾\text{MI}'(i,j) = \text{MI}(i,j) - \overline{\text{MI}}_{i\cdot}\,\overline{\text{MI}}_{\cdot j}/\overline{\text{MI}},200 条序列就能全部找对。真实的方法(DCA、Gremlin 等)用更精细的全局模型,但思路相同。
  • 序列太少时,偶然的共现也像信号。 20 条序列时只有 0.688。共进化方法需要大量同源序列——这正是 RNA 结构预测的难处(§5)。

2.3 ESM:语言模型在注意力里学到了接触

Meta 的 ESM(Rives et al., PNAS 2021)在 2.5 亿条蛋白质序列上做掩码语言建模——和 BERT 完全一样:随机遮住 15% 的氨基酸,预测它们。模型从没见过任何三维结构。Rao et al.(ICLR 2021)发现,ESM 的注意力图里出现了哪些氨基酸在空间上挨着:只用很少几个已知结构的蛋白质训练一个稀疏的逻辑回归,把各个头的注意力组合起来,就能预测接触;最大的模型已经超过了基于 MSA 的最好的无监督接触预测流程——而且只需要一次前向传播。

为什么?代码 01 演示 2 在同样的 RNA 序列上训练一个 2 层的双向 Transformer(掩码语言建模,800 步),把所有层、所有头的注意力平均、对称化、做 APC:

序列条数MI + APC注意力 + APC遮住位置的预测准确率
200.6880.6250.812
500.9380.9380.844
2001.0001.0000.893
10001.0001.0000.910

模型只被要求”猜被遮住的碱基”,从没被告诉哪些位置配对;但它的注意力找出的配对和 MI + APC 几乎一样好。原因很直接:猜位置 ii 时,最有用的信息就是它的配对伙伴 jj 是什么碱基——jj 是 G,ii 多半是 C 或 U。为了降低损失,注意力学会了”看”伙伴。掩码语言模型和共进化统计在做同一件事:利用位置之间的依赖。语言模型的优势在于规模——MI 要为每个家族单独算,语言模型可以在所有家族上一起训练、共享知识(§2.5 看它在小规模上的极限)。

这和第 12 讲的发现呼应:注意力图里可以读出模型学到的结构(induction head),但需要合适的”读法”(这里是平均 + APC)。

2.4 零样本突变效应

一个实用的推论:语言模型可以给突变打分。如果突变后的序列在模型看来”不像这个家族”,这个突变很可能破坏结构或功能。ESM-1v(Meier et al. 2021)用这个方法在深度突变扫描实验上做到了和有监督方法相当的预测,不需要任何实验标注。

代码 01 演示 3 用 1000 条序列训练的模型,比较三种突变(200 条没参与训练的同家族序列上的平均):

突变类型Δ PLL(掩码 LM)Δ 独立位置模型
破坏一对配对(改一个碱基)−6.91−1.70
补偿突变(两个一起改成另一种合法配对)−1.23−3.42
不配对的位置(改一个)−2.80−1.79

“独立位置模型”只看每个位置的碱基频率(每个位置独立),它认为改两个碱基比改一个更糟;掩码语言模型却知道”只要还能配对就没关系”:同一条序列上,补偿突变比破坏配对得分更高的比例,语言模型 0.980,独立位置模型只有 0.220。语言模型学到了位置之间的依赖(生物学上叫”上位效应”,epistasis),这是单个位置的统计看不到的。

2.5 AlphaFold2 与 ESMFold:用 MSA,还是只用一条序列?

  • AlphaFold2(Jumper et al., Nature 2021)在 CASP14(两年一次的结构预测盲测)上取得了接近实验精度的结果,所有目标的中位 GDT 分数约 92。它的输入是 MSA:Evoformer 模块在序列维度和”位置对”维度上交替做注意力,提取共进化信息;结构模块用对旋转等变的”不变点注意力”(IPA)直接输出三维坐标。2024 年的诺贝尔化学奖部分授予了 AlphaFold 的作者。
  • ESM-2 / ESMFold(Lin et al., Science 2023)走另一条路:一个 150 亿参数的蛋白质语言模型,输入只有一条序列,再接一个结构模块。它的精度随语言模型的规模持续提高;因为不需要搜 MSA,比 AlphaFold2 快达 60 倍,作者用它预测了 6 亿多个宏基因组蛋白质的结构(ESM Metagenomic Atlas)。

只用一条序列为什么也能行?在几亿条、跨越所有家族的序列上训练,模型把”进化规律”压缩进了参数里:看到一条新序列,它”知道”这一类序列通常怎样变化。代码 01 演示 4 在小规模上试了试:在 300 个不同结构的 RNA 家族(每个 30 条)上训练,然后只看一条新序列读配对:

方法精度
单条序列 → 注意力 + APC0.102
同一家族的 5 条序列 → MI + APC0.301
随机猜约 0.015

单序列只比随机好几倍。模型要靠”哪些片段彼此互补”来推断结构,这比单个家族里的协同变化难得多;我们的模型只有 2 层、9000 条序列、2000 步——这一步在小规模上做不出来。5 条同家族序列的 MI 也不行。单序列方法需要规模,共进化方法需要同源序列:数据稀缺的领域两头都难。


3. 代码 · Code

3.1 Codex:在 GitHub 上继续训练 GPT

Codex(Chen et al. 2021)是在代码上微调的 GPT:2020 年 5 月从 GitHub 上 5400 万个公开仓库收集了 179 GB 的 Python 文件,过滤掉自动生成的、行太长的、字母数字太少的文件后剩下 159 GB。它是 GitHub Copilot 最初背后的模型。

怎样评测? 作者认为 BLEU 这类”和参考答案有多像”的指标不适合代码:程序可以写得完全不同而功能相同,也可以只差一个字符而完全错误。他们手写了 164 道编程题(HumanEval),每道题有一个函数签名、一段文档字符串和若干单元测试;生成的代码通过全部测试才算对——功能正确性。

pass@k。 每道题采样 kk 个程序,至少一个通过测试的比例。直接采 kk 个来算方差很大;论文的做法是采 n≥kn \geq k 个(他们用 n=200n = 200),数出 cc 个正确的,用无偏估计

pass@k=E题目[1−(n−ck)/(nk)],\text{pass@}k = \mathbb{E}_{\text{题目}}\left[1 - \binom{n-c}{k}\Big/\binom{n}{k}\right],

即”从 nn 个里随机挑 kk 个,至少一个正确”的概率。论文特意指出,看起来更自然的 1−(1−p^)k1 - (1 - \hat p)^k(p^=c/n\hat p = c/n)是有偏的。

结果。 GPT-3 在 HumanEval 上解出 0%,GPT-J 11.4%,Codex-12B 的 pass@1 是 28.8%、pass@10 46.8%、pass@100 72.3%。“多采样几次,再用测试挑出能通过的”是一个出奇有效的策略。最好的采样温度随 kk 变化:pass@1 最好用低温度(0.2),pass@100 最好用较高的温度(0.8)——样本更多样,“至少一个对”的机会更大。论文还发现 BLEU 分数的分布在正确和错误的程序之间大量重叠。

3.2 CodeGen:开放的代码模型与多轮编程

Salesforce 的 CodeGen(Nijkamp et al., ICLR 2023)是一组开放的代码模型(最大 161 亿参数),依次在自然语言(The Pile)、多种编程语言、Python 上训练;它在 HumanEval 上和当时最好的模型相当,代码和检查点都开源了。论文还提出多轮编程:把一个复杂的需求拆成几轮提示(先读入数据、再处理、再输出),每轮生成一段代码。他们建立了一个包含 115 个问题集的多轮编程基准(MTPB),发现把同样的意图拆成多轮说,比一次说完的合成效果明显更好——“把任务分解后交给模型”,和第 5 讲的思维链是同一个想法。

3.3 在一门小语言上复现

代码 02 造了一门极小的”编程语言”:程序是只含 x、1–9 和 + − * 的表达式。题目给出 3 个输入输出的例子,模型要写出函数;10 个”单元测试”检查 x=0,1,…,9x = 0, 1, \ldots, 9,全对才算通过:

f(2)=7,f(5)=16,f(1)=4:  →  x*3+1

用第 1 讲的 TinyGPT(换一个 22 个字符的字母表)在 6 万道题上训练 3000 步。先抽出 200 个函数作为留出测试集,训练集里不允许出现它们(以函数在 0–9 上的输出为准,x*2 和 x+x 算同一个函数);另一个测试集是训练里见过的函数、换一组例子。

pass@k 与温度(每道题采样 n=20n = 20,无偏估计):

测试集温度pass@1pass@5pass@20
见过的函数(新例子)0.20.1120.1930.275
0.60.0720.1730.330
1.00.0310.1190.270
没见过的函数0.20.0270.0630.110
0.60.0180.0820.245
1.00.0140.0680.230
  • 没见过的函数 pass@1 只有 0.027,但采样 20 次再用测试挑,升到 0.245(约 9 倍)。
  • Codex 的温度规律完全复现:pass@1 在低温度最好,pass@20 在中等温度最好,温度太高又会写出太多乱七八糟的程序。

无偏估计 vs 朴素估计(没见过的函数,温度 0.6;参照值用每题 100 个样本算):

kk参照(n=100n = 100)n=20n = 20 无偏n=20n = 20 朴素 1−(1−p^)k1-(1-\hat p)^k
50.0920.0920.084
100.1610.1610.135

朴素估计系统性地偏低:1−(1−p)k1 - (1-p)^k 是 pp 的凹函数,把带噪声的 p^\hat p 代进去,平均值会被拉低(詹森不等式);大部分题的 cc 很小时偏得更多。比较两个模型时,估计方法必须正确、相同。

写得像 ≠ 写得对。 温度 0.6 下没见过的函数里,72 个正确的样本中有 59 个(82%)和参考答案写法不同(x*8 → x+x*8-x,x+x+5 → 5+x+x)——用”完全匹配”评测会把它们都算错。和参考答案的字符相似度(BLEU 的简化版):正确的样本平均 0.618,错误的 0.514,两个分布大量重叠,22% 的正确程序相似度不到 0.5。

3.4 代码为什么特别

代码有一个自然语言没有的奢侈品:可以执行的测试。它带来了三件事:

  1. 客观的评测:不用人判断对错。
  2. 推理时的”多试几次”:采样 + 过滤(Codex 的 pass@k、AlphaCode 的大规模采样和聚类)。
  3. 训练时的反馈:执行结果可以当奖励信号——这在 2023 年之后成了代码模型和推理模型的主要训练方式之一(§7)。

代价是:测试只检查测试覆盖到的东西(我们的 10 个测试覆盖了整个定义域,真实程序远做不到),而且代码数据带着许可证(第 19 讲)。


4. 医学与法律:领域数据、隐私与评测 · Medicine and law

4.1 从零训练领域模型:GatorTron 与 BioMedLM

GatorTron(Yang et al., npj Digital Medicine 2022):佛罗里达大学和 NVIDIA 用超过 900 亿个词训练的临床语言模型,其中超过 820 亿个词是去标识化的临床文本(来自 UF Health 的电子病历);模型从 1.1 亿参数扩展到 89 亿参数(之前的临床语言模型最大约 1.1 亿)。在 5 个临床 NLP 任务(概念抽取、关系抽取、语义相似度、自然语言推理、医学问答)上,规模的扩大带来了持续的提升,自然语言推理和医学问答分别提高了 9.6% 和 9.5%。它的特殊之处在数据:病历受隐私法保护,这样的模型只能由拥有数据的医疗机构训练。

PubMedGPT / BioMedLM(Stanford CRFM 与 MosaicML,2022 年 12 月;第 6 讲 §5.2 已经介绍):27 亿参数,只在 PubMed 的摘要和全文上训练(3000 亿个 token,128 张 A100 约 6.25 天)。在美国执业医师考试题 MedQA 上达到 50.3%,超过了比它大 44 倍、零样本的 Galactica(44.4%)。几个经验:领域分词器很重要(在 PubMed 上训练的分词器让 “chromatography” 这样的术语成为一个 token);在较小的数据集上多遍训练到 3000 亿 token 仍然值得;作者强调它的生成只适合研究,不适合用于临床。

4.2 领域预训练 vs 通用模型 + 适配

第 6 讲 §5 用玩具实验比较过:在领域数据上继续预训练(DAPT)比从零训练好,但会遗忘通用能力,回放旧数据可以兼顾。2022 年前后的经验大致是:

从零训练领域模型通用模型 + 领域适配
数据要求大量领域数据(病历、PubMed)少量领域数据即可
分词器可以为领域定制继承通用分词器(领域术语被切碎)
模型大小通常较小(数据有限)可以很大
隐私数据不出机构,可以本地训练需要把数据交给通用模型的提供者,或者能拿到权重
通用能力弱强

2023 年之后,足够大的通用模型在许多医学、法律考试题上超过了小的领域模型(§7);但隐私、成本和可控性让领域模型仍然有它的位置。“领域”的价值越来越多地体现在数据和评测上,而不只是模型本身。

4.3 Pile of Law:从法律里学习”什么数据不该用”

Henderson et al.(NeurIPS 2022 数据集与基准)发布了 256 GB 的英文法律和行政数据:判决书、合同、行政法规、立法记录等。除了作为法律模型的训练数据,这篇论文提出了一个有意思的观点:法律本身就包含了大量关于”什么信息不该公开”的规范——政府在长期实践中形成了限制有害内容和隐私信息公开的规则(例如某些类型的案件在公开文书里用化名或缩写指代当事人)。作者把这些规范提炼成对研究者有用的数据过滤经验,并建议把”从数据里学习过滤规则”作为一个研究方向。这和第 2 讲 §4 的讨论直接相关:过滤是一种价值判断,而法律提供了一套经过社会检验的判断。

4.4 LegalBench:专业领域的评测要由专业人士来建

LegalBench(Guha et al. 2023,在 W23 课程之后发表,由 Stanford 的法律学者和计算机科学家合作)包含 162 个法律推理任务,覆盖六种类型的法律推理(大致对应法律分析的”IRAC”框架:识别问题、回忆规则、应用规则、得出结论,再加上解释和修辞理解),任务由法律专业人士设计和手工构建,评测了 20 个开源和商业大模型。它的意义在于方法:在医学、法律这类领域,“对”由专业判断定义,评测必须由领域专家参与构建,而不能由计算机科学家想当然地编写。这和代码领域(有可执行的测试)形成鲜明的对比。


5. 数据稀缺的领域:RNA 与几何深度学习 · Data-scarce domains

5.1 为什么是 RNA

RNA 不只是 DNA 和蛋白质之间的”信使”:很多 RNA 本身就有功能(调控基因、催化反应、感知小分子),它们的功能同样由三维结构决定。RNA 也是越来越重要的药物——mRNA 疫苗、siRNA 药物,以及以 RNA 为靶点的小分子。但已知三维结构的 RNA 比蛋白质少得多,RNA 结构预测远没有像蛋白质那样被 AlphaFold “解决”。对机器学习来说,这是一个典型的数据稀缺领域:§2 的两条路——共进化(需要大量同源序列)和大规模语言模型(需要海量数据)——都走不太通。

5.2 ARES:只用 18 个结构训练的打分函数

Townshend et al.(Science 2021)的问题是结构打分:给定一个 RNA 的很多候选三维结构(由传统的采样方法生成),挑出最接近真实结构的那个。他们的 ARES(Atomic Rotationally Equivariant Scorer):

  • 只用原子坐标作为输入,不加入任何 RNA 专门的知识(不告诉它什么是碱基配对、什么是螺旋);
  • 网络是旋转等变的:内部单元携带的不只是数字,还有随输入一起旋转的向量和张量,因此它能识别螺旋、发夹、茎这类结构元件,而不管分子朝哪个方向;
  • 只用 18 个已知的 RNA 结构训练,却在社区盲测(RNA-Puzzles)中一致地给出最好的结果,而且能处理比训练结构大得多、复杂得多的 RNA。

同期 Science 的评论文章也指出,ARES 离”原子分辨率”或”足以指导药物发现”还有距离,但在一个长期进展缓慢的领域取得了显著的突破。作者认为这种”只用坐标、不用领域知识”的方法可以推广到结构生物学和材料科学的其他问题。

5.3 在三维螺旋上复现这个思路

代码 03 的”天然结构”是 16 个点组成的右手螺旋(半径、螺距、每圈点数随机),“候选结构”是在天然结构上随机折两处”铰链”再加一点噪声——键长都对,整体形状错了。任务:只看候选结构本身,预测它离天然结构多远(RMSD)。训练用 18 个天然结构 × 30 个候选;测试用 50 个新结构 × 20 个候选,全部随机转了方向。三种模型(同样的 MLP):

  1. 直接看 48 个坐标;
  2. 看坐标,训练时每个样本随机旋转(数据增强);
  3. 只看 120 个两两距离——旋转、平移都不改变它(不变的表示)。
模型训练步数Spearman挑出来的结构的 RMSD
直接看坐标6000.2110.653
坐标 + 随机旋转增强6000.7710.396
两两距离(旋转不变)6000.8050.335
直接看坐标30000.2480.648
坐标 + 随机旋转增强30000.8620.331
两两距离(旋转不变)30000.8630.303

(参照:随便挑一个 0.762,每次都挑到最好的 0.190。)

  • 直接看坐标的模型几乎不会给转了方向的结构打分:它学到的”天然结构长什么样”绑死在了训练数据的朝向上。把天然结构增加到 200 个也没用(0.281)——更多同一个朝向的数据不能教会它旋转不变。
  • 数据增强能把能力找回来,但需要更多训练;把对称性写进表示的模型 600 步就最好。数据和算力充足时差距会缩小(200 个结构、3000 步时 0.875 vs 0.897)。

镜像:不变性要选对。 把天然结构照镜子,右手螺旋变成左手螺旋——两两距离一模一样,但只允许旋转对齐时,它和天然结构的 RMSD 平均有 1.663。三种模型怎样看待镜像:

模型天然结构的打分镜像的打分认为天然结构更好的比例
直接看坐标0.8791.0130.580
坐标 + 随机旋转增强0.3601.2671.000
两两距离0.3360.3360.500

只看距离的模型给两者完全相同的打分:距离对镜像也是不变的,它天生分不出左右手。而真实的 RNA、蛋白质都有手性——镜像分子往往在生物学上完全不同。“坐标 + 增强”的模型却能分清:旋转不改变手性,训练数据里的天然结构全是右手螺旋,它学到的就是”右手螺旋才像天然结构”。这就是 ARES 和后来的很多结构模型用等变网络(对旋转等变、对镜像不等变)而不是简单地只喂距离的原因:该不变的(旋转、平移)不变,不该不变的(镜像)要保留。

5.4 ATOM-1:数据不够,就专门为机器学习产生数据

Townshend 之后创办了 Atomic AI。2023 年 12 月,他们发布了 ATOM-1 的预印本:一个在化学探测(chemical mapping)数据上训练的 RNA 基础模型。化学探测实验用化学试剂”标记”RNA 上暴露在外的核苷酸,间接反映它的结构;它比测三维结构便宜得多、规模大得多。他们用专门为机器学习训练设计的湿实验流程,测了数百万条 RNA 序列、超过 10 亿个核苷酸级别的测量值;在 ATOM-1 的嵌入上训练很小的探针网络(第 6 讲 §2.2),只用少量额外数据就在多个 RNA 预测任务上达到了最好的水平(这是公司的预印本,结果由作者自己报告)。

这是第 2 讲”以数据为中心”在科学领域的极端版本:当世界上没有足够的数据时,为模型设计实验、产生数据本身就成了研究的核心。


6. 领域模型的共同问题 · Cross-cutting issues

  1. 评测是领域的核心资产。 代码有可执行的测试(HumanEval),结构有实验测出的真值和盲测(CASP、RNA-Puzzles),医学和法律需要专家构建的基准(LegalBench、MedQA)。评测决定了什么叫”进步”。
  2. 测试集污染。 公开的基准会进入后来的训练数据(第 2 讲 §7):HumanEval 的题目被大量讨论和转载;医学考试题在网上有题库。领域评测需要持续更新和留出。
  3. 数据的权利与隐私。 代码有许可证,病历受隐私法保护,生物数据常常属于实验室或公司。谁能训练领域模型,往往由谁拥有数据决定(第 16、19 讲)。
  4. 表示与归纳偏置。 领域分词器(BioMedLM)、对称性(ARES)、MSA 与单序列(AlphaFold vs ESM):领域知识最有价值的地方,常常是决定”模型看到什么、对什么不变”。
  5. 风险。 生物模型有双重用途的隐患(设计有害分子);法律和医学模型的”幻觉”(编造判例、错误的诊断建议)后果严重(第 18 讲)。

7. 2023 年之后 · Since 2023

  • 通用模型追上甚至超过领域模型。 2023 年 GPT-4 在美国律师资格考试的模拟测试中达到了及格线以上(Katz et al. 2023);Google 的 Med-PaLM 2 在 MedQA 上达到 86.5%(BioMedLM 是 50.3%)。很多医学、法律应用转向”通用大模型 + 检索 + 领域评测”。
  • 代码成了基础模型的核心能力。 开放的代码模型(BigCode 的 StarCoder、Meta 的 Code Llama)和数据集(The Stack,注重许可与”退出”机制)出现;评测从 HumanEval 转向更真实的任务,例如在真实 GitHub 仓库里修 bug 的 SWE-bench(2023)。用执行结果作为奖励的强化学习成了训练代码和推理模型的主要方法之一,编程智能体成为最热门的应用之一。
  • 生物学的基础模型。 AlphaFold3(2024)把预测范围扩展到蛋白质与 DNA、RNA、小分子的复合物,它的结构生成部分换成了直接在原子坐标上工作的扩散模型、不再用等变网络,靠随机旋转的数据增强(对应 §5.3 的第二种模型);ESM3(2024)同时生成序列、结构和功能;Evo(2024)在基因组 DNA 上训练长上下文的语言模型。RNA 结构预测仍然困难:在 2022 年的 CASP15 中,RNA 结构预测的最好结果并不来自深度学习方法,这被看作 RNA 数据稀缺的直接后果。
  • “产生数据”成为策略。 为模型设计高通量实验(ATOM-1 的化学探测、大规模的深度突变扫描),以及”实验—模型”闭环的主动学习,成为科学基础模型的重要方向。

哪些结论仍然成立? 同一个配方在序列数据上普遍有效;共进化与语言模型的联系;代码的功能正确性评测与 pass@k;领域评测必须由专家参与;数据稀缺时归纳偏置和数据产生最重要。被修正或补充的:小型领域模型在很多基准上被大型通用模型超过;“等变网络是必须的”在数据和算力足够时被数据增强部分取代。


8. 小结 · Summary

  1. 配方可以搬家:代码、蛋白质、RNA、病历、法律文本都可以用”token 化 + 自监督 + 规模”。搬家时要问三个问题:数据(多少、谁拥有)、结构(该写进模型的对称性和规律)、评测(有没有客观的对错)。
  2. 共进化:配对 / 接触的位置协同变化。MI + APC 能找出配对(200 条序列时 1.000;没有 APC 停在 0.812,进化树制造假相关;20 条序列只有 0.688)。掩码语言模型的注意力学到同样的信号(ESM、Rao et al.),并能零样本给突变打分:补偿突变比破坏配对得分高的比例 0.980(独立位置模型 0.220)。
  3. AlphaFold2 用 MSA,ESMFold 只用一条序列;单序列方法需要规模——我们的小模型在跨家族的单序列预测上只有 0.102(随机 0.015)。
  4. 代码:用功能正确性评测;pass@k 要用无偏估计(朴素估计偏低:0.135 vs 0.161);多采样 + 测试挑选非常有效(0.027 → 0.245);低温度利于 pass@1,高一些的温度利于 pass@k;82% 的正确程序和参考答案写法不同,文本相似度分不清对错。
  5. 医学与法律:GatorTron(820 亿词病历)、BioMedLM(27 亿参数、MedQA 50.3%)说明领域数据和领域分词器的价值;Pile of Law 把法律里的隐私与过滤规范变成数据实践;LegalBench 说明专业评测要由专业人士构建。
  6. RNA 与几何深度学习:ARES 只用 18 个结构训练,靠旋转等变的网络;我们的玩具里,不变的表示 600 步就最好(0.805),直接看坐标的模型对转了方向的结构几乎无能为力(0.211),而只看距离又分不出镜像——不变性要选对。ATOM-1 则为模型专门产生数据。

9. 常见误区 · Common pitfalls

  1. “蛋白质语言模型只是在背序列。” 掩码语言建模迫使模型利用位置之间的依赖,而这些依赖来自结构;注意力里因此能读出接触(代码 01)。
  2. “共进化信号就是两两相关。” 原始的相关里混着进化树带来的背景相关,必须校正(APC、全局模型);否则 1000 条序列也只能找对 81%(代码 01)。
  3. “独立地给每个位置打分就能评估突变。” 突变的效果常常取决于别的位置(上位效应);补偿突变就是例子(代码 01 演示 3)。
  4. “代码模型应该用 BLEU 或完全匹配评测。” 功能相同的程序可以写得完全不同(82%),只差一个字符的程序可以完全错误(代码 02)。
  5. “pass@k 就是 1 − (1 − pass@1)^k。” 用样本估计的 pass@1 代进去是有偏的(偏低);要用 Chen et al. 的无偏估计。
  6. “采样温度越低越好。” 只看 pass@1 时如此;允许多次尝试时,更高的温度带来多样性,pass@k 更好(代码 02)。
  7. “领域模型一定比通用模型好。” 2023 年之后,大型通用模型在很多领域基准上超过了小型领域模型;领域模型的优势更多在隐私、成本、可控性和领域分词器。
  8. “只看距离的表示就够了,它对旋转不变。” 它对镜像也不变,因此分不出手性(代码 03 演示 3)。
  9. “数据少,就只能放弃深度学习。” 合适的归纳偏置(ARES)和为模型专门产生数据(ATOM-1)是两条出路。

10. 练习 · Exercises

练习 1(为什么 APC 有效) 假设位置之间的”背景相关”可以写成 B(i,j)=bibjB(i,j) = b_i b_j(每个位置有一个”受进化树影响的程度” bib_i),真实的配对信号是稀疏的 S(i,j)S(i,j),观测到的 M=B+SM = B + S。证明在 SS 很稀疏时,M(i,⋅)M(i,\cdot) 的平均约为 bibˉb_i \bar b,并由此说明 APC 近似地去掉了 BB。

参考答案

M‾i⋅=1L∑j(bibj+Sij)≈bibˉ\overline{M}_{i\cdot} = \frac{1}{L}\sum_j (b_i b_j + S_{ij}) \approx b_i \bar b(SS 稀疏,对平均的贡献很小),同理 M‾⋅j≈bjbˉ\overline{M}_{\cdot j} \approx b_j \bar b,总平均 M‾≈bˉ2\overline{M} \approx \bar b^2。所以 M‾i⋅M‾⋅j/M‾≈bibj=B(i,j)\overline{M}_{i\cdot}\overline{M}_{\cdot j}/\overline{M} \approx b_i b_j = B(i,j),减掉之后剩下 S(i,j)S(i,j)。这也说明 APC 的假设:背景相关是”可乘的”,每个位置只有一个参数。代码 01 里原始 MI 的假配对都涉及位置 14(一个 bib_i 很大的”枢纽”),正是这种背景。

练习 2(改一行代码,预测结果) 把 domain_lab.make_family 的 n_clades 从 6 改成 1(没有进化树的分支结构,所有序列都直接从祖先突变)。你预测原始 MI 和 MI + APC 的精度会怎样变化?

参考答案

只有一个分支时,背景相关大大减弱,原始 MI 的精度应该接近 MI + APC(两者都很高,具体以你运行的结果为准)。这说明原始 MI 的问题主要来自进化树(系统发生)结构,而不是统计本身。真实的生物数据有复杂的进化树,所以校正必不可少。

练习 3(掩码语言模型为什么”看”伙伴) 假设一个配对位置 (i,j)(i, j) 的碱基组合分布是 G-C 0.3、C-G 0.3、A-U 0.15、U-A 0.15、G-U 0.05、U-G 0.05。分别计算:(a) 不看任何别的位置时,猜 ii 的最优准确率;(b) 看到 jj 之后猜 ii 的最优准确率。这个差别对注意力意味着什么?

参考答案

(a) ii 的边缘分布:G 0.35、C 0.3、A 0.15、U 0.2,最优是猜 G,准确率 0.35。(b) 看到 jj:jj = C(概率 0.3)→ ii 一定是 G;jj = G(0.35)→ ii 是 C(0.3/0.35)或 U(0.05/0.35),猜 C 对 0.857;jj = U(0.2)→ A(0.15/0.2)或 G(0.05/0.2),猜 A 对 0.75;jj = A(0.15)→ U。总准确率 0.3+0.3+0.15+0.15=0.90.3 + 0.3 + 0.15 + 0.15 = 0.9。从 0.35 到 0.9:看伙伴带来的收益是巨大的,所以梯度下降会让注意力去看伙伴——接触就出现在注意力图里。(真实序列里还有保守性和其他位置的信息,实际准确率会不同。)

练习 4(pass@k 的无偏估计) 一道题采样 n=10n = 10 个程序,其中 c=2c = 2 个正确。分别用无偏估计和朴素估计计算 pass@5。哪个更大?

参考答案

无偏:1−(85)/(105)=1−56/252=0.7781 - \binom{8}{5}/\binom{10}{5} = 1 - 56/252 = 0.778。朴素:1−(1−0.2)5=1−0.328=0.6721 - (1 - 0.2)^5 = 1 - 0.328 = 0.672。无偏估计更大。直觉:从 10 个里不放回地挑 5 个,只要挑中 2 个正确中的任意一个就成功;朴素估计相当于”有放回地、每次成功率 0.2”,而且把 p^\hat p 的噪声代进了一个凹函数。代码 02 演示 3 的平均结果(0.161 vs 0.135)就是这个偏差的累积。

练习 5(温度与 pass@k) 用一个极端的例子说明为什么 pass@1 和 pass@k 的最优温度不同:假设模型对一道题有两个候选程序 A(概率 0.6,错误)和 B(概率 0.4,正确)。温度 0(贪心)和温度 1 时,pass@1 和 pass@10 分别是多少?

参考答案

温度 0:总是选 A,pass@1 = 0,pass@10 = 0。温度 1:每次 0.4 的概率选 B,pass@1 = 0.4,pass@10 = 1−0.610≈0.9941 - 0.6^{10} \approx 0.994。这个例子里温度 1 两者都更好;反过来,如果正确的是 A(0.6),温度 0 的 pass@1 = 1,比温度 1 的 0.6 好,但 pass@10 两者都接近 1。一般地:低温度把概率集中在最可能的答案上,适合”只能交一次”;高温度增加多样性,适合”可以交很多次、有测试来挑”。

练习 6(改代码,预测结果) 把代码 02 的单元测试从 x=0,…,9x = 0, \ldots, 9 改成只测提示里给出的 3 个 xx。你预测 pass@k 会怎样变化?这说明了测试的什么问题?

参考答案

pass@k 会大幅上升:很多程序能”凑”出提示里的 3 个例子,却不是正确的函数(演示 1 里模型写的程序常常只满足部分例子;只测 3 个点时,满足这 3 个点的错误程序也会被算对)。这说明测试的覆盖率决定了”功能正确性”有多可信——真实的 HumanEval 每题也只有平均几个测试,测试不充分时,pass@k 会高估模型(后来的 EvalPlus 等工作专门给 HumanEval 加了更多测试,很多模型的分数明显下降)。

练习 7(概念:领域模型还是通用模型) 一家医院想做一个从病历里抽取用药信息的系统。列出选择”在本院病历上训练一个领域模型”和”用一个商业通用大模型 + 提示”的各两个理由。

参考答案

领域模型:(1)病历不能离开医院(隐私法规),本地训练和部署满足合规;(2)病历里大量缩写、模板和本院特有的表达,领域分词器和领域数据能更好地处理;(也可以:成本可控、可以审计)。通用模型:(1)通用大模型的语言理解和推理能力强,少量示例就能工作,开发快;(2)不需要训练基础设施和大量标注(也可以:医学知识更全面)。实践中常见的折中是:在本地部署开放权重的通用模型,再用本院数据做参数高效微调(第 6 讲)。

练习 8(改代码,预测结果) 在代码 03 里,把训练集的天然结构也随机转个方向(make_set(18, 30, gen, rotate=True))。你预测”直接看坐标”的模型在测试集上的表现会怎样变化?和”坐标 + 增强”相比呢?

参考答案

训练数据本身就包含了各种朝向(每个候选一个随机方向),相当于一次固定的数据增强(每个样本只有一个方向),“直接看坐标”的模型应该比原来好很多,但不如每个 batch 都重新随机旋转的增强模型(后者见过的朝向多得多)。具体以你运行的结果为准。这说明数据增强的本质是”让训练数据覆盖对称性”;而把对称性写进模型,就不需要覆盖。

练习 9(概念:为什么 ARES 不用”只看距离”) 列出”只用两两距离”作为分子表示的两个优点和两个缺点。

参考答案

优点:(1)天然地对旋转和平移不变,不需要从数据里学这些对称性;(2)简单,任何模型都能直接使用。缺点:(1)对镜像也不变,分不出手性(代码 03 演示 3);(2)NN 个原子有 N2N^2 个距离,大分子上计算和存储成本高,而且距离之间有大量冗余和约束(不是任意一组数都对应一个三维结构),生成结构时很难保证合法。等变网络用”随旋转一起变的向量 / 张量”作为中间表示,同时解决了这两个问题。

练习 10(概念:数据稀缺领域的出路) 本讲提到了数据稀缺领域的几种应对:共进化(MSA)、大规模单序列预训练、几何归纳偏置、为模型产生新数据。对 RNA 结构预测,分别说说每一种的限制。

参考答案

共进化:很多 RNA 家族的同源序列很少,或者比对本身很难做(RNA 的序列保守性低于结构保守性)。大规模单序列预训练:需要海量的序列和算力,而且只用序列学到结构需要结构信号足够强(代码 01 演示 4 在小规模上失败)。几何归纳偏置:减少了需要的数据量,但仍然需要一些已知结构来训练和验证(ARES 用了 18 个),而且只解决”打分”,候选结构要靠别的方法生成。产生新数据:化学探测等实验比测三维结构便宜得多,但它测的是间接信号(哪些核苷酸暴露在外),从它到三维结构还有距离;实验成本和设计本身也是门槛。实践中这几条路是组合使用的。


11. 延伸阅读 · Further reading

原课阅读清单(Text and (Masked) Language Modeling FMs)

  • Chen et al. Evaluating Large Language Models Trained on Code(Codex、HumanEval). 2021. arXiv:2107.03374
  • Nijkamp et al. CodeGen: An Open Large Language Model for Code with Multi-Turn Program Synthesis. ICLR 2023. arXiv:2203.13474
  • Jumper et al. Highly accurate protein structure prediction with AlphaFold. Nature 2021. doi:10.1038/s41586-021-03819-2
  • Rives et al. Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences(ESM). PNAS 2021. doi:10.1073/pnas.2016239118
  • Rao et al. Transformer protein language models are unsupervised structure learners. ICLR 2021. bioRxiv 2020.12.15.422761
  • Yang et al. GatorTron: A Large Clinical Language Model to Unlock Patient Information from Unstructured Electronic Health Records. 2022. arXiv:2203.03540
  • Stanford CRFM. BioMedLM: a Domain-Specific Large Language Model for Biomedical Text(PubMedGPT). 2022(博客). crfm.stanford.edu
  • Henderson et al. Pile of Law: Learning Responsible Data Filtering from the Law and a 256GB Open-Source Legal Dataset. NeurIPS 2022 Datasets & Benchmarks. arXiv:2207.00220
  • Guha et al. LegalBench: A Collaboratively Built Benchmark for Measuring Legal Reasoning in Large Language Models. 2023. arXiv:2308.11462

原课相关(2/13 Unlocking the RNA Universe)

补充

  • Meier et al. Language models enable zero-shot prediction of the effects of mutations on protein function(ESM-1v). NeurIPS 2021. bioRxiv 2021.07.09.450648
  • Lin et al. Evolutionary-scale prediction of atomic-level protein structure with a language model(ESM-2、ESMFold). Science 2023. doi:10.1126/science.ade2574
  • Dunn, Wahl & Gloor. Mutual information without the influence of phylogeny or entropy dramatically improves residue contact prediction(APC). Bioinformatics 2008. doi:10.1093/bioinformatics/btm604
  • Jimenez et al. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? ICLR 2024. arXiv:2310.06770

12. 下一讲预告 · Next lecture

Part V(生态与应用)到这里结束。从第 13 讲的开源协作、第 14 讲的多模态,到这一讲的领域模型,我们反复看到同一个事实:模型的能力和问题都来自数据——GatorTron 的病历、Codex 的 GitHub 代码、Pile of Law 的判决书,这些数据都牵涉到具体的人。

第 16 讲:隐私——记忆、训练数据提取与差分隐私(2/6 Lecture: Security + Privacy,Tatsu Hashimoto)进入 Part VI(社会影响)。语言模型会记住训练数据吗?攻击者能不能把训练数据里的电话号码、病历片段”问”出来?怎样量化”记住了多少”?差分隐私能提供什么保证、代价是什么?代码会在第 1 讲的迷你世界里插入”金丝雀”(canary)字符串,测量模型的记忆程度,演示训练数据提取攻击,并比较差分隐私训练的隐私与效用。

← 返回课程目录