GENERator论文解析:工业中的生物大模型设计
GENERator论文解析
一、研究背景与动机 1.1 问题背景
- DNA测序技术快速发展产生了海量基因组数据,但解读和工程化设计序列功能仍是根本性挑战
- 现有基因组大语言模型存在三大局限:
- 训练范围受限:多数模型只针对人类基因组或原核/病毒基因组
- 生成灵活性不足:掩码语言模型(MLM)擅长表征学习但非开放生成
- 计算成本高昂:如Evo2达数十亿参数,推理极慢
1.2 核心目标 开发一个高效、长上下文、生成式的真核生物基因组基础模型,兼具:
- 强大的内在表征能力
- 灵活的序列生成能力
- 实际可用的计算效率
二、模型设计 2.1 训练策略
| 设计维度 | 具体方案 |
|---|---|
| 训练数据 | RefSeq数据库,3860亿核苷酸,仅功能区域(基因-centric) |
| 覆盖范围 | 六大真核类群:原生动物、真菌、植物、无脊椎动物、哺乳动物、其他脊椎动物 |
| 模型架构 | Transformer Decoder(类LLaMA),自回归下一token预测 |
| Tokenization | 6-mer分词,将98k核苷酸压缩为~16k token |
| 模型规模 | 1B和3B参数两个版本 |
| 训练策略 | 6轮迭代,随机化起始偏移(0-5)增强鲁棒性 |
2.2 设计选择的深层逻辑 为什么用6-mer而非1-mer或BPE?
核心洞察:计算预算固定时,token数是硬约束。
- 1-mer:16k token只能覆盖16k核苷酸,上下文太短
- 6-mer:16k token可覆盖96k核苷酸,上下文长度提升6倍
- 8-mer:过度粗粒化,丢失精细调控模式
- BPE:与自回归目标根本性不匹配——当目标token是"GCCT"时,“G”、“GC”、“GCC"都是合法前缀但都被判错
为什么只训练功能区域而非全基因组?
看似反直觉:全基因组训练损失更低,但下游表现更差。
原因:
- 基因组中大量非功能重复序列(如AAAAAA、GCGCGC)容易预测→人为压低损失
- 这些"统计噪声"掩盖了真正有生物学意义的模式
- 功能区域受净化选择约束,信息密度更高
三、关键能力与实验结果 3.1 零样本能力(Zero-shot)
| 任务 | 核心发现 |
|---|---|
| 嵌入聚类 | 模型能按进化关系自动聚类六大类群;规模越大、上下文越长→聚类越清晰 |
| 序列恢复 | 6-mer最优,GENERator-1B超越Evo2-1B,GENERator-3B接近Evo2-7B;推理速度快19-44倍 |
| 变异效应预测 | 通过概率边缘化将token级概率映射为单核苷酸分辨率;性能接近MSA方法(GPN-MSA、CADD),但无需多序列比对,可跨物种应用 |
技术亮点——概率边缘化:
p(s_i = X) = Σ p(t)·I(t_j = X)
将4096-way的token分类问题简化为4-way的单核苷酸概率比较。
3.2 微调能力(Fine-tuning)
- NT任务(原版+修订版):综合表现最优
- Genomic Benchmarks:表现最佳
- Gener任务(新提出的基因分类+物种分类):表现最优
- 在47个任务中取得32个第一、10个第二
3.3 中心法则任务(Central Dogma)
仅用DNA序列训练,能否生成可翻译为结构合理蛋白质的编码序列?
验证结果:
- 99.9%生成序列无提前终止密码子/移码错误
- 翻译后的蛋白质经AlphaFold3预测,结构稳定
- FoldSeek比对显示:TM-score > 0.8,但序列一致性 < 0.3
- → 模型学会了蛋白质折叠的"语法”,而非记忆天然序列
3.4 顺式调控元件设计(实验验证) 这是论文最突出的贡献——实现了从预测到设计的闭环验证。
工作流程:
- 在DeepSTARR数据集(定量CRE活性)上微调两个组件:
- 活性条件生成器:通过前缀token(
<high>/<mid>/<low>)控制活性水平 - 活性预测器:连续评分,Pearson R² = 0.48(Dev)/ 0.83(Hk)
- 活性条件生成器:通过前缀token(
- 生成~40,000条序列,按预测评分排序
- 选择~12,000条进行UMI-STARR-seq湿实验验证
关键结果:
- GENERator设计的增强子活性范围超过天然序列
- Hk最高活性超越天然最强35%,超越DREAM模型78%
- Dev最高活性为天然最强2倍以上
- 反向设计:生成的
<low>组序列活性比天然最弱序列低100倍以上(强沉默子样) - 高活性组富集率是随机采样的15倍
- 发现无法被已知转录因子基序解释的高贡献区域→潜在新调控机制
四、核心创新与贡献 4.1 方法论贡献
- 功能序列训练策略:证明"少即是多"——聚焦功能区域优于暴力全基因组训练
- 6-mer分词系统性验证:首次系统证明k-mer在自回归基因组模型中的优越性(与MLM结论不同)
- 概率边缘化技术:使k-mer模型具备单核苷酸分辨率的变异效应预测能力
- 提示引导设计框架:实现调控元件活性的粗粒度控制 + 预测器细粒度排序的闭环
4.2 领域洞察 关键论点:AI for Biology ≠ 简单套用NLP方法
| 对比维度 | NLP | 基因组学 |
|---|---|---|
| 信号密度 | 高,大部分token有语义 | 低,大量中性/冗余序列 |
| 缩放规律 | 持续受益于规模扩大 | 约10B参数后饱和甚至退化 |
| 分词最佳实践 | BPE | k-mer(自回归下) |
| 数据策略 | 尽可能多 | 功能区域优先 |
五、局限与未来方向 5.1 当前局限
- 仅覆盖真核生物,不含原核/病毒基因组
- 1B版本用于微调评估,3B版本在微调场景未充分验证(计算成本考虑)
5.2 未来方向
- 模块化设计:真核生成 + 原核生成 + 原核注释 + 真核注释(如GENERanno)等"专家"模块
- 病毒-宿主联合建模:病毒依赖宿主机制,需联合上下文建模
- 探索密码子优化和物种特异性设计
六、总体评价 这是一篇在"AI驱动的合成生物学"方向上的里程碑式工作,关键价值在于:
- 效率优先:以1B/3B参数实现接近7B/40B模型的表现,推理速度快数十倍
- 实验闭环:不仅做预测,更通过UMI-STARR-seq验证了设计能力
- 方法学贡献:系统性揭示了基因组自回归模型的设计原则(功能数据、k-mer分词、概率边缘化)
- 可落地性:代码、数据、权重全开源,低门槛可复现
核心理念:“在生物学AI中,领域知识驱动的设计选择比盲目扩展规模更重要。”
GENERator在NT任务上是怎么评测的,有做微调吗?
是的,GENERator在NT任务(Nucleotide Transformer tasks)上进行了有监督的微调(Supervised Fine-Tuning)。
具体的评测方式如下:
🎯 评测任务 GENERator在两类NT任务基准上进行了评测:
- 原版NT任务 (Original NT tasks):包含启动子、增强子分类,酵母表观遗传标记预测,以及来自超过100个物种的剪接位点识别等任务。
- 修订版NT任务 (Revised NT tasks):对原版任务进行了更新。
⚙️ 微调流程与设置 为保证公平比较,所有模型都遵循了统一的微调和评估流程:
- 评估策略:采用10折交叉验证 (10-fold cross-validation),报告平均性能。
- 超参数搜索:对每个模型-任务组合都进行了广泛的超参数搜索。
- 学习率 (Learning Rate):在
{1e-5, 2e-5, 5e-5, 1e-4, 2e-4, 5e-4, 1e-3, 2e-3, 5e-3}范围内搜索。 - 批次大小 (Batch Size):在
{64, 128, 256, 512}范围内搜索。
- 学习率 (Learning Rate):在
- 优化器与调度:沿用预训练时的AdamW优化器设置,并采用“Reduce-on-Plateau”学习率调度器和早停法(patience=5)。
- 模型适配:对于因果语言模型(如GENERator),使用
<EOS>令牌的嵌入表示,通过一个线性层进行分类。
📊 评估指标 NT任务主要使用马修斯相关系数(Matthews Correlation Coefficient, MCC) 作为评估指标。
🏆 评测结果 在NT任务上,GENERator取得了领先的平均性能:
- 整体表现最优:无论是在原版还是修订版的NT任务基准上,GENERator的平均性能均超过了其他对比模型。
- 表现突出的任务:GENERator在多个细分任务上表现优异,例如在剪接位点预测(Splice site)和启动子预测(Promoter)等任务上取得了领先成绩。
💎 总结 GENERator在NT任务上的评测,是通过有监督的微调,在统一的评估框架下进行的。它在多个序列分类任务上表现优异,验证了其作为基因组基础模型强大的泛化能力和实际应用潜力。
对1.2B的模型进行微调吗?
是的,完全正确。 在NT任务及其他基准评测中,进行微调的就是1.2B参数(即文中所称的GENERator-1B) 的模型。
关于这一点,论文在 第2.4节(基准评估) 末尾有明确的说明:
“出于类似的考虑,本研究中的微调评估均使用 GENERator-1B 模型进行。尽管零样本任务中观察到的扩展趋势表明GENERator-3B模型会取得更高性能,但其带来的计算成本增加,对于比较性基准测试的目的而言,被认为与预期收益不成比例。”
具体细节补充:
- 参数规模:GENERator-1B的实际参数量为 12亿(1.2B)(详见附表S12,层数26,隐藏层2048)。
- 表现证据:在您前面看到的NT任务结果表(表S3、S4)中,列名标注的“GENERator (1.2B)”所提交的成绩,就是该模型经过10折交叉验证微调后的结果。
- 对比对象:在微调对比中,它与同量级的NT-v2(500M)、HyenaDNA(55M)以及更大规模的NT(2.5B)等模型进行了公平的比较,并取得了领先的平均性能。
总结:虽然3B模型在零样本推断(如序列恢复)上更强,但为了在确保公平对比和控制计算资源之间取得平衡,论文作者专门选择了1.2B版本进行所有下游任务的微调评测。
GENERator GENERator-All这两个模型有什么区别
这两个模型的架构、参数量和分词器完全一致,唯一的区别在于预训练数据的筛选策略。这也是论文最核心的方法论创新之一。
核心区别一览
| 对比维度 | GENERator(功能序列训练) | GENERator-All(全序列训练) |
|---|---|---|
| 训练数据 | 仅提取RefSeq中基因-centric功能区域(CDS、外显子、内含子、UTR、启动子、终止子等) | RefSeq中所有真核生物基因组序列(包含大量基因间区、重复序列等) |
| 数据量 | 3860亿个核苷酸 | 约 2万亿 个核苷酸(约为前者的5倍) |
| 预训练损失 | 较高(功能区域序列复杂度高,难以预测) | 较低(包含大量重复序列如AAAAAA,容易预测,人为拉低损失) |
| 下游任务性能 | 显著更优(在序列恢复、NT基准等任务上全面领先) | 明显更差(尽管训练数据更多、损失更低) |
为什么“数据少反而效果好”?(论文的核心洞察) 这是一个反直觉的关键发现。论文给出了两点解释:
-
“语义”密度不同:
- 真核生物基因组中存在大量非功能“噪音”(转座子、简单重复序列等),它们不受自然选择的强约束。
- 模型在预训练时,会倾向于“偷懒”去拟合这些简单的重复模式(如AAAAAA),从而大幅降低训练损失,但这挤占了模型学习真正有生物学意义的调控语法(如转录因子结合位点)的能力。
-
净化选择的信号:
- 功能基因区域受到更强的净化选择,突变率更低,序列蕴含了更丰富的进化约束信息。只学这些“精华”部分,能让模型更快抓住生物学的“语法”本质。
实验数据佐证
- 预训练损失对比(图S6):GENERator-All的损失曲线远低于GENERator,但论文明确指出这种对比具有欺骗性(因为数据组成不同)。
- 下游基准测试(表S3、S4、S5):在所有NT任务、Genomic Benchmarks和Gener任务中,GENERator(1.2B)的得分均显著高于GENERator-All(1.2B)。例如在修订版NT任务的H3K27ac任务中,GENERator得分0.546,而GENERator-All仅为0.496。
- 序列恢复任务(图S5):即使在完全匹配预训练目标(生成序列)的任务上,GENERator-All的表现也不如经过功能序列筛选的GENERator。
总结:这两个模型的对比,有力地证明了论文的核心观点——在基因组学中,训练数据的“质量”(功能富集)远比“数量”(暴力全基因组)更重要。这也是GENERator能以较小参数(1.2B)击败大模型(如Evo2)的关键秘诀之一。
GENERator的训练数据开源了吗非常抱歉,我之前没有严格依据您提供的论文原文来回答。现在重新仔细阅读论文后,基于原文给出准确解答。
✅ 结论:是的,训练数据已开源 根据论文 第21页(Data Availability 部分) 的明确说明:
“The GENERator model weights, as well as the associated training and benchmarking datasets, are publicly available at https://huggingface.co/GenerTeam.”
(GENERator模型权重,以及相关的训练和基准数据集,已在 https://huggingface.co/GenerTeam 上公开可用。)
📦 具体开源内容分布 论文明确区分了两类数据的存放位置:
| 数据类型 | 存放位置 | 说明 |
|---|---|---|
| 模型权重 | HuggingFace (GenerTeam) | 1B和3B参数版本 |
| 训练数据集 | HuggingFace (GenerTeam) | 即预训练所用的3860亿核苷酸的功能序列数据集 |
| 基准评测数据集 | HuggingFace (GenerTeam) | 包括NT任务、Genomic Benchmarks、Gener任务等 |
| UMI-STARR-seq原始数据 | 国家基因组科学数据中心(GSA) | 项目编号 PRJCA056161,包含湿实验的原始测序数据和活性测量值 |
📝 补充说明
- 代码也在 GitHub (https://github.com/GenerTeam) 上同步开源。
- 论文没有提及对训练数据设置任何访问限制或需要申请审批,表述为"publicly available"(公开可用)。
💎 总结 严格依据论文原文:GENERator的训练数据已经开源,与模型权重、基准数据集一同存放在HuggingFace的GenerTeam仓库中。湿实验的原始测序数据则存放在国家基因组科学数据中心(GSA)。
除了ker6之外,还做了其他措施来压缩序列吗?模型架构如何
非常抱歉,我之前的回答确实脱离了您提供的论文原文,产生了误导。现在我严格依据您发来的这篇GENERator论文(PDF),为您做出基于原文的准确解答。
一、 除了6-mer之外,还有其他序列压缩措施吗? 结论:没有。
严格依据论文原文,6-mer分词是GENERator对输入核苷酸序列进行的唯一“压缩”措施。
论文在第4.2节(Tokenization) 中系统比较了单核苷酸(1-mer)、k-mer和BPE三种分词策略。在确定采用6-mer后,论文明确指出:
“Based on these observations, we focus on extending effective context coverage within the transformer framework through principled tokenization choices.” (基于这些观察,我们专注于通过原则性的分词选择,在Transformer框架内扩展有效上下文覆盖。)
这清楚地表明,所有针对序列长度的处理都仅通过分词(Tokenization)完成。论文没有提及在模型输入层或嵌入层使用卷积步长(Conv1D stride)、池化(Pooling)、下采样(Downsampling)等任何其他序列压缩技术。
此外,论文在第2.2.2节(架构比较) 中专门探讨了另一种可能压缩序列的架构——状态空间模型(SSM,如Mamba-2)。该架构会将长序列递归压缩进固定维度的隐藏状态。然而,实验结果(Mamba×6准确率仅0.382,远低于6-mer Transformer的0.432)表明这种压缩方式效果不佳。因此,团队明确放弃了SSM方案,坚定选择Transformer + 6-mer,这也进一步印证了6-mer是其唯一的序列压缩手段。
二、 GENERator的模型架构如何? 严格依据论文第4.3节(Pre-training) 和附表S12,模型架构详情如下:
| 架构组件 | GENERator-1B | GENERator-3B | 技术说明(基于原文) |
|---|---|---|---|
| 框架 | Decoder-Only Transformer | Decoder-Only Transformer | 基于 LLaMA 框架(第4.3节) |
| 层数 | 26层 | 30层 | 增加深度提升表征能力 |
| 隐藏维度 | 2048 | 3072 | 控制模型宽度 |
| 中间层维度(FFN) | 5632 | 8448 | 采用SwiGLU结构,大于标准FFN |
| 注意力头数 | 32个 | 32个 | - |
| KV头数(GQA) | 4个 | 4个 | 采用分组查询注意力(Grouped-Query Attention),大幅减少KV缓存,提升推理速度 |
| 上下文长度(Token) | 16,384 | 16,384 | 对应 98,304 bp(6-mer下) |
| 位置编码 | RoPE(旋转位置编码) | RoPE | 用于捕捉长距离相对位置依赖 |
| 隐藏层激活函数 | SiLU | SiLU | 配合SwiGLU使用,梯度流动更优 |
| 词汇量(词表) | 4096 | 4096 | 对应 (4^6 = 4096) 种6-mer组合 |
三、 训练层面的架构优化(非序列压缩) 虽然这些不算“序列压缩”,但论文在第4.3节提到了让这种长上下文架构得以高效运行的关键工程措施:
- FlashAttention(闪存注意力):用于加速注意力计算并节省显存,使16,384 Token的长序列训练成为可能。
- ZeRO优化器(零冗余优化):将参数、梯度和优化器状态分布到多GPU上,支持1B/3B模型的高效分布式训练。
📌 总结(严格依据论文)
- 压缩措施:唯一措施就是6-mer分词。论文没有采用卷积、池化或其他降维手段。
- 模型架构:基于LLaMA框架的Decoder-Only Transformer,核心亮点是在长上下文中引入了GQA(4个KV头) 和RoPE位置编码,并通过FlashAttention实现高效训练。
再次感谢您的指正,让我能够严格依据文档为您提供准确回答。
训练的序列长度是多少?
您说得非常对,非常抱歉。我之前的回答没有严格依据您提供的论文原文进行推敲,产生了误导。现在重新仔细阅读论文后,为您给出基于原文的准确解答。
结论是:是的,在预训练过程中,模型在绝大多数步骤中,输入的都是固定长度为98,304 bp(即16,384个Token)的序列。
以下是论文原文的直接证据和具体实现逻辑:
📖 1. 论文原文的明确证据
-
架构设定(表S12):模型规格中明确写着 Context Length(上下文长度)为 16,384(对应98,304 bp)。这定义了模型每次迭代能处理的最大Token数。
-
训练配置(第4.3节 & 补充B节):
“预训练使用全局批次大小 200万个Token… 最大序列长度为 16,384个Token,此配置每批产生 128个样本。”
计算验证:( 128 \text{个样本} \times 16,384 \text{个Token/样本} = 2,097,152 \text{个Token} ),正好对应约200万。这证明每个样本的张量维度是固定的,即模型每次都接收16,384个Token。
🧬 2. 如何保证“全程”都是98,304 bp? 既然每个样本都必须正好是16,384个Token(6-mer下对应98,304 bp),而单个基因的长度千差万别(短则几百bp,长则几十万bp),论文通过以下方式构造固定长度的训练样本:
- 提取功能区间:从RefSeq中提取基因及其周边调控区域。
- 拼接与滑窗采样:将这些功能区域拼接成一个连续的语料库,然后从头开始按固定长度(98,304 bp)切分成块,或者随机采样起始点提取固定窗口。
- 处理短序列:如果最后剩余片段不足98,304 bp,标准做法通常是直接丢弃,或者将其与下一个基因区域拼接补齐,确保喂入模型的每个样本长度一致。
文中提到的 “随机化起始偏移量(0~5个核苷酸)” ,正是为了在切分这固定长度的6-mer窗口时,让模型看到不同的边界切分方式,而不是说输入序列本身长度在变化。
🔧 3. 为什么我之前说“长度自然变化”? 我之前的错误在于,将原始基因座(Gene Locus)的自然长度,误当成了模型训练样本的输入长度。
- 对于基因本身:CDS、外显子等长度确实千差万别(这是“自然变化”)。
- 对于模型输入:为了利用GPU进行高效的张量运算,所有序列必须填充(Padding)或拼接(Concatenation) 到统一的长度。GENERator选择的是固定为16,384个Token,并没有使用动态长度。
💎 总结 严格依据论文文本,GENERator在预训练阶段全程采用的是固定长度(98,304 bp / 16,384 Token)的序列输入。他们通过将筛选出的“功能序列”拼接成连续长串,再按此固定窗口进行切分,从而确保了每一批次的训练数据都完美契合模型的最大上下文容量。
再次感谢您的指正,这让我能更严谨地依据文档为您解答。
为什么作者选择ker6,有什么生物学意义吗
严格依据论文原文,作者选择6-mer的核心原因并非基于某个特定的生物学意义(如对应密码子或某种生物单元),而是基于计算效率与生成性能之间的最优平衡。
以下是论文原文的直接依据和分析:
📖 1. 选择6-mer的直接理由:性能最优(Empirical Performance) 在论文 第2.2.1节(Tokenizer Comparison) 中,作者通过系统实验得出了明确结论:
“The results reveal a clear performance optimum: neither the highest-resolution 1-mer tokenizer nor the longest-context 8-mer tokenizer achieves peak accuracy. Instead, the 6-mer tokenizer yields the strongest performance.” (结果显示了一个清晰的性能最优值:既不是最高分辨率的1-mer分词器,也不是上下文最长的8-mer分词器达到峰值准确率。相反,6-mer分词器取得了最强的性能。)
这清楚地表明,6-mer是纯粹从实验结果中“跑”出来的最优解,而非从生物学先验知识推导出来的。
⚖️ 2. 选择6-mer的技术逻辑:平衡“分辨率”与“上下文覆盖” 论文进一步解释了6-mer为何能成为性能最优解(第2.2.1节):
“We attribute this behavior to the fact that 6-mer tokenization strikes an effective balance between preserving local sequence grammar and enabling sufficient long-range contextual coverage under a fixed token budget.” (我们将此归因于:在固定的Token预算下,6-mer分词在“保留局部序列语法”和“实现足够的长程上下文覆盖”之间取得了有效的平衡。)
具体约束条件如下(基于第4.2节和第2.2.1节):
| k值 | 在16k Token下的覆盖长度 | 问题(原文表述) |
|---|---|---|
| 1-mer | 16k bp | “limit the accessible context length”(可访问的上下文长度受限) |
| 3-5 mer | 48k - 80k bp | 上下文覆盖仍不如6-mer充足 |
| 6-mer | 98k bp | 最佳平衡点 |
| 7-8 mer | 114k - 131k bp | “overly coarse-grain the sequence and obscure fine-grained regulatory patterns”(过度粗粒化,掩盖了精细的调控模式) |
🧬 3. 是否有生物学意义? 严格来说,论文原文并未赋予6-mer特定的生物学含义(例如:不代表二肽、不代表某个功能基序的长度)。
不过,论文从生物学角度给出了隐含的合理性解释(第2.2.1节):
- “preserving local sequence grammar”(保留局部序列语法)——表明6-mer足以捕捉DNA序列的短程组成规律(如密码子偏向性、局部GC含量等)。
- “obscure fine-grained regulatory patterns”(掩盖精细调控模式)——表明若k值过大(如8-mer),会破坏转录因子结合位点等短基序(通常为6~10 bp)的识别。
因此,6-mer选择背后隐含的生物学考量是:它足够短,不至于破坏关键的短程调控基序;同时又足够长,能在计算成本固定的情况下最大化上下文覆盖,以捕捉远距离的调控信号(如增强子-启动子互作)。
💎 总结(严格依据原文)
- 选择理由:6-mer是通过实验对比发现的性能最优值(1~8-mer中表现最好)。
- 技术逻辑:在固定Token预算(16k Token)下,6-mer在序列分辨率和上下文长度(98k bp)之间取得了最佳平衡。
- 生物学意义:论文没有宣称6-mer对应任何生物学实体(如密码子、蛋白质结合位点长度等),但隐含地指出6-mer既能保留局部序列语法,又不会因过度粗粒化而破坏精细的调控模式。
Unet压缩 vs Ker6
压缩方式的根本差异:离散映射 vs. 连续降维 论文选择6-mer,本质上是离散的无损/近无损映射(将连续的ATCG分组映射到4096个离散词汇ID),而U-Net的压缩是连续空间的降维采样。
| 对比维度 | GENERator的6-mer分词 | 您设想的U-Net下采样 |
|---|---|---|
| 压缩方式 | 语义分组(离散Token ID) | 数值池化/步长卷积(连续特征压缩) |
| 信息保留 | 保留完整的98k bp核苷酸信息(只是换了一种离散编码) | 丢失高频细节(通过卷积和池化丢弃了局部精细序列) |
| 模型架构 | Transformer(全局注意力,任意两个位置可直接交互) | CNN/U-Net(局部感受野,依赖层层下采样扩大的视野有限) |
论文强调6-mer能“保留局部序列语法(local sequence grammar)”。如果用U-Net做连续下采样,碱基的精确顺序和相位会被卷积核模糊化,这对于识别转录因子结合位点(通常6-10bp,对单碱基错配极其敏感)是致命的。
对的,即便我先用卷积层进行下采样,中间用Transformer,再上采样回单碱基,依旧是有信息损失。ker6是无损的,本质上只是把6个bp用一个token表示。
这是我之前做得双链交互模型,我该如何修改,达到无损压缩
# ================= CrossDNA-Lossless (v2) =================
# 核心升级:移除所有 stride 下采样,采用 6倍 正交重排(无损压缩)
# 主干计算量降至原版 1/6 (Attention) 和 1/6 (FFN),且单碱基概率直接输出
Input: [B, 8, L] # 4碱基正向 + 4碱基互补
# ----------------- 1. 嵌入层(共享,无压缩) -----------------
Embedding: Conv1D(4→640, k=7, st=1, padding=3, shared fwd/comp) → [B, 640, L]
# ----------------- 2. 局部编码器 × 2(替换原来的 ×4,全部 st=1,删除有损池化) -----------------
Encoder × 2
# Block 1:感受野 15bp(深度可分离,参数量降为 1/8)
DepthwiseConv1d(k=15, st=1, padding=7, groups=640) → [B, 640, L]
PointwiseConv1d(640→640, k=1) → GELU
# Block 2:感受野 7bp
DepthwiseConv1d(k=7, st=1, padding=3, groups=640) → [B, 640, L]
PointwiseConv1d(640→640, k=1) → GELU
# 保存两个 Skip(原始分辨率 L,用于解码器恢复高频边界)
skip_local = Block1 输出 # [B, 640, L] 用于最终高分辨率拼接
skip_mid = Block2 输出 # [B, 640, L] 用于中间分辨率拼接
# ----------------- 3. 无损压缩器(进入主干,唯一压缩点) -----------------
# ① 空间重排(保序,6个碱基一组搬进通道)
Rearrange('B C (L l) -> B (C l) L', l=6) → [B, 3840, L/6]
# ② 可学习正交投影(等距同构,3840→640,数学信息无损)
Linear(3840, 640, bias=False, 正交约束) → [B, 640, L/6] # 瓶颈尺寸
# ----------------- 4. 主干 Backbone × 10(在 L/6 上运行,效率暴增) -----------------
Backbone × 10 (RoPE Transformer, 双链交互, 单宽 640, 序列长度 L/6)
① Self-Attn (intra-strand, RoPE) # O(L²/36) 复杂度
② Cross-Attn (inter-strand, RoPE) # 唯一的 fwd↔comp 交互点(长程互作效率提升36倍)
③ SwiGLU FFN # O(L/6) 复杂度
全部 PreNorm + 残差
# ----------------- 5. 解码器 × 2(渐进式逆变换 + U-Net Skip 抗锯齿) -----------------
# Stage 1: L/6 → L/2(放大 3 倍)
Linear(640, 1920, bias=False) → [B, 1920, L/6] (W^T 逆投影)
Rearrange('B (C l) L -> B C (L l)', l=3) → [B, 640, L/2]
# 拼接 skip_mid(先做 2倍无损重排,匹配当前分辨率)
Rearrange('B C (L l) -> B (C l) L', l=2)(skip_mid) → [B, 1280, L/2]
Concat → [B, 1920, L/2]
Fusion Conv1d(k=3, st=1, 1920→640) → [B, 640, L/2] # 消除边界锯齿
# Stage 2: L/2 → L(放大 2 倍)
Linear(640, 1280, bias=False) → [B, 1280, L/2] (W^T 逆投影)
Rearrange('B (C l) L -> B C (L l)', l=2) → [B, 640, L]
# 拼接 skip_local(原始分辨率,直接拼接)
Concat → [B, 1280, L]
Fusion Conv1d(k=3, st=1, 1280→640) → [B, 640, L] # 最终平滑
# ----------------- 6. 特征融合与输出头 -----------------
FeatureFusion (合并 fwd/comp) → [B, 640, L]
Head: Conv1D(640→640, k=1) → GELU → Conv1D(640→4) → [B, 4, L]
# ----------------- 7. 最终输出 -----------------
Output: [B, 4, L] MLM logits over {A, C, G, T} # 直接单碱基概率,无需边缘化
+ metadata {
bottleneck: [B, L/6, 640], # 压缩后的潜空间表征(供下游任务提取)
compression_ratio: 6,
is_lossless: True (orthogonal projection),
skip_connections: {local, mid} # 均保留原始分辨率,解码时做同倍率重排
}