profile head上Captum归因散度升过10^-1

2026-10-10

tangermeme 把基因组模型训完后的分析收成一套工具。hg38 一号染色体 one-hot 不到 2 秒,耗时约为次快实现的三分之一;自定义 profile head 上,Captum 的归因散度超过 10^-1,tangermeme 仍约 10^-7。

这篇在解决什么

基因组模型已经能从序列预测转录因子结合、组蛋白修饰、可及性、三维结构、转录和剪接。多数工作停在把预测做高。训完之后要读调控语法,靠的是另一套操作:插入 motif、洗掉一段序列、替换碱基、解读归因。这些操作跟网络结构和优化器基本无关。模型发布时通常自带分析脚本。Captum 覆盖归因。Selene、kipoi、CREsted、EUGENe、gReLU 侧重训练和模型库,训后的分析更薄。

方法

tangermeme 只做模型以外的部分。序列操作和模型操作拆开,可以叠起来用。边际化是把一段短序列代进一批背景,比较前后预测。消融则改掉或打乱模型可能在读的那段。变异效应替换一个或几个不一定连续的碱基。后面接的可以是前向预测、DeepLIFT/SHAP、逐碱基替换,或用户自己的函数。

设计有四档:按目标函数筛选随机序列,每步试遍单碱基的贪心替换,植入整段 motif,以及在许多背景上取平均、设计一段短插入去推动预测。最后一档用来做报告基因文库。

Ledidi 和 TF-MoDISco 不重写,只做兼容。归因可以分批、用低精度,参考序列不必一次全部进 GPU。卷积、LSTM、Transformer 和自定义算子都能跑,输出可以是标量或沿碱基的 profile。长度只受单条序列的内存限制。

one-hot 把字符字节直接当索引,写成 8 位无符号整数,省掉中间的整数数组。意外字符会报错。计时用 tangermeme 0.5.1、单线程,对照 SeqPro 0.6.1、CREsted 1.4.0、gReLU 1.0.7、Selene SDK 0.6.0 和 ChromBPNet 1.0.1,只计编码函数。

DeepLIFT/SHAP 改写非线性层的反向传播,以便计入参考序列。哪些层算非线性,靠一张内部表。表外的自定义算子,或被复用的激活函数,常见实现会静默失败。收敛差理论值是 0,实践中应接近机器精度。差变大,就是各碱基贡献加总后对不上输出变化。tangermeme 在差过大时报警,可以返回这个差,也接受登记进去的自定义非线性函数。

seqlet 是归因分数连成一片、高于背景的一段碱基。递归算法直接找变长的 seqlet:整段的归因和相对零分布要显著,长过最短阈值(默认 4 bp)的子段也都要显著。归因先分箱,用频率直方图卷出每个长度的零分布,再由生存函数得到 p 值。叫出来之后,用 Tomtom-lite 对上 JASPAR 2024 里人类 ChIP-seq 的 motif,再数出现次数、成对共现和间距。

结果

hg38 的 1 号染色体,tangermeme 做 one-hot 不到 2 秒,耗时约是次快实现的三分之一。

图 1d 是 20 次 DeepLIFT/SHAP 的收敛差。count head 上,tangermeme 和 Captum 都在约 10^-7。换成需要自定义算子的 profile head,这个算子登记进 tangermeme 之后,收敛差仍约 10^-7。Captum 不容易登记同一个算子,收敛差升到 10^-1 以上。count head 两边对齐,说明实现本身可以算对。profile head 拉开,是因为自定义层没有进对照表。

seqlet 调用用合成数据对过:100 条随机序列,正中插入 MYC 的 motif CACGTG,再用 MYC 的 BPNet 做 DeepLIFT/SHAP。递归算法叫出的 seqlet 更短。TF-MoDISco 的默认长度固定且偏宽,盖住的碱基多得多。p 值阈值从松扫到严,精确率和召回率走出一条曲线,TF-MoDISco 的默认点落在曲线附近。序列很少时它更快。序列一多,递归算法按每秒样本数和每秒 seqlet 数都更快。它叫得宽、叫得多,是因为后面还有拆分和质控,这个设计不能当成独立调用器的缺陷。

PLD6 启动子上,BPNet 对 MYC 结合的预测几乎只由 MYC motif 驱动。Beluga 名义上预测同一件事,归因里却是一批也出现在可及性和转录起始中的 motif。把 MYC 峰上的 seqlet 数完,再看两两共现,两套语法就分开了:BPNet 收成一个 motif,Beluga 学到更宽的词表和搭配。演示模型包括这里训的 E2F3 与 MYC BPNet(ENCODE ENCSR036QIR、ENCSR000EGJ,对照 ENCSR000BLJ),Kipoi 上的 Beluga(只取 K562 的 MYC,从 0 数起的第 614 个输出),以及 ENCODE 上 ChromBPNet 和 ProCapNet 的第 0 折。

为什么重要

归因轨迹可以看起来很干净,收敛差已经超过 10^-1。这种失败不报错,后面的 motif 调用和变异排序会跟着错的贡献走。tangermeme 把收敛差变成可以检查的量,并把边际化、消融、变异效应和 seqlet 放进同一套接口。模型仓库继续负责加载和训练。协议是 MIT,包名 tangermeme。Jacob Schreiber 在维也纳 BioCenter 的分子病理学研究所,以及 UMass Chan 医学院。

BPNet 和 Beluga 的任务名字都是 MYC 结合,学到的语法可以几乎不重叠。换模型之前先数 motif。

局限与存疑

这篇是 Nature Methods 的 Brief Communication,2026 年 10 月 8 日发表,演示多于系统评测。one-hot 计时是单线程、一条染色体、只测编码函数,不能代表整条归因流程的速度。Captum 的对比只有一种 profile head、20 次重复。它说明自定义层能把收敛差打高,并不是每种设置都差着数量级。

和 TF-MoDISco 的比较用的是 tangermeme 里的再实现。精确率和召回率只把正中 6 bp 标成阳性。随机序列别处如果真有 MYC 样位点,两边都会被罚。论文写明了这个偏差。不做模型库是故意的,用户得自己把 BPNet 或 Beluga 接进来。编码助手属于后续计划,这篇没有交付。主要靠一位作者维护。

术语

原文与代码

社区讨论

全部论文解读