上个月我把一个单细胞转录组基础模型的微调结果发给合作医院的老师。模型在6种免疫细胞分类上的F1做到了0.91对方看着那张漂亮的ROC曲线问了一句让我愣住的话“它凭什么把这些细胞分开它到底学到了什么”这不是个例。这两年生物医学基础模型一个接一个发布有的在基因表达预测上刷新纪录有的在蛋白结构任务上强到离谱但绝大多数使用者、甚至不少研究者其实都不清楚这些模型内部到底编码了什么。这篇文章我想从头捋一遍这个问题生物医学基础模型为什么强、怎么判断它“学会”的是不是真生物学知识、有哪些工具可以拆开黑盒以及我在实际测评中踩过的坑。适合正在用基础模型做生信分析、想给模型结论找证据的人。你会得到一套可以马上抄作业的验证方案。1. 这几类生物医学基础模型到底是怎么“变强”的1.1 序列模型、结构模型、多模态模型的三条技术路线生物医学基础模型不是凭空冒出来的。它们的共同点是在海量无标注数据上用自监督目标做预训练把数据里的统计规律压缩进模型参数下游任务只需要少量标注样本做微调就能适配。这个范式在自然语言处理里跑通之后迅速被搬到了生物医学的各个数据类型上。目前主流的路线大概分三类。第一类是序列类模型直接处理DNA、RNA、蛋白质的字符序列典型代表包括蛋白质语言模型ESM、基因组语言模型DNABERT和Nucleotide Transformer还有单细胞转录组领域的Geneformer、scBERT、scGPT。第二类是结构类模型最出名的就是AlphaFold2它把氨基酸序列映射到三维结构虽然不完全算语言模型但同样符合“大数据预训练下游适配”的基础模型范式。第三类是多模态模型把病理图像、医学文本、基因组数据揉进同一个表征空间比如一些病理基础模型直接在组织切片图像和诊断文本之间做对齐。为什么这类模型能变强核心在自监督预训练。拿一个单细胞模型来说它的预训练任务可能是“根据细胞里其他基因的表达量预测某个基因的表达值”为了把这件事做好模型必须学会基因之间的共表达关系、调控网络的结构、细胞类型的特异表达模式。这些知识被存进了模型的隐层向量里等下游要分类细胞类型或预测基因调控状态时模型只需要在这些知识之上加一层简单的分类头效果就可以超过在单任务上从零训练的模型。这也是它让传统机器学习方法望尘莫及的地方。1.2 模型越强越要面对一个“信任危机”但问题恰好出在这个“强”字上。生物医学和推荐系统不一样模型输出会用来推机制假说、辅助临床决策如果没人能说清楚模型为什么给出这个结论那这个结论就不具备可复现性也不具备生物学上的证据力。我自己观察到的一个现象是很多论文里报告的评测分数是在和预训练数据同源的公共数据集上跑出来的。比如一个模型训练时看过GEO里的上万个样本下游评测又用了GEO里的另一个数据集结果模型表现很好。但换一个平台、换一种测序方法、换一批不同中心的数据成绩直接掉一截。这种情况我一般会怀疑模型不是学会了生物学规律而是记住了数据集的分布特征。更隐蔽的是预训练数据本身就有大量噪声批次效应、标签错误、冗余序列、技术伪影。模型在学习的时候并不知道哪些信号来自真实生物学过程、哪些来自实验操作。它只是把能降低损失的特征都学进去。于是我们经常看到一个现象模型在细胞类型分类上到了0.95的准确率但在UMAP图上不同实验批次分得比不同细胞类型还清楚。这时候你问它“学到了什么”答案可能是“学到了批次之间的差异”而不是“学会了免疫细胞的功能特征”。所以随着基础模型越来越强“可解释性”已经从锦上添花变成了刚需。接下来我就把这个问题拆开讲一讲我实际用来审视模型的方法。2. 要想知道模型学了什么得先掌握四类分析工具2.1 表征空间分析给模型的“记忆库”做一次体检我做模型测评第一件事永远是看表征空间。所谓表征空间就是模型把输入数据转换成的那组向量。你可以理解成模型对输入数据做的“记忆快照”——每个细胞、每条序列都会变成高维空间里的一个点这些点之间的距离和相对位置反映的就是模型认为它们有多相似。具体操作不复杂。拿单细胞基础模型来说我把每个细胞的隐层向量提取出来先做L2归一化然后降维到二维用UMAP投影。关键是投影之后不要只看图形一定要配量化指标。我通常用两个维度来判断按细胞类型着色同类型细胞是否聚在一起用轮廓系数衡量。按实验批次或供体着色不同批次是否混匀用批次熵或平均轮廓宽度衡量。一个健康的模型表征应该是在按细胞类型着色时边界清晰、按批次着色时混成一片。反过来如果按批次着色出现明显分群说明模型在表征层面就已经把技术伪影当成了主要信号。这时候下游任务做得再漂亮我也不会急着采信。还有一个容易犯的错误是只取最后一层向量。中间层往往包含不同的信息粒度建议把倒数第一层、倒数第二层甚至注意力输出都拉出来各跑一遍看不同层编码的信号是否有差异。有些模型在浅层学的是基因共表达模式在深层学的才是细胞类型标签你只看最后一层会漏掉很多东西。2.2 探针实验给模型的隐层做“阅读理解”表征可视化只能告诉你“有没有结构”但不能告诉你“结构是什么”。想知道模型隐层里是否编码了某种特定的生物学信号一个标准做法是探针实验。思路特别朴素冻结模型参数只拿它输出的隐层向量去训练一个简单的分类器去预测某个属性。如果这个分类器能轻易做到高准确率说明该属性在模型表征里是线性可读的——也就是说模型确实保存了和这个属性有关的信息。这里有三个关键选择。第一用线性探针还是MLP探针。线性探针要求信息在表征空间里是近似线性可分的条件更严格说服力更强。MLP探针能查出非线性编码的信号但容易过拟合用在几百个样本上几乎能拟合一切。我默认先用线性探针得到阳性结果后再用MLP做补充验证反过来的顺序基本不成立。第二一定要有随机初始化模型做对照。把同一个架构、同一种数据、同一个探针换到参数还是随机的模型上跑一遍。如果随机模型的探针都能做到差不多的准确率那只能说明标签本身和输入特征有很强的直接关联模型预训练没有任何增量。这个对照是我见过被忽略最多的一步。第三探针任务的选择要独立于下游任务。你微调模型去预测细胞类型再用细胞类型标签做探针这是循环论证。应该挑一些微调阶段完全没有用到的属性比如细胞周期状态、基因表达程序得分、线粒体比例等。这些属性如果也能被探针读出来才算证明模型学到的表征有通用性。2.3 归因与注意力看模型做决策时的“眼动轨迹”表征空间和探针实验回答的是“模型记住了什么”归因和注意力分析回答的是“模型做某个具体预测时看了什么”。前者关乎知识库存后者关乎决策路径。注意力机制自带注意力权重很多人会直接拿attention图说“模型关注了哪些基因”。这里我要泼一盆冷水注意力权重可以解释为相关性但解释成因果性基本不成立。一个基因的attention高不一定表示模型依赖它做判断它可能只是表达量高、在序列里位置显眼。我一般把注意力当成线索不当成证据。真正要定位“哪些输入特征驱动了预测”我推荐三类方法梯度×输入Gradient×Input简单快速用反向传播得到每个特征的梯度再乘以特征值经济实惠。积分梯度Integrated Gradients比上面那种更稳定不容易出现梯度饱和问题适合做基因表达的归因。遮罩实验Occlusion把某个基因的表达量置零或替换成均值再看预测值变化多少。这个方法最直观也最容易解释给别人听。举个例子。我让一个模型去预测细胞是不是CD8 T细胞然后做归因得到每个基因的得分。把得分最高的50个基因列出来我第一件事是拿它们和已知的CD8 T标记基因做富集分析。如果富集到细胞毒相关通路说明模型确实在利用已知生物学信号。如果富集出来的全是核糖体蛋白、热休克蛋白这类管家基因那就要警惕了——模型可能只是在“偷看”表达量高的基因而不是记住了细胞类型特异信号。2.4 扰动与消融把输入“搞坏”再看模型的真实反应最后一类工具本质是在做因果层面的检验。既然不能直接控制模型内部的参数那就控制输入把某个关键基因的表达量从100%逐渐降到50%、降到10%、降到0看模型输出的预测概率是否跟着变化。理想情况下一个真正理解了基因调控关系的模型应该对已知的关键调控因子表现出剂量依赖的反应表达量下降它对某个细胞类型的预测置信度随之下降而且是渐进而非跳变。如果模型对任何基因扰动都反应剧烈那说明它对输入特征的依赖性太敏感鲁棒性很差如果对什么都无动于衷说明它根本没在用那些特征。这个扰动实验特别适合DNA模型。我有一个习惯会在预测启动子活性的模型上把转录因子结合位点里的关键碱基逐个做点突变然后对比突变前后的预测值。如果突变一个核心位点预测下降很多而突变一个非功能区的随机碱基预测几乎不变那这个模型的决策逻辑就比较接近生物学直觉。反之如果模型对随机突变也很敏感那它八成是在学序列的统计特征而不是调控机制。四类工具各有利弊我的原则是至少要三管齐下单一方法给结论翻车概率太高。3. 实操记录我是怎么测评一个单细胞基础模型的3.1 实验设计与数据准备理论讲太多没用我拿一段完整的真实测评流程出来大家可以直接复现。我选了一个常见的单细胞转录组基础模型在PBMC数据上预训练的那种任务是6种免疫细胞类型分类CD4 T、CD8 T、B细胞、NK细胞、单核细胞、树突状细胞。数据用的是公共PBMC数据集细胞数大概2万我先做了标准的质控过滤线粒体比例低于20%、基因数在500到6000之间、测序深度不过高。然后按供体分层采样保证每个供体的细胞都均匀出现在训练集和验证集里。光看分类准确率是不够的。所以我在实验设计阶段就同时安排了四个维度的评估常规指标macro F1、balanced accuracy防止类别不平衡造成虚高。校准质量可靠性曲线和期望校准误差ECE模型给出的置信度是否和真实正确率一致。跨批次泛化把一个供体的数据全部留出看模型是不是只记住了供体的特异信号。可解释验证就是我们前面说的表征、探针、归因三件套。这个设计的目的很明确如果模型在常规指标上很高但跨供体泛化很差那它的“强”就要打一个大大的问号。3.2 第一步表征可视化先看细胞聚类是否合理我做的第一件事是把微调后模型的倒数第二层隐向量提取出来做了标准化的UMAP投影。一边按细胞类型着色一边按供体着色。结果还算理想6种细胞类型在UMAP上分群清晰CD4 T和CD8 T之间有明显的邻近关系单核细胞在远端符合免疫学的认知。按供体着色则相对混匀没有出现“每个供体一坨”的条带状结构。为了量化我算了一个分组轮廓系数按细胞类型的轮廓系数是0.47按供体的轮廓系数只有0.08。前者显著高于后者说明模型表征的主导信号是细胞身份而不是实验批次。这个步骤看起来简单但它决定了后续所有分析值不值得做。如果这里就发现批次分离严重我不会急着做下游的归因而是先回去检查训练数据这个供体或者这个批次是不是有一些高表达的marker基因混在特征里从而给了模型“抄近路”的信号。3.3 第二步线性探针与随机初始化对照UMAP告诉我表征有结构但我不确定这种结构是不是足够的“知识”。于是上探针实验。我把微调模型在验证集上重新过了一遍取出隐层向量然后训练一个逻辑回归来预测细胞类型。同时对随机初始化模型做了完全一样的操作。结果如下探针配置微调模型准确率随机初始化模型准确率线性探针预测细胞类型0.870.23线性探针预测细胞周期阶段0.310.29线性探针预测线粒体基因比例高低0.520.40第一行很明显预训练和微调让细胞类型信息变得线性可读随机模型几乎读不出来。第三行值得玩味模型对线粒体比例这种技术质量指标也有一定的可读性说明它部分编码了细胞状态或损伤信号这部分信号有时会被当成生物学信号误读。所以我在最终报告里特别标注模型的学习结果中混入了少量技术相关信号需要在特定任务中留意。探针实验给我的结论是这个模型对细胞类型有很强的语义编码同时有一定的技术伪影成分两者共存。只看第一行会过度乐观只看第三行会过度悲观合在一起才是真实情况。3.4 第三步归因分析看看模型找标记基因靠不靠谱接着我用积分梯度做了归因分析。任务是“模型为什么把某个细胞识别为CD8 T细胞”我取了归因得分前50的基因和经典的人类CD8 T标记基因列表做重叠检验。结果让我比较有信心TOP基因里出现了CCL5、NKG7、GZMA这些经典的细胞毒和效应记忆相关基因这些在免疫学文献里都是CD8 T的核心分子。同时我把模型的归因列表和传统差异表达方法Wilcoxon秩和检验的FindAllMarkers得到的结果做了对比。传统方法选出的是“该类型里表达量显著高于其他类型”的基因模型归因选出的是“推动模型分类决策”的特征基因这两类并不完全一致。重叠率大概在60%左右差异部分里有一批基因是表达量不算特别高、但确实是谱系特异转录因子比如某些锌指蛋白家族成员这启发模型可能学到了比单纯表达量差异更深层的调控特征。当然也有翻车迹象归因列表前10里混进来两个高表达的核糖体蛋白基因。我查了一下输入数据的预处理发现这两个基因在部分细胞里表达量特别高模型在分类时把它们当成了背景信号的一部分。这不算致命错误但提醒我输入特征的计算方式会直接影响归因的可靠性定量归一化做的不好模型就会走捷径。3.5 第四步交叉验证与结论判定四个维度的结果都拿到之后我做了一个汇总判断。这里不是单纯数“有几项通过”而是看证据链是否一致。证据维度结果是否支持“学到了真生物学”表征聚类按细胞类型轮廓系数0.47批次伪影弱支持探针读取细胞类型信息显著高于随机模型支持归因富集到已知标记基因CCL5、NKG7等富集支持扰动实验关键基因扰动有梯度支持但只做了部分验证跨供体泛化留一供体后F1降幅约8%基本支持仍有提升空间综合下来我会说这个模型在细胞类型分类这个任务上确实学到了不少真实的生物学信号但还没有做到“完全可信”它混入了技术伪影对供体的特异信号有一定依赖归因结果需要和传统统计方法互为印证。这个结论比“模型很准”或者“模型是黑盒”都要有价值得多。它告诉你模型的优势区间和失效边界在哪里——用它的预测做机制假说哪些结果可以采信哪些必须回到湿实验里验证。4. 这些坑我踩过之后才明白4.1 数据泄漏你以为在测泛化其实在测背题基础模型预训练数据来源于公开数据库下游评测数据也大多来自公开数据库。两者的重叠程度经常被忽略。一个基因、一个转录本、甚至一个细胞可能在预训练阶段就“见过”了。这种情况下评估指标虚高不代表真实世界可用。我现在的标准做法是设置“时间切分”用预训练数据截止时间之后才上传的公共数据做评估或者直接拿实验室自己新测的数据做外部验证。没有这种隔离我不会在论文里写“泛化能力优异”这几个字。4.2 批次效应模型可能学会了“实验中心”而不是细胞类型有次我用一个基础模型做跨数据集分类训练数据来自两个中心的单细胞数据。模型在测试集上F1很高但一画UMAP发现按中心分成了两簇。再一查发现两个中心在建库流程上有差异导致某些基因的表达量有系统性偏移。模型学会了利用这种偏移来做分类——那根本就是在分类“中心”只是恰好两个中心的细胞类型比例不同让它看起来分类很准。排查方法除了常规的批次混匀量化还可以做一个“中心预测任务”——用隐层向量去训练一个模型预测样本来自哪个实验中心。如果准确率很高说明表征里保留了大量可用的批次信号这本身就是警惕信号。4.3 探针失真探针太强会把噪声也当成知识探针实验看似简单坑在于探针本身的能力。你用一个复杂的MLP探针输入是几千维的表征向量数据只有几百个样本探针早就在训练集上把噪声背下来了。有时候我在小样本上跑MLP探针得到的准确率甚至比线性探针高20个百分点但换一组样本就崩了。我的建议是默认线性探针除非你有明确的生物学理由认为该信息必须以非线性方式编码。探针训练用交叉验证每次重复不同随机种子最后报告均值和标准差。还要做一次标签置换检验——把标签随机打乱100次看探针准确率分布。如果真实标签的准确率落在随机标签分布的尾部恭喜信号是真的。4.4 指标虚高准确率真的不等于理解免疫数据集里最常见的格局是T细胞占比超过50%模型只要把样本都判成T细胞准确率就能轻松过0.5。如果只盯着整体准确率看你根本发现不了模型对稀有细胞类型完全失效。我现在看指标坚持三个原则macro F1而不是weighted F1画校准曲线而不是只看AUC按供体分组做交叉验证而不是随机划分细胞。随机划分会让同一个供体的细胞同时出现在训练和验证集里信息泄漏严重成绩虚高到没有参考意义。按供体分组之后才是拿模型的真实泛化水平说话。4.5 分析工具自身的陷阱注意力不是因果归因也会分歧解释性分析工具本身也会骗人。注意力权重受序列长度和位置影响有时候高注意力只是“模型对特殊token的本能警觉”。归因方法之间的一致性也有限同一个样本用积分梯度和SHAP给出的top基因可能只有一半重叠。我的应对办法是让多个方法投票。展示top基因时只列出至少两种方法都认同的基因解释时少讲“模型认为X调控了Y”这种强因果叙事而是说“模型在决策时显著依赖X和Y”这种相关性描述。语言上的克制反映的是证据强度的边界。5. 一点个人体会做解释性分析这几年我最大的体会是给模型找“证据”的过程比看准确率数字更接近科研的本质。模型说某个基因重要你要去文献里翻模型说某个细胞类型分得开你要回到实验设计里想它有没有可能只是记住了某种技术噪声。建议你找一个手里在用的基础模型从一个小任务开始先画一张表征UMAP再跑一组线性探针最后做一个归因列表。把这三个结果留在项目文件夹里半年后再回头对照模型的正式应用效果。你会形成自己的判断直觉——哪些模型值得托付哪些模型只配当参考工具。这种直觉才是你区别于“只会调包跑模型的人”的真正资产。
阅读完成 · 觉得有帮助?