
Geneformer被广泛应用于疾病建模、治疗靶点发掘、基因网络预测与调控分析、基因功能预测与剂量敏感性分析、单细胞转录组数据集成与标准化、遗传变异解释与GWAS靶点优先排序。该案例既有算法原理,也有手把手的部署教学,包含细胞分类、基因分类、提取细胞嵌入图、细胞多分类的微调任务
GeneFormer是一种基于 Transformer 架构的深度学习模型,专为基因表达数据分析而设计。它将基因视为“词汇”,将整个基因组的表达谱视为“句子”,通过自监督学习捕捉基因间的复杂调控关系和生物学背景,在医学研究中展现出强大的应用潜力。借助GeneFormer,研究人员能够更有效地处理和理解大量的基因组数据,从而加速新药开发、疾病治疗等领域的研究进展。在基因序列分析、蛋白质结构预测疾病机制解析和药物发现等领域也具有突出的应用价值。

图1:自监督大规模预训练迁移学习策略示意图
初始自监督大规模预训练,将预训练权重复制到每个微调任务的模型中,添加微调层,并使用有限的特定任务数据对每个下游任务进行微调。通过对可泛化的学习目标进行单次初始自监督大规模预训练,模型获得学习领域的基础知识,然后将其推广到众多不同于预训练学习目标的下游应用中,将知识迁移到新任务。

图2:Geneformer预训练架构图
预训练的 Geneformer 架构每个单细胞转录组被编码为秩值编码,然后经过六层 Transformer 编码器单元,参数如下:输入大小为 2,048(完全代表 Geneformer-30M 中 93% 的秩值编码),嵌入维度为 256,每层四个注意力头,前馈大小为 512。Geneformer 在 2,048 的输入大小上使用完全密集的自注意力机制。可提取的输出包括上下文基因和细胞嵌入、上下文注意力权重以及上下文预测。
输入层针对基因表达数据的特性在数据预处理、嵌入表示(Embedding)和位置编码(Positional Encoding)等进行了专门优化。
数据预处理:
嵌入层 将基因表达值或基因序列映射到高维向量空间,以捕捉基因间的复杂关系,便于后续模型处理序列结构。维度设置需要根据具体任务和计算资源进行权衡,过低的维度可能导致信息丢失,而过高会增加计算复杂度。此外,嵌入层通常通过反向传播进行训练,使模型能够自动学习最优的基因嵌入表示,从而更好地适应任务需求。
位置编码 用于提供基因序列中各碱基的位置信息,帮助模型理解基因序列中碱基的顺序关系和位置依赖性,对于分析基因序列的功能和结构至关重要。
GeneFormer的核心由多个 Transformer 层堆叠而来。通过多头自注意力、残差连接和前馈神经网络,从高维基因表达数据中提取复杂的调控模式。在保持标准的Transformer 结构的同时,针对基因表达数据的特性(高维度、稀疏性、基因共表达模式)进行了优化,使模型能够有效捕捉基因间的功能关联,为下游任务(微调)提供强有力的表征。
多头注意力 并行使用多个注意力头,每个头学习不同的交互模式,同时计算多组注意力权重,捕捉基因间的全局依赖关系(如协同表达的基因网络)。通过计算查询(Query)、键(Key)和值(Value)之间的点积来确定权重,并通过 Softmax 函数进行归一化,且总和为1。


将输入拆分为h个头,每个头单独计算后拼接。
前馈神经网络 由两层全连接层和激活函数组成,每个多头注意力层后接一个前馈神经网络层,对注意力层的输出进行非线性映射增强非线性表达能力,用于学习并保存知识。

稀疏注意力 基因表达数据中,大部分基因表达值为0,可能采用局部稀疏注意力以降低计算开销。

相对位置编码 由于基因在序列中的物理位置可能无关紧要,Geneformer 采用相对位置编码,仅编码基因间的相对顺序或距离,增强对基因序列位置的敏感性。

i, j为基因在序列中的位置,k为最大相对距离。
层归一化与残差连接 层归一化稳定单细胞数据的高变异表达分布,残差连接保留原始基因表达信息,缓解梯度消失,加速收敛。

μ和σ分别为样本内均值和方差,γ和β分别为可学习的缩放和平移参数

经过transformer层之后,张量被传入输出层,但Geneformer输出层的设计根据具体任务(如基因表达预测、分类或自监督预训练)有所不同,主要操作通常包括以下几个关键步骤:
线性变换: 使用全连接层,将Transformer最后一层输出的隐藏状态映射到目标维度(如基因数量或类别数)。

是transformer最后一层的输出向量, 是基因表达预测的权重矩阵, 为偏置项。
激活函数: 根据任务需求不同调整使用的激活函数,回归任务可能使用ReLU或Softplus确保输出非负,分类任务使用Softmax(多分类)或Sigmoid(二分类)输出概率分布,对于线性输出,则没有激活函数。

损失计算: 对于回归任务,使用均方误差(MSE)或负对数似然。分类任务,交叉熵损失。自监督任务(掩码基因预测),使用对比损失或遮蔽语言建模(MLM)类似的损失。

是被遮蔽基因的秩编码值(如基因表达量在细胞内的排序分位数)细胞分类任务中的损失计算,交叉熵损失

基因扰动预测,对比损失

其中, 是基因敲除后的细胞表达谱,通过对比学习强化扰动前后的表达差异。
GeneFormer 先在大规模单细胞数据上预训练,结合特定任务的需求和数据特点,灵活选择冻结策略、调整输出头、引入适配器或领域特定模块。通过平衡预训练知识的保留与任务适配,高效实现模型优化。
网络结构的微调操作:
机器: Atlas 800T A2 组件: hdk:24.1.rc3

cann:8.0.RC3

python:3.10.16

torch:2.1.0torch:2.1.0.post8

git lfs install
git clone https://huggingface.co/ctheodoris/Geneformer
git clone https://gitee.com/hf-datasets/Genecorpus-30M.git

requirements.txt里面torch的版本>=2.0.1即可,这里选用2.1.0版本的torch。
cd Geneformer
vi requirements.txt # 将torch>=2.0.1修改为torch==2.1.0。再:wq保存退出。
pip install .pip3 install torch_npu-2.1.0.post8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
numpy报错,需降低至1.x版本


更换完numpy版本之后,再次验证

cell_classification 数据集:human_dcm_hcm_nf.dataset 预训练权重:gf-6L-30M-i2048
cd /Geneformer/examples
mkdir cell_classification.py
vi cell_classification.py将cell_classification.ipynb的代码复制过来。需注意修改权重路径和数据集路径。导入os包,将第10行的!mkdir $output_dir修改为os.makedirs(output_dir, exist_ok=True)

vi /root/miniconda3/envs/Genecorpus_py310/lib/python3.10/site-packages/geneformer/ evaluation_utils.py导入torch_npu包,替换相关cuda的api

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

再开一个窗口,命令行输入 npu-smi info查看显存占用率



vi /root/miniconda3/envs/Genecorpus_py310/lib/python3.10/site-packages/geneformer/evaluation_utils.py
# 在第86行classifier_predict函数内添加
device = torch.device('npu' if torch_npu.npu.is_available() else 'cpu')
# 将119、120、121三行中的.to(“cuda”)修改为.to(device)
再重新运行

输出精度0.9542330129066371

输出文件

混淆矩阵

评估微调模型的预测结果

任务:gene_classification 数据集:gc-30M_sample50k.dataset 预训练权重:gf-6L-30M-i2048
cd /Geneformer/examples
touch gene_classification.py
vi gene_classification.py将gene_classification.ipynb的代码复制过来。需注意修改权重路径和数据集路径




任务:extract_and_plot_cell_embeddings 数据集:human_dcm_hcm_nf.dataset 预训练权重:gf-6L-30M-i2048_CellClassifier_cardiomyopathies_220224
cd /Geneformer/examples
touch extract_and_plot_cell_embeddings.py
vi extract_and_plot_cell_embeddings.py将extract_and_plot_cell_embeddings.ipynb的代码复制过来。需注意修改权重路径和数据集路径





任务:multitask_cell_classification 数据集:human_dcm_hcm_nf.dataset 预训练权重:gf-6L-30M-i2048 5.4.2新建微调脚本
cd /Geneformer/examples
touch multitask_cell_classification.py
vi multitask_cell_classification.py将multitask_cell_classification.ipynb的代码复制过来。需注意修改权重路径、数据集路径以及token_dictionary路径。



Theodoris, C. V., Xiao, L., Chopra, A., Chaffin, M. D., Al Sayed, Z. R., Hill, M. C., ... & Ellinor, P. T. (2023). Transfer learning enables predictions in network biology. Nature, 618(7965), 616-624. https://doi.org/10.1038/s41586-023-06139-9
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。