想象你是一座繁忙城市的交通总指挥。你的城市地图不是普通地图——它是长达 30 亿个符号的 DNA 序列。城市里有两万多个“会场”(基因),每个会场需要在正确的时间、正确的地点举办活动(表达蛋白质)。而决定活动能否举办的,是一群特殊的“交警”:转录因子。它们站在特定的路口(调控元件)指挥交通,路口的车流就是基因表达的水平。交警只认自己熟悉的路牌样式(基序),而道路是否通车(染色质状态)也决定了它们能否顺利到达路口。 你的核心任务,是训练一个 AI 系统:输入任何一段城市地图和实时路况,预测哪些路口会有交警值守、哪些会场会真正举办活动。这就是基因调控预测。它既包含对序列的“读图”能力,也包含对表观遗传“路况”的理解,并要把两者融合成一个可靠的预测模型。本文将用这座交通城市的视角,带你一步步搭建这样的 AI 调度中心。

岗位关联

掌握基因调控预测,你将成为连接 AI 与生命科学的桥梁型工程师,能够参与致病突变解析、基因编辑靶点设计等前沿工作,大幅提升在 AI for Science 领域的职业竞争力。

目录
  1. 可视化演示
  2. 调控元件识别:地图上的关键路口
  3. 表观遗传特征:实时路况直播
  4. 深度学习模型:AI 调度核心算法
  5. 多模态融合:地图与路况合成一块屏
  6. 评估与基准:上岗前的路考
  7. 调控预测应用:调度系统正式上岗
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

深度学习模型从序列与表观特征预测转录因子结合与调控元件活性。切换模式可查看调控元件网络与序列特征图谱。

本节配有交互动效(进入视口后自动加载,约 3KB)。

转录因子调控网络 模型预测TF与DNA的相互作用 结合越强,调控元件活性越高 σ(TF·DNA) 序列越长,捕获长程依赖越充分

调控元件识别:地图上的关键路口

在城市地图上,每栋会场大楼门口都有迎宾区,负责立指示牌引导人流,这是启动子;几公里外还有不起眼的立交桥入口,能在高峰时段把远处人群直接送到会场,这是增强子。两者统称调控元件,是交警值守的核心路口,也是基因调控预测要识别的第一个对象。

交警不会随机站在路上,它们只认特定样式的路牌,这些短而保守的序列模式就叫基序。若某段序列里密集出现路牌,这里就是交警常驻卡点。调控元件识别的任务,就是从海量序列中把路牌找出来;在此之前,还要用 one-hot 编码把 ACGT 字母序列变成机器能算的 4 通道数字矩阵,相当于把街景照片变成像素数据。

最经典的找路牌方法是位置权重矩阵(PWM)。它统计已知结合位点中每个位置出现每种碱基的频率,再对候选序列逐位置打分,分数代表“这段序列像不像交警常驻的路口”:

有了路牌识别器,地图上的关键路口就被全部标注出来。但路牌再多,如果道路封闭,交警也到不了现场——这就要看下一节讲的实时路况:表观遗传状态。

S(x)=∑i=1Llog⁡2pi(xi)q(xi)S(x) = \displaystyle\sum_{i=1}^{L} \log_2 \frac{p_i(x_i)}{q(x_i)}
分数超过一定阈值的序列片段,会被判定为某个转录因子的潜在结合位点——相当于在地图上标记“此处常有交警”。
  1. 提取碱基x_i 表示被扫描序列在第 i 个位置上的碱基,取值只能是 A、C、G、T 四种之一。
    xi∈{A,C,G,T}x_i \in \{\mathrm{A}, \mathrm{C}, \mathrm{G}, \mathrm{T}\}
  2. 统计位置频率p_i(x_i) 来自已知结合位点集合,表示位置 i 出现该碱基的经验频率。
    pi(xi)=ni(xi)Np_i(x_i) = \frac{n_i(x_i)}{N}
  3. 对数比分将位置频率除以基因组背景频率后取以 2 为底的对数,正数表示比随机更倾向结合。
    log⁡2pi(xi)q(xi)\log_2 \frac{p_i(x_i)}{q(x_i)}
  4. 累加判定把 L 个位置的贡献全部相加得到总分数,超过阈值即判定为潜在结合位点。
    S(x)=∑i=1Llog⁡2pi(xi)q(xi)S(x) = \displaystyle\sum_{i=1}^{L} \log_2 \frac{p_i(x_i)}{q(x_i)}

表观遗传特征:实时路况直播

同一张城市地图,早高峰和深夜的路况天差地别。基因组也一样:DNA 平时紧紧缠绕在组蛋白上,像被施工围挡堵死的路段;某些区域却会松开,让蛋白质得以进入,就像交警接到了“放行”通知。这些“路段是否通车”的信息,就是表观遗传特征。

科学家用实验技术捕捉到路况直播:染色质开放性实验(如 ATAC-seq)直接测出哪些区域是松开的,得到每个路口的“通车指数”;组蛋白修饰实验测出路标系统,比如 H3K27ac 标记活跃增强子,像竖起“前方绿灯畅行”的路牌;而 DNA 甲基化常与基因沉默相伴,仿佛在路口焊上“禁止通行”的铁栅栏。

在把信号交给 AI 之前,必须先做归一化,否则不同实验的测序深度差异会干扰模型。对某个调控元件 e,标准化后的开放信号强度用如下公式计算:

有了实时路况直播,调度中心就能区分“地图上有路牌但实际封路”的情况。不过,要把路牌识别与路况信息整合成端到端的预测系统,还需要深度学习模型这个聪明的调度员。

y^e=rele×106N\hat{y}_e = \frac{r_e}{l_e} \times \frac{10^6}{N}
通俗理解:把“测到的片段数”除以“元件长度”再乘上“文库总规模”的归一化系数,得到不同实验之间可比较的开放程度。
  1. 统计片段数r_e 是实验测出比对到该元件区域的 DNA 片段总数。
    re=#{fragments overlapping e}r_e = \#\{\text{fragments overlapping } e\}
  2. 长度校正除以元件长度 l_e,避免长元件天然获得更多读数。
    rele\frac{r_e}{l_e}
  3. 深度归一化乘以 10^6 再除以总读数 N,把不同样本拉到同一测序深度。
    106N\frac{10^6}{N}
  4. 合成信号两部分相乘得到标准化开放信号,值越大代表该区域越开放。
    y^e=rele×106N\hat{y}_e = \frac{r_e}{l_e} \times \frac{10^6}{N}

深度学习模型:AI 调度核心算法

城市越来越大,靠人工盯屏不现实。AI 调度中心里有两类关键算法:巡逻员式的 CNN 和调度员式的注意力机制。巡逻员拿着与路牌等宽的放大镜,沿着街道一个窗口一个窗口地扫,看到熟悉的图案就喊一声;调度员则能同时观察全城所有路口,判断远处的立交桥和会场之间的联动关系。

在基因调控预测中,CNN 第一层卷积核本质上就是“可学习的路牌模板”。与传统 PWM 需要人工统计不同,CNN 通过反向传播自动把核训练成基序检测器,多个核并联就像多个巡逻员分工认不同样式的路牌。最大池化层像巡逻员向上级汇报“这段街区最像路牌的窗口响应是多少”,压缩冗余信息。再叠加残差连接与归一化层,信号在深层网络中不衰减,训练也更稳定。

卷积层对序列的一次“扫描打分”可用下面的公式描述:

巡逻员负责局部路牌,调度员负责全局联动。紧接 CNN 的注意力机制,可以捕捉数十万碱基之外的增强子与启动子之间的远程交互——这正是长程依赖建模的关键。巡逻与调度配合,才构成完整的 AI 调度中心。

hk,j=ReLU(bk+∑c=14∑t=0w−1Xc,j+t Wk,c,t)h_{k,j} = \mathrm{ReLU}\left(b_k + \displaystyle\sum_{c=1}^{4}\sum_{t=0}^{w-1} X_{c,j+t}\, W_{k,c,t}\right)
公式说的是:第 k 个巡逻员拿着长度为 w 的模板,在序列第 j 个位置滑动,计算窗口内容与模板的相似度,再经过 ReLU 决定是否“喊话”。
  1. 输入编码X 是 one-hot 序列矩阵,形状为 4 乘 L,c 遍历 A、C、G、T 四个通道。
    X∈{0,1}4×LX \in \{0,1\}^{4 \times L}
  2. 卷积核模板W_{k,c,t} 是第 k 个卷积核的参数,等价于一个长度为 w 的基序模板。
    Wk∈R4×wW_k \in \mathbb{R}^{4 \times w}
  3. 滑动点积对每个位置 j,把窗口内序列与核做逐元素相乘再求和,并加上偏置 b_k。
    ∑c=14∑t=0w−1Xc,j+tWk,c,t+bk\sum_{c=1}^{4}\sum_{t=0}^{w-1} X_{c,j+t} W_{k,c,t} + b_k
  4. ReLU 激活把负值截断为 0,只保留“像模板”的正响应,得到特征图。
    ReLU(z)=max⁡(0,z)\mathrm{ReLU}(z) = \max(0, z)

多模态融合:地图与路况合成一块屏

只看地图,调度中心不知道实时堵不堵;只看路况,又不知道路口在哪。真正高效的调度,是把两块屏幕合成一块:左边是序列地图,右边是表观路况,中间由融合层把它们对齐。这就是多模态融合。

序列模态提供“潜在的调控能力”——序列上有没有路牌,决定这里先天可不可以设卡;表观模态提供“当前的激活状态”——路况好不好,决定交警现在是否真的在岗。两者缺一不可:一条序列可能拥有完美的路牌,但在不该开放的细胞类型里被甲基化封路;反之,区域再开放,没有路牌也不会有交警值守。

融合方式大致有三种:输入级拼接,像两块屏幕并排;特征级相加或相乘,像把两张透明胶片叠在一起;以及基于注意力的交互融合,让序列特征去“查询”表观特征,学习更灵活的跨模态依赖。其核心公式是注意力机制:

融合完成之后,模型既知道路口位置又知道此刻是否通车,预测自然更准。不过,调度系统调得再好,也要经过严格的“路考”才能上岗——这就是评估与基准要解决的问题。

Attention(Q,K,V)=softmax(QK⊤dk)V\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
理解为:调度员拿着查询单 Q,在所有位置的键 K 上比对相关度,再按相关度从值 V 中提取信息——相当于把最该关注的路况挑出来。
  1. 查询与键Q 代表当前要理解的位置,K 代表所有位置,点积 QK^T 衡量两位置的相关性。
    QK⊤Q K^\top
  2. 缩放稳定除以键维度的平方根,防止内积数值过大导致 softmax 饱和。
    QK⊤dk\frac{Q K^\top}{\sqrt{d_k}}
  3. 归一化权重softmax 把相关分数变成非负且和为 1 的注意力权重。
    αj=softmaxj(QK⊤dk)\alpha_j = \mathrm{softmax}_j\left(\frac{Q K^\top}{\sqrt{d_k}}\right)
  4. 加权融合用权重对 V 加权求和,输出就包含所有远端位置的信息。
    ∑jαjVj\sum_j \alpha_j V_j

评估与基准:上岗前的路考

调度系统上岗前要过路考,而且不能拿自己天天练车的路段来考。基因调控预测同样强调评估设计:训练集、验证集、测试集必须严格分离,测试序列要来自未参与训练的基因组区域,否则模型就像“背答案的考生”,分数再高也不可信。

评估指标中,AUROC(ROC 曲线下面积)是最常用的“排名能力”指标,它回答的问题是:把模型打的分数从高到低排序,真正结合的位点是否排在前面?在正负样本极度不平衡的调控预测中,AUROC 会偏乐观,因此还要关注 PR-AUC,就像路考不仅要看通过率,还要看有没有误伤行人。基准数据集方面,ENCODE 项目提供了数百个细胞系的转录因子结合、染色质开放与组蛋白修饰数据,是调控预测的“标准驾校”,不同团队在同一测试集上赛马,避免自卖自夸。

AUROC 的数学定义是对 ROC 曲线求积分:

通过路考的模型,还要跨细胞类型验证泛化能力——在这个城市考过的驾照,到另一个城市也得能开。只有跨细胞、跨数据集都保持稳定,调度系统才具备上岗资格。

AUROC=∫01TPR(FPR−1(t))dt\mathrm{AUROC} = \int_{0}^{1} \mathrm{TPR}\left(\mathrm{FPR}^{-1}(t)\right) dt
通俗理解:把真正率和假正率画成一条曲线,曲线下方面积越大,说明模型把“真结合”排到“假结合”前面的能力越强。
  1. 真正率TPR 是所有阳性样本中被正确预测出的比例。
    TPR=TPTP+FN\mathrm{TPR} = \frac{\mathrm{TP}}{\mathrm{TP} + \mathrm{FN}}
  2. 假正率FPR 是阴性样本中被误判为阳性的比例。
    FPR=FPFP+TN\mathrm{FPR} = \frac{\mathrm{FP}}{\mathrm{FP} + \mathrm{TN}}
  3. 绘制曲线不断改变判定阈值,得到一系列 (FPR, TPR) 点并连成 ROC 曲线。
    {(FPR(t),TPR(t)):t∈R}\{( \mathrm{FPR}(t), \mathrm{TPR}(t)) : t \in \mathbb{R}\}
  4. 求面积对 ROC 曲线求积分,结果越接近 1 表示排序能力越强。
    AUROC=∫01TPR(FPR−1(t)) dt\mathrm{AUROC} = \int_{0}^{1} \mathrm{TPR}(\mathrm{FPR}^{-1}(t))\,dt

调控预测应用:调度系统正式上岗

上岗后的调度系统立刻展示三项本领:预测每个路口的实时车流(基因表达水平),模拟“换掉一块路牌交通会怎样变化”(变异效应预测),以及为每个片区生成专属方案(细胞类型特异的调控模型)。最终这些能力汇聚成一张全城的调控网络图谱。

变异效应预测是非编码区致病突变解析的关键。全基因组关联分析发现,超过九成的疾病相关突变位于非编码区,它们不改写蛋白质,却可能悄悄破坏一个增强子里的路牌。模型的做法简洁有力:分别对参考序列和变异序列打分,再取差值:

在单细胞层面,单细胞 ATAC-seq 让模型可以逐细胞地看路况,构建出细胞类型特异的调控网络。从标注路口、看懂路况、训练调度员,到融合信息、通过路考、正式上岗——基因调控预测的核心,与一座智慧城市的交通管理惊人地同构。AI 与生命科学的故事,才刚刚开始。

ΔS=S(xalt)−S(xref)\Delta S = S(x^{\text{alt}}) - S(x^{\text{ref}})
理解为:先让模型评估“原始路牌”的调控强度,再评估“换字后的路牌”,两者相减就知道这次改动是加强还是破坏了交通指挥。
  1. 参考评分模型先对参考基因组上的序列片段计算调控活性评分。
    S(xref)S(x^{\text{ref}})
  2. 变异评分把目标碱基替换后,重新计算同一位置的评分。
    S(xalt)S(x^{\text{alt}})
  3. 相减取差两个评分相减,正差意味着变异增强调控,负差意味着破坏调控。
    ΔS=S(xalt)−S(xref)\Delta S = S(x^{\text{alt}}) - S(x^{\text{ref}})
  4. 显著性判定只有当差值绝对值超过阈值,且落在活跃调控区域时,才判定为候选致病变异。
    ∣ΔS∣>τ|\Delta S| > \tau

AI 应用场景

非编码区致病变异筛查

阶段:推理与解释

解决的问题:传统注释工具只能解释编码区突变,而超过九成的疾病相关突变位于非编码区,它们不改变蛋白质序列,却可能破坏转录因子结合位点。人工逐个验证这些突变成本极高,AI 模型可以用参考与变异序列的评分差,批量筛选出高致病性候选位点。

具体案例:某肿瘤研究团队用类似 Enformer 的长程依赖模型,对队列中 5 万个非编码突变打分,发现位于开放染色质增强子内、ΔS 显著的突变显著富集于已知癌基因附近,最终锁定 12 个此前未报道的候选驱动突变。

基因编辑调控靶点设计

阶段:训练与部署

解决的问题:CRISPR 基因编辑若直接靶向编码区容易造成不可逆破坏,若能精准靶向调控元件,则可以精细地调节基因表达强度。但传统方法难以预测在目标细胞类型中哪个增强子最活跃,需要结合序列与表观信息进行多模态预测。

具体案例:某细胞工程团队设计 gRNA 定位到 T 细胞特异性增强子,先用融合了染色质开放性与组蛋白修饰的深度学习模型预测其调控能力,再在体外实验验证,成功将目标基因表达上调约 3 倍,且未影响邻近基因。

Python 演示

python108 行
import numpy as np  def one_hot(seq):    """把 DNA 字符串编码为 4 x L 的 one-hot 矩阵"""    table = {'A': 0, 'C': 1, 'G': 2, 'T': 3}    mat = np.zeros((4, len(seq)), dtype=np.float32)    for i, ch in enumerate(seq.upper()):        if ch in table:            mat[table[ch], i] = 1.0    return mat  def sigmoid(x):    return 1.0 / (1.0 + np.exp(-np.clip(x, -30, 30)))  class MiniCNN:    """迷你 1D-CNN: 卷积 + ReLU + 最大池化 + 全连接"""     def __init__(self, win=7, n_kernels=6, pool=3, lr=0.3):        self.win = win        self.nk = n_kernels        self.pool = pool        self.lr = lr        self._count = 0        rng1 = np.random.RandomState(0)        rng2 = np.random.RandomState(1)        self.w1 = rng1.randn(n_kernels, 4, win) * 0.2        self.b1 = np.zeros(n_kernels)        self.w2 = rng2.randn(n_kernels) * 0.2        self.b2 = 0.0     def forward(self, x):        cin, L = x.shape        out_len = L - self.win + 1        z = np.zeros((self.nk, out_len))        for k in range(self.nk):            for j in range(out_len):                z[k, j] = self.b1[k] + np.sum(x[:, j:j + self.win] * self.w1[k])        self.z1 = z        a = np.maximum(z, 0.0)        p_out = out_len // self.pool        self.pool_idx = np.zeros((self.nk, p_out), dtype=int)        pooled = np.zeros((self.nk, p_out))        for k in range(self.nk):            for j in range(p_out):                seg = a[k, j * self.pool:(j + 1) * self.pool]                self.pool_idx[k, j] = j * self.pool + int(np.argmax(seg))                pooled[k, j] = seg.max()        self.pooled = pooled        self.flat = pooled.reshape(-1)        self.logit = self.b2 + np.dot(self.w2, self.flat)        return sigmoid(self.logit)     def backward(self, x, y, p):        dlogit = p - y        self.w2 -= self.lr * dlogit * self.flat        self.b2 -= self.lr * dlogit        da2 = (dlogit * self.w2).reshape(self.pooled.shape)        da1 = np.zeros_like(self.z1)        for k in range(self.nk):            for j in range(self.pooled.shape[1]):                da1[k, self.pool_idx[k, j]] += da2[k, j]        dz = da1 * (self.z1 > 0)        cin, L = x.shape        out_len = L - self.win + 1        for k in range(self.nk):            for j in range(out_len):                self.w1[k] -= self.lr * dz[k, j] * x[:, j:j + self.win]            self.b1[k] -= self.lr * dz[k].sum()        return abs(p - y)     def fit(self, seqs, labels, epochs=30):        total_err = 0.0        for _ in range(epochs):            for s, y in zip(seqs, labels):                x = one_hot(s)                p = self.forward(x)                total_err += self.backward(x, y, p)            self._count += 1        return total_err / (epochs * len(seqs))     def predict(self, seq):        return self.forward(one_hot(seq))  def make_dataset(n=60, length=30, motif='ACGTACG'):    rng = np.random.RandomState(42)    seqs, labels = [], []    for _ in range(n):        s = ''.join(rng.choice(list('ACGT'), length))        positive = rng.rand() < 0.5        if positive:            pos = rng.randint(0, length - len(motif) + 1)            s = s[:pos] + motif + s[pos + len(motif):]        seqs.append(s)        labels.append(1.0 if positive else 0.0)    return seqs, labels  if __name__ == '__main__':    seqs, labels = make_dataset()    model = MiniCNN()    model.fit(seqs, labels, epochs=30)    preds = [1.0 if model.predict(s) > 0.5 else 0.0 for s in seqs]    acc = np.mean([1.0 if p == y else 0.0 for p, y in zip(preds, labels)])    print('CNN motif detection accuracy: %.3f' % acc)
目的:用纯 NumPy 实现一个迷你 1D-CNN,在合成 DNA 序列上学习识别转录因子结合基序,演示调控预测中 CNN 基序提取的完整前向与反向传播流程。
  1. mat[table[ch], i] = 1.0在对应碱基通道上置 1,把字母序列变成神经网络能计算的数字矩阵
  2. z[k, j] = self.b1[k] + np.sum(x[:, j:j + self.win] * self.w1[k])滑动窗口与卷积核逐元素相乘后求和,相当于巡逻员对照路牌模板给每个窗口打分
  3. a = np.maximum(z, 0.0)ReLU 激活,把负响应截断为 0,只保留“像基序”的正向信号
  4. self.pool_idx[k, j] = j * self.pool + int(np.argmax(seg))记录池化窗口内最大响应的位置,供反向传播精确回传梯度
  5. self.logit = self.b2 + np.dot(self.w2, self.flat)全连接层把全部特征汇总成单个结合倾向分数
  6. def make_dataset(n=60, length=30, motif='ACGTACG'):合成训练数据:一半序列随机嵌入已知基序,另一半纯随机
  7. preds = [1.0 if model.predict(s) > 0.5 else 0.0 for s in seqs]对每条序列预测并转成 0/1 标签,用于计算最终准确率

常见误区

误区我总觉得把整条染色体甚至整个基因组都丢进模型,信息越多,预测自然越准,所以拼命加大输入窗口。

正解基因调控预测的关键不是“看得多”而是“看得准”。过长输入会引入大量无关序列噪声,还让训练和推理成本爆炸。正确做法是聚焦功能区域,并用注意力机制有选择地利用远距离信息——就像调度中心不会让一个值班员盯着全城十万条街道,而是让他盯关键路口的摄像头。

为何常见:我们直觉上相信“数据越多越好”,忽略了序列是高度冗余的,有效信号集中在少数调控元件上。

误区模型输出“这个转录因子会结合这段 DNA”,我就认为基因一定被激活了,直接下结论。

正解结合只是调控的第一步。能否真正影响基因表达,还取决于染色质是否开放、远端增强子是否与启动子形成空间接触、细胞内是否有足够的共激活因子。模型输出的结合分数只代表“有机会设卡”,不代表“一定造成拥堵”。所以要融合表观模态,并把结合预测与表达预测分开评估。

为何常见:结合预测是研究最充分、基准最成熟的任务,容易让人把它当成调控的终点,忽略了从结合到表达的漫长因果链。

误区我在某个细胞系上把模型训到准确率 95%,直接拿去预测别的组织应该也没问题。

正解不同细胞类型拥有完全不同的表观状态和转录因子组合——路牌一样,路况完全不同。在一个细胞系上训出的模型,换到别的细胞类型往往大幅掉点。可靠方案是用多细胞数据训练,把细胞类型作为条件输入,或在目标细胞类型上做少量微调。

为何常见:很多公开基准集默认把数据混合训练,模型拿到的平均性能掩盖了细胞类型之间的巨大差异。

误区模型在 ENCODE 基准集上 AUROC 达到 0.95,我认为它在任何真实数据上都有这么高的表现。

正解基准集的测试分布与真实应用分布存在差异:基准集通常过滤了重复序列、平衡了正负样本,而真实数据包含大量未注释区域、测序批次效应和罕见变异。0.95 的 AUROC 可能在新细胞类型上掉到 0.7。上线前要做跨数据集验证与校准,就像路考满分不代表任何天气都能安全驾驶。

为何常见:用一个数字代表模型能力是最省事的思路,但忽略了分布漂移和实验批次带来的影响。

面试题

Q1. 在“城市交通”的比喻中,转录因子对应下列哪个角色?

单选题 · easy

  • A.会场大楼本身
  • B.路口指挥交警← 正确答案
  • C.城市里的车辆
  • D.地图上的道路

答案:B。转录因子是识别并结合 DNA 调控序列的蛋白质,就像站在路口认路牌、指挥车流的交警;基因是会场,开放染色质是道路,基因表达产物是车辆。

Q2. DNA 序列 one-hot 编码中,碱基 G 对应的四维向量是?

单选题 · easy

  • A.向量 (1, 0, 0, 0)
  • B.向量 (0, 1, 0, 0)
  • C.向量 (0, 0, 1, 0)← 正确答案
  • D.向量 (0, 0, 0, 1)

答案:C。one-hot 编码按 A、C、G、T 四个通道置位,G 在第三位为 1。向量中的位置对应不同碱基,与字母顺序无关,这是把符号序列变成张量的标准步骤。

Q3. 在调控预测的 CNN 模型中,卷积层的主要作用是什么?

单选题 · easy

  • A.全连接映射到全局特征
  • B.滑动窗口查找局部基序← 正确答案
  • C.对序列进行随机降采样
  • D.在长距离位置间传递信息

答案:B。卷积核是宽度有限的模板,在序列上滑动做点积,擅长捕捉局部基序;长距离信息传递靠注意力,随机降采样会破坏位置信息。这就像巡逻员逐段扫描路牌,而不是把整条街压缩成一张照片。

Q4. 开放染色质对转录因子结合的意义是什么?

单选题 · mid

  • A.让 DNA 链无法被读取
  • B.使调控蛋白得以接近 DNA← 正确答案
  • C.加速 DNA 复制的过程
  • D.阻止转录因子识别基序

答案:B。染色质开放意味着 DNA 从核小体上松脱,转录因子等调控蛋白可以接近并结合;关闭的染色质即使存在基序也无法结合。就像交警到了施工现场,路牌再清楚也进不去。

Q5. 增强子与目标基因相距很远,模型为何仍需建模这种长程关系?

单选题 · mid

  • A.增强子能远程调控基因表达← 正确答案
  • B.增强子负责翻译蛋白质
  • C.增强子只影响邻近的基因
  • D.增强子属于编码蛋白质区段

答案:A。增强子通过染色质三维折叠与目标启动子空间靠近,可在数十万碱基外激活基因。CNN 局部感受野不够,需要注意力等机制建模长程依赖,就像调度员要关注几公里外的立交桥入口。

Q6. 在正负样本不平衡的调控预测任务中,以下哪个指标更能反映模型性能?

单选题 · mid

  • A.AUROC 曲线下面积
  • B.精确率-召回率曲线面积← 正确答案
  • C.训练集上的准确率
  • D.模型的参数量大小

答案:B。正样本(真正结合位点)通常远少于负样本,AUROC 会被大量负样本拉得偏乐观;PR-AUC 更关注少数类,能反映模型在稀疏信号上的表现。训练集准确率反映背诵能力,参数量与性能无直接关系。

Q7. 变异效应预测中,ΔS 为显著正值通常说明什么?

单选题 · hard

  • A.变异增强了该处调控活性← 正确答案
  • B.变异删除了整个基因座
  • C.变异对调控完全没有影响
  • D.变异改变了氨基酸序列

答案:A。ΔS = S(alt) - S(ref),正值表示变异后模型预测的调控活性升高,可能增强基因表达;负值表示破坏调控。实际应用时还要结合染色质状态来评估致病风险。

Q8. 下列哪些属于顺式调控元件?

多选题 · mid

  • A.启动子序列← 正确答案
  • B.增强子序列← 正确答案
  • C.核糖体亚基
  • D.DNA 聚合酶

答案:AB。启动子和增强子都是 DNA 上的顺式调控元件,分别负责招募转录机器和放大调控信号;核糖体亚基是蛋白质-RNA 复合物,DNA 聚合酶负责复制,两者都不是调控元件。

Q9. 多模态融合可整合哪些信息来提升调控预测?

多选题 · hard

  • A.染色质开放性← 正确答案
  • B.组蛋白修饰标记← 正确答案
  • C.蛋白质氨基酸序列
  • D.参考基因注释信息← 正确答案

答案:ABD。调控预测的输入模态包括 DNA 序列、染色质开放性、组蛋白修饰与基因注释等;蛋白质氨基酸序列不属于调控元件层面的输入。就像调度中心既看地图又看路况,但不需要看每一辆车的内部构造。

Q10. 长程依赖建模在基因调控预测中面临的挑战包括?

多选题 · hard

  • A.远端增强子距离过远← 正确答案
  • B.计算与显存开销巨大← 正确答案
  • C.无需位置编码信息
  • D.需要捕捉远端交互← 正确答案

答案:ABD。增强子可位于目标基因数十万碱基之外,模型需要足够大的感受野,注意力计算开销随之上升,还要靠位置编码感知顺序;认为“无需位置编码”是错误选项。长程依赖像跨区交通联动,必须全局建模才能预测。