跳转至

深度学习基础(CNN / RNN / Transformer)

一句话说明

深度学习是机器学习的子集,用多层神经网络自动从原始数据中学习层次化特征表示;在生信中用于变异检测(DeepVariant)、蛋白质结构预测(ESMFold)、DNA序列建模(DNABERT)等传统方法难以胜任的复杂任务。


与"12_机器学习基础"的区别

对比维度12_机器学习基础本篇深度学习
核心算法随机森林、SVM、逻辑回归、K-meansCNN、RNN/LSTM、Transformer
特征工程需要人工提取/选择特征自动从原始数据学习特征
数据量要求小样本也能跑通常需要大数据量
计算资源CPU 即可通常需要 GPU
生信典型场景菌群分类、标志物筛选图像识别、序列建模、蛋白质结构预测

一、神经网络基本原理(白话版)

1.1 感知机(Perceptron)—— 最简单的神经元

白话比方:一个神经元就像一个"打分裁判"——它把所有输入信号乘以各自的权重加起来,再加一个偏置(门槛),得到总分,然后过一个"激活函数"决定是否激活(输出 1 或 0)。

输入x1 ---(w1)---\
输入x2 ---(w2)----→ [加权求和 + 偏置b] → [激活函数] → 输出
输入x3 ---(w3)---/

数学公式:output = f(w1*x1 + w2*x2 + w3*x3 + b)
# f 是激活函数,w 是权重,b 是偏置(门槛)

1.2 激活函数 —— 引入非线性

如果没有激活函数,多层网络等价于一层(线性叠线性还是线性)。激活函数让网络能学复杂的弯弯曲曲的规律。

激活函数公式白话解释特点
Sigmoid1/(1+e^(-x))把任何数压到 0~1 之间容易梯度消失,现在很少在隐藏层用
ReLUmax(0, x)负数变0,正数不变计算快,最常用,但有"死神经元"问题
Tanh(e^x - e^(-x))/(e^x + e^(-x))把数压到 -1~1 之间比Sigmoid好点但也有梯度消失
GELUx * Φ(x)平滑版ReLUTransformer里常用

1.3 反向传播(Backpropagation)—— 怎么学习

白话比方: 1. 正向传播:数据从输入层一层层往后算,得到最终预测结果 2. 算误差:拿预测结果和真实答案比较,算出"损失"(Loss,可理解为"错得多离谱") 3. 反向传播:从输出层往回走,用链式法则算出每个权重对损失的"贡献度"(梯度) 4. 更新权重:按梯度方向调整权重,让下次预测更准

类比:你考试考砸了(Loss大),老师帮你分析每道题错在哪(反向传播算梯度),然后你针对性地补弱项(更新权重)。

1.4 梯度下降(Gradient Descent)—— 怎么调参数

白话比方:你闭着眼站在山上想下山(找到Loss最低点),你的策略是"摸一下脚边哪个方向最陡,就往那个方向迈一步"。

  • 学习率(Learning Rate):迈步的大小。太大容易跨过最低点来回震荡;太小下山太慢。
  • SGD(随机梯度下降):每次只拿一小批数据算梯度,比看完所有数据再动快很多。
  • Adam 优化器:自动调整每个参数的学习率,目前最常用的优化器。

二、CNN 卷积神经网络

2.1 核心思想

白话比方:CNN 就像一个"放大镜检查员"——用一个小窗口(卷积核)在整张图片上滑动,每滑到一个位置就提取一个局部特征。浅层提取边缘、颜色,深层组合出"眼睛""鼻子",最终识别出"这是一只猫"。

2.2 三种核心层

层类型英文白话解释作用
卷积层Convolution小窗口滑动提取局部特征学习图案(边缘、纹理、形状)
池化层Pooling把一片区域压缩成一个值(取最大/平均)缩小尺寸、减少计算量、增强平移不变性
全连接层Fully Connected把所有特征拉平,像传统神经网络一样做分类最终输出分类结果
典型CNN结构流程:
[输入图像] → [卷积→ReLU→池化] × N层 → [展平] → [全连接层] → [输出分类]

2.3 关键概念

  • 卷积核(Filter/Kernel):比如 3×3 的小矩阵,在输入上滑动做点乘。一个卷积核检测一种特征。
  • 步长(Stride):卷积核每次滑动多少格。步长大=输出更小。
  • 填充(Padding):边缘补零,让输出尺寸不缩太小。
  • 特征图(Feature Map):卷积核扫过后生成的结果图。

2.4 经典 CNN 架构

模型年份关键创新深度
LeNet-51998CNN开山之作,手写数字识别5层
AlexNet2012ReLU + Dropout + GPU训练,赢ImageNet8层
VGG2014统一用3×3小卷积核堆叠16/19层
GoogLeNet/Inception2014多尺度并行卷积(Inception模块)22层
ResNet2015残差连接(跳跃连接),解决梯度消失50/101/152层

2.5 生信中的 CNN 应用

DeepVariant(Google,2018)

  • 任务:从测序数据中检测基因变异(Variant Calling)
  • 核心思路:把 BAM 文件中的比对信息转换成"pileup 图像"(类似彩色图片),然后用 Inception(CNN)来分类"这个位点是纯合变异/杂合变异/无变异"
  • 白话:把基因测序数据画成图,让CNN"看图说话"判断哪里有变异
  • 意义:精度超越传统 GATK HaplotypeCaller,证明 CNN 在基因组学的强大能力

其他生信 CNN 应用

  • DeepBind:预测 DNA/RNA 结合蛋白的结合位点(1D卷积)
  • Basset/DeepSEA:预测非编码区 DNA 的功能效应
  • 病理切片分类:用 CNN 识别组织病理图像中的肿瘤区域

三、RNN 循环神经网络

3.1 核心思想

白话比方:RNN 就像一个"有记忆的阅读器"——它一个字一个字地读文本,每读一个字就更新自己的"记忆状态"。这样它读到后面的字时还记得前面的内容,能理解上下文关系。

传统神经网络:每个输入独立处理
RNN:h(t) = f(W * x(t) + U * h(t-1) + b)
          ↑当前输入    ↑上一步的记忆

时间展开:
x1 → [RNN] → h1
x2 → [RNN] → h2
x3 → [RNN] → h3 → 输出

3.2 RNN 的问题:梯度消失/爆炸

当序列很长时,反向传播要经过很多步,梯度要么越乘越小(消失,学不到远距离依赖)要么越乘越大(爆炸,训练崩溃)。

3.3 LSTM(长短时记忆网络)

白话比方:LSTM 给 RNN 加了三个"门"(gate),就像给记忆加了管理员: - 遗忘门(Forget Gate):决定"之前的记忆哪些该扔掉" - 输入门(Input Gate):决定"新信息中哪些该记住" - 输出门(Output Gate):决定"当前记忆中哪些该输出"

这三个门让 LSTM 能"选择性记忆"——重要的长期记住,不重要的及时遗忘,解决了梯度消失问题。

3.4 GRU(门控循环单元)

GRU 是 LSTM 的简化版,把三个门合并成两个(重置门 + 更新门),参数更少、训练更快,效果接近 LSTM。

对比LSTMGRU
门数量3个(遗忘/输入/输出)2个(重置/更新)
参数量更多更少
训练速度较慢较快
性能长序列略好短序列差不多

3.5 生信中的 RNN 应用

  • 基因/蛋白质序列预测:把碱基(ATCG)或氨基酸序列当作"文本",用 LSTM 预测下一个位置或分类
  • 基因表达时序分析:对时间序列的基因表达数据建模
  • RNA 二级结构预测:序列到结构的映射
  • 临床事件预测:对患者时间线数据(电子病历)做疾病进展预测

四、Transformer

4.1 核心思想:自注意力机制(Self-Attention)

白话比方: - RNN 像"一个人从左到右逐字阅读"——读到后面可能忘了开头 - Transformer 像"一群人同时看整篇文章"——每个词都能直接看到所有其他词,不需要按顺序传递

自注意力的白话解释: 对于序列中的每个位置,Transformer 问三个问题: 1. Q(Query,查询):"我想找什么信息?" 2. K(Key,键):"我有什么信息可以提供?" 3. V(Value,值):"我的具体内容是什么?"

然后用 Q 和所有 K 算"相似度"(注意力分数),相似度高的 V 被重点关注。

Attention(Q, K, V) = softmax(Q × K^T / √d_k) × V

白话翻译:
1. 每个词生成 Q、K、V 三个向量
2. 当前词的 Q 和所有词的 K 做点积(算相关性)
3. 除以 √d_k 防止数值太大
4. softmax 变成概率分布(加起来=1)
5. 用概率对所有词的 V 加权求和 = 最终输出

4.2 Transformer 结构

完整 Transformer(Encoder-Decoder):

Encoder(编码器,理解输入):
  [输入 Embedding + 位置编码]
  → [多头自注意力] → [LayerNorm + 残差]
  → [前馈神经网络] → [LayerNorm + 残差]
  × N 层

Decoder(解码器,生成输出):
  [输出 Embedding + 位置编码]
  → [掩码多头自注意力]
  → [交叉注意力(看 Encoder 输出)]
  → [前馈神经网络]
  × N 层

关键组件: - 多头注意力(Multi-Head):把注意力分成多个"头"并行计算,每个头关注不同方面 - 位置编码(Positional Encoding):因为没有顺序处理,需要额外告诉模型每个词在哪个位置 - 残差连接 + LayerNorm:帮助深层网络稳定训练

4.3 Transformer 的优势

对比RNN/LSTMTransformer
并行性必须按顺序,无法并行完全并行计算
长距离依赖距离远时信息衰减任意距离直接交互
训练速度慢(序列长度线性)快(可并行,但注意力是 O(n²))
可扩展性难以做到非常大的模型可以扩展到数十亿参数

4.4 生信中的 Transformer 应用

ESM / ESM-2(Meta FAIR,2019-2023)

  • 任务:蛋白质语言模型(Protein Language Model)
  • 方法:用 Transformer 在 2.5 亿条蛋白质序列上做无监督预训练(类似 BERT 的掩码语言模型)
  • 应用:蛋白质结构预测(ESMFold)、功能预测、变异效应预测、蛋白质设计
  • 白话:把蛋白质序列当作"语言",用 Transformer 学会蛋白质的"语法"
  • 成果:ESM Atlas 预测了 6.17 亿个宏基因组蛋白质结构

DNABERT / DNABERT-2(2021/2023)

  • 任务:DNA 序列的预训练语言模型
  • 方法:把 DNA 序列用 k-mer 分词(DNABERT-1)或 BPE 分词(DNABERT-2),然后用 BERT 架构做掩码预训练
  • 应用:启动子预测、剪接位点识别、表观遗传标记预测等 28 个基因组理解任务
  • 白话:把基因组当作"书"来阅读,Transformer 学会理解 DNA 的"语法"

其他生信 Transformer

  • AlphaFold2:蛋白质结构预测的革命性突破(结合 MSA + Transformer)
  • Enformer:从 DNA 序列预测基因表达(取代 CNN 的 Basenji)
  • scBERT:单细胞 RNA-seq 数据的细胞类型注释

五、CNN vs RNN vs Transformer 对比表

维度CNNRNN/LSTMTransformer
核心操作局部卷积循环状态传递自注意力
擅长数据图像、局部模式时序/序列数据长序列、任何序列
并行能力高(各位置独立卷积)低(必须按序)高(注意力并行)
长距离依赖弱(受感受野限制)中(LSTM可改善)强(直接全局交互)
参数量中等中等大(注意力矩阵)
计算复杂度O(k·n),k=核大小O(n)O(n²)
典型深度中-深(50-150层)浅-中(2-4层)中(6-48层)
生信代表DeepVariant, DeepBind基因序列LSTMESM, DNABERT, AlphaFold2
当前趋势仍在图像领域主导逐渐被Transformer取代大多数新模型首选

六、常见框架对比:PyTorch vs TensorFlow

维度PyTorchTensorFlow
开发者Meta (Facebook)Google
编程范式动态图(define-by-run)静态图 → TF2.0后也支持动态图
学术界使用占主导(>80% 论文)逐渐下降
工业部署TorchServe、ONNXTF Serving、TFLite 更成熟
调试难度容易(像写普通Python)较难(早期静态图难调试)
生信常用ESM、DNABERT、AlphaFold2DeepVariant
学习建议优先学 PyTorch(学术主流)了解即可
# PyTorch 快速示例:定义一个简单CNN
import torch
import torch.nn as nn

class SimpleCNN(nn.Module):
    def __init__(self, num_classes=2):
        super().__init__()
        # 卷积块:输入1通道,输出32通道,3×3卷积核
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, padding=1)
        self.relu = nn.ReLU()                    # 激活函数
        self.pool = nn.MaxPool2d(2)              # 2×2最大池化
        self.fc = nn.Linear(32 * 14 * 14, num_classes)  # 全连接层

    def forward(self, x):
        x = self.pool(self.relu(self.conv1(x)))  # 卷积→激活→池化
        x = x.view(x.size(0), -1)               # 展平
        x = self.fc(x)                           # 全连接分类
        return x

七、训练技巧

7.1 学习率(Learning Rate)

  • 太大:Loss 震荡不下降,甚至发散(NaN)
  • 太小:收敛太慢,容易陷入局部最优
  • 推荐做法
  • 初始值:1e-3(Adam)或 1e-2(SGD)
  • 使用学习率调度器(LR Scheduler):如 CosineAnnealing、ReduceLROnPlateau
  • 学习率 warmup:前几个 epoch 从很小慢慢升到目标值

7.2 Batch Size

  • 小 Batch(16-64):梯度噪声大,正则化效果好,但训练慢
  • 大 Batch(256-4096):梯度稳定,GPU利用率高,但泛化可能差
  • 实践建议:GPU 显存能装多大就用多大,配合学习率线性缩放(batch翻倍,lr也翻倍)

7.3 过拟合(Overfitting)与正则化

白话:模型把训练数据"背下来了"(包括噪声),在新数据上表现差。就像学生只背答案不理解原理,换题就不会了。

应对方法

方法白话解释代码
Dropout训练时随机"关掉"一部分神经元,防止过度依赖某些路径nn.Dropout(0.5)
数据增强对训练数据做变换(翻转、旋转、加噪声)扩充样本transforms.RandomFlip()
早停(Early Stopping)验证集Loss不再下降就停止训练监控 val_loss
权重衰减给大权重加惩罚,鼓励简单模型optimizer(weight_decay=1e-4)

7.4 Batch Normalization(批归一化)

  • 白话:每一层的输出做"标准化"(减均值除标准差),让数据分布稳定
  • 好处:训练更快、可以用更大学习率、减轻梯度消失
  • 代码nn.BatchNorm2d(32) (对32通道的特征图做BN)

7.5 Layer Normalization

  • 和 BatchNorm 类似,但是对单个样本的所有特征做归一化(不依赖 batch)
  • Transformer 中用 LayerNorm(因为序列长度可变,BatchNorm 不好用)

八、生信中的深度学习应用场景表

应用场景模型架构代表工具/论文输入数据输出
变异检测CNN (Inception)DeepVariantBAM pileup图像变异类型分类
蛋白质结构预测Transformer + MSAAlphaFold2蛋白质序列+MSA3D坐标
蛋白质语言模型TransformerESM-2 / ESMFold蛋白质序列结构/功能预测
DNA 序列建模Transformer (BERT)DNABERT-2DNA k-mer/BPE序列功能注释
基因表达预测TransformerEnformerDNA序列(200kb)基因表达量
单细胞注释TransformerscBERT, scGPT基因表达矩阵细胞类型
RNA结构预测RNN/TransformerSPOT-RNARNA序列碱基配对
药物-靶点相互作用CNN + RNNDeepDTA蛋白序列+分子SMILES结合亲和力
基因调控预测CNNDeepSEA, BassetDNA序列转录因子结合/组蛋白修饰
病理图像分析CNN (ResNet)PathAIH&E染色切片肿瘤分类/分级
宏基因组分箱CNN/TransformerVAMB, SemiBin序列组成+丰度物种分箱

九、面试怎么答(5道高频题)

Q1:CNN 和全连接网络有什么区别?为什么图像任务要用 CNN?

:全连接网络把每个像素都和每个神经元连接,参数量爆炸(224×224的图有5万个输入)且丢失空间信息。CNN 通过三个核心设计解决这个问题: 1. 局部连接:每个神经元只看一小块区域(3×3),大幅减少参数 2. 权重共享:同一个卷积核在整张图上滑动复用,进一步减参 3. 平移不变性:同一个特征无论出现在图片哪个位置都能被检测到

生信例子:DeepVariant 把测序比对转为图像,用 CNN 的 Inception 架构检测变异,精度超越 GATK。

Q2:LSTM 怎么解决 RNN 的梯度消失问题?

:普通 RNN 的梯度要经过很多步连乘,容易消失。LSTM 引入了"细胞状态"(Cell State)——一条贯穿始终的"高速公路",信息可以直接流过不被破坏。三个门(遗忘门、输入门、输出门)控制信息的增删,避免了梯度连乘的问题。

类比:普通 RNN 像传话游戏(传到后面全变味了),LSTM 像有一本笔记本一直带着(重要的写在本子上不怕忘)。

Q3:Transformer 的自注意力机制是什么?为什么比 RNN 好?

:自注意力让序列中的每个位置都能直接与所有其他位置计算相关性(Q·K 点积),不需要像 RNN 那样一步步传递。好处有三: 1. 并行计算:所有位置同时计算,训练快得多 2. 长距离依赖:第1个词和第1000个词直接交互,不衰减 3. 可扩展性:可以堆叠到数十亿参数(GPT、ESM等)

代价是 O(n²) 的计算复杂度,序列特别长时需要用 Flash Attention 等优化。

Q4:深度学习在生信中的优势和局限分别是什么?

: - 优势:自动学特征(不需人工设计)、处理复杂数据(图像/长序列)、大数据下性能天花板更高 - 局限:需要大量数据(生物样本往往昂贵)、需要GPU资源、模型可解释性差(黑盒)、小样本不如传统ML - 实践策略:预训练模型 + 微调(如用 ESM-2 的预训练权重微调到自己的蛋白质分类任务),用少量标注数据也能获得好效果

Q5:PyTorch 和 TensorFlow 你用哪个?为什么?

:日常研究和生信分析我用 PyTorch。原因: 1. 学术界主流(80%以上的生信DL论文用PyTorch),ESM、DNABERT、AlphaFold2 都基于 PyTorch 2. 动态图易调试,写起来像普通 Python 3. 社区活跃,HuggingFace 生态完善

TensorFlow 在工业部署(TF Serving、移动端 TFLite)更成熟,如果做模型上线部署会考虑。DeepVariant 是用 TensorFlow 写的。


十、速查表

┌─────────────────────────────────────────────────────────────────┐
│                     深度学习速查表                                 │
├─────────────────────────────────────────────────────────────────┤
│ 架构选择:                                                        │
│   图像数据 / 局部模式 → CNN                                       │
│   短序列 + 资源有限   → LSTM/GRU                                  │
│   长序列 + 充足数据   → Transformer                               │
│   蛋白质/DNA序列     → 预训练Transformer(ESM/DNABERT)             │
│                                                                   │
│ 激活函数:隐藏层用ReLU,输出层分类用Softmax,二分类用Sigmoid        │
│                                                                   │
│ 优化器:  默认选 Adam(lr=1e-3),大模型用 AdamW(带weight_decay)     │
│                                                                   │
│ 正则化:  Dropout(0.1~0.5) + WeightDecay + EarlyStopping          │
│                                                                   │
│ 归一化:  CNN用BatchNorm,Transformer用LayerNorm                  │
│                                                                   │
│ Batch Size:GPU显存装得下的最大值,配合lr线性缩放                   │
│                                                                   │
│ 过拟合信号:train_loss下降但val_loss上升                           │
│                                                                   │
│ 生信捷径:                                                        │
│   • 蛋白质任务 → 先试ESM-2预训练模型微调                          │
│   • DNA任务   → 先试DNABERT-2预训练模型微调                       │
│   • 变异检测  → 直接用DeepVariant                                 │
│   • 小样本    → 用传统ML(随机森林)可能更好                         │
└─────────────────────────────────────────────────────────────────┘

十一、延伸资源

资源类型说明
3Blue1Brown 神经网络系列视频最好的神经网络可视化教程
李沐《动手学深度学习》书+代码PyTorch版深度学习入门经典
Stanford CS231n课程CNN经典课程
The Illustrated Transformer博客Transformer 最佳图解
ESM GitHub代码蛋白质语言模型
DNABERT-2 GitHub代码DNA预训练模型
DeepVariant GitHub代码CNN变异检测
HuggingFace Transformers框架预训练模型库(含生信模型)

总结:深度学习的核心是用多层神经网络自动学特征。CNN 擅长图像和局部模式,RNN/LSTM 擅长序列但被 Transformer 逐渐取代,Transformer 凭借自注意力机制成为当前主流架构。在生信中,预训练大模型(ESM、DNABERT)+ 下游微调是当前最强范式。面试时重点说清楚"什么数据用什么架构"以及"生信有哪些成功应用"。