深度学习在基因组学
一句话概述:深度学习利用多层神经网络自动学习基因组数据中的复杂模式,在变异致病性预测(AlphaMissense)、基因表达预测(Enformer)、蛋白质结构预测(AlphaFold)等领域取得突破性进展。
核心知识点速查表
| 概念 | 说明 |
|---|
| CNN | 卷积神经网络,擅长提取序列/图像局部特征 |
| RNN/LSTM | 循环神经网络,处理序列数据的依赖关系 |
| Transformer | 自注意力机制,能捕获长距离依赖(GPT/BERT基础) |
| AlphaFold | DeepMind的蛋白质结构预测模型 |
| Enformer | DeepMind的基因表达预测模型 |
| ESM | Meta的蛋白质语言模型 |
| DNA基础模型 | 基于Transformer的DNA序列预训练模型 |
一、基因组学中的深度学习应用
| 应用场景 | 代表模型 | 网络类型 |
|---|
| 蛋白质结构预测 | AlphaFold2/3 | Transformer |
| 变异致病性预测 | AlphaMissense, PrimateAI | CNN+Attention |
| 基因表达预测 | Enformer | Transformer |
| DNA序列理解 | DNABERT, Nucleotide Transformer | BERT |
| 蛋白质功能预测 | ESM-2 | Transformer |
| 调控元件预测 | DeepSEA, Basenji | CNN |
| 单细胞分析 | scBERT, scGPT | Transformer |
| 药物靶点预测 | DeepDTA | CNN+RNN |
二、实操示例
2.1 使用预训练模型
# === 使用ESM-2预测蛋白质功能 ===
# pip install fair-esm
import torch
import esm
# 加载预训练模型
model, alphabet = esm.pretrained.esm2_t33_650M_UR50D() # 6.5亿参数模型
batch_converter = alphabet.get_batch_converter() # 序列转换器
model.eval() # 评估模式
# 准备蛋白质序列
data = [
("protein1", "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQAPILSRVGDGTQDNLSGAEK"),
("protein2", "MRGAGAIIGLMAAGLMSGSAMAALVYPLAKHQPVLTG")
]
# 编码序列
batch_labels, batch_strs, batch_tokens = batch_converter(data) # 转换
# 提取特征(嵌入向量)
with torch.no_grad(): # 不计算梯度
results = model(batch_tokens, repr_layers=[33]) # 最后一层表示
embeddings = results["representations"][33] # 提取嵌入
# 每个蛋白质得到一个特征向量,可用于下游分类/聚类
print(f"嵌入维度: {embeddings.shape}")
2.2 简单CNN序列分类
# === PyTorch构建DNA序列分类CNN ===
import torch
import torch.nn as nn
from torch.utils.data import DataLoader, Dataset
import numpy as np
# 数据准备:DNA序列 → one-hot编码
def one_hot_encode(seq):
"""将DNA序列转为one-hot编码"""
mapping = {'A': [1,0,0,0], 'C': [0,1,0,0],
'G': [0,0,1,0], 'T': [0,0,0,1], 'N': [0,0,0,0]}
return np.array([mapping.get(base, [0,0,0,0]) for base in seq]) # 逐碱基编码
# 定义CNN模型
class DNAClassifier(nn.Module):
def __init__(self, seq_len=200):
super().__init__()
self.conv1 = nn.Conv1d(4, 64, kernel_size=8) # 第1卷积层
self.conv2 = nn.Conv1d(64, 128, kernel_size=4) # 第2卷积层
self.pool = nn.MaxPool1d(4) # 最大池化
self.dropout = nn.Dropout(0.3) # Dropout防过拟合
self.fc1 = nn.Linear(128 * 11, 64) # 全连接层
self.fc2 = nn.Linear(64, 2) # 输出层(2分类)
self.relu = nn.ReLU() # 激活函数
def forward(self, x):
x = x.permute(0, 2, 1) # (batch, 4, seq_len)
x = self.relu(self.conv1(x)) # 卷积+激活
x = self.pool(x) # 池化
x = self.relu(self.conv2(x)) # 第2层卷积
x = self.pool(x) # 池化
x = x.flatten(1) # 展平
x = self.dropout(self.relu(self.fc1(x))) # 全连接+Dropout
return self.fc2(x) # 输出
# 训练
model = DNAClassifier()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) # Adam优化器
criterion = nn.CrossEntropyLoss() # 交叉熵损失
for epoch in range(20): # 训练20轮
model.train()
for X_batch, y_batch in train_loader:
pred = model(X_batch) # 前向传播
loss = criterion(pred, y_batch) # 计算损失
optimizer.zero_grad() # 梯度清零
loss.backward() # 反向传播
optimizer.step() # 更新参数
三、面试高频考点
Q1: AlphaFold对生信领域的影响?
- 解决了蛋白质折叠问题(50年挑战)
- AlphaFold DB提供>2亿蛋白质预测结构
- 加速药物设计、酶工程、分子机制研究
- AlphaFold3可预测蛋白质-核酸-小分子复合物
Q2: 深度学习 vs 传统ML在生信中的选择?
| 场景 | 推荐 |
|---|
| 小样本(<500例) | 传统ML(RF/SVM/LASSO) |
| 大样本、序列数据 | 深度学习 |
| 需要可解释性 | 传统ML |
| 图像数据(病理/空间组学) | CNN/Vision Transformer |
| 蛋白质/DNA序列 | 预训练语言模型(ESM/DNABERT) |
Q3: 生信领域的基础模型(Foundation Models)有哪些?
- 蛋白质:ESM-2(Meta), AlphaFold(DeepMind), ProtTrans
- DNA:DNABERT-2, Nucleotide Transformer, Evo
- 单细胞:scGPT, GeneFormer, scBERT
- 临床:Med-PaLM, BioGPT
速查表
# === 生信深度学习速查 ===
# 蛋白质结构: AlphaFold (ColabFold在线版)
# 蛋白质嵌入: ESM-2 (pip install fair-esm)
# DNA嵌入: DNABERT-2 (HuggingFace)
# 单细胞: scGPT (GitHub)
# 变异预测: AlphaMissense
# 常用框架: PyTorch > TensorFlow (生信领域)
# GPU需求: 预训练需大量GPU,推理用预训练模型可小GPU