深度学习

返回机器学习

通过多层神经网络自动提取数据的层次化特征表示,在图像、语音、文本等领域取得了突破性进展,也是现代大语言模型的技术基础。


神经网络基础

神经元计算

  • :权重(学习参数)
  • :偏置
  • :激活函数(引入非线性)

前向传播

输入层 X → 隐藏层 1 → 隐藏层 2 → ... → 输出层 ŷ

数据逐层流动,每层对上一层的输出做线性变换 + 激活。

反向传播

利用链式法则从输出层向输入层传播误差梯度,计算每个参数对损失的贡献,用于梯度下降更新权重。


激活函数

函数输出范围特点
Sigmoid(0, 1)梯度消失,用于二分类输出层
Tanh(-1, 1)零均值,深层仍会梯度消失
ReLU[0, +∞)计算简单,缓解梯度消失,隐藏层首选
Leaky ReLU(-∞, +∞)解决 ReLU 神经元死亡问题
GELU(-∞, +∞)Transformer 常用,平滑版 ReLU
Softmax(0,1) 且和为1多分类输出层

损失函数

任务损失函数说明
二分类二元交叉熵输出层用 Sigmoid
多分类交叉熵输出层用 Softmax
回归MSE均方误差
回归(鲁棒)Huber Loss对异常值不敏感

优化器

优化器特点
SGD单样本/小批量更新,噪声大
Momentum累积历史梯度,加速收敛减少震荡
AdaGrad自适应学习率,稀疏特征友好
RMSProp指数加权移动平均,解决 AdaGrad 衰减过快
AdamMomentum + RMSProp,目前最常用
import torch.optim as optim
 
optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-4)
 
# 学习率调度
scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, patience=5)

卷积神经网络(CNN)

专为图像设计,通过卷积核自动提取空间特征。

核心操作

操作作用
卷积层滑动卷积核提取局部特征,参数共享
池化层降采样,减少参数,增强平移不变性
全连接层特征展平后分类

架构演进

模型年份创新点
LeNet-51998第一个实用 CNN
AlexNet2012ReLU、Dropout、GPU 训练
VGGNet2014统一 3×3 卷积,网络更深
GoogLeNet2014Inception 多尺度特征融合
ResNet2015残差连接,解决深层退化
EfficientNet2019宽度/深度/分辨率复合缩放

残差连接(ResNet 核心)

跳跃连接让梯度直接回传,使 100+ 层网络可以稳定训练。

class ResBlock(nn.Module):
    def __init__(self, ch):
        super().__init__()
        self.net = nn.Sequential(
            nn.Conv2d(ch, ch, 3, padding=1), nn.BatchNorm2d(ch), nn.ReLU(),
            nn.Conv2d(ch, ch, 3, padding=1), nn.BatchNorm2d(ch),
        )
 
    def forward(self, x):
        return F.relu(self.net(x) + x)

循环神经网络(RNN)

处理序列数据,隐藏状态在时间步间传递:

梯度消失问题:长序列中早期时间步的梯度指数级衰减,信息难以传递。

LSTM

引入三个门控机制解决长期依赖:

作用
遗忘门决定丢弃细胞状态中的哪些信息
输入门决定写入哪些新信息
输出门决定输出细胞状态的哪个部分

GRU

LSTM 的简化版,只有重置门和更新门,参数更少,速度更快,效果相当。


Transformer

基于注意力机制,已取代 RNN 成为序列建模主流,也是所有大语言模型的基础架构。

自注意力(Self-Attention)

  • 每个位置可以直接关注序列中任意位置,不受距离限制
  • 缩放防止点积过大导致梯度消失

多头注意力

多个注意力头并行,各自关注不同的语义维度(语法、指代、语义关联等),结果拼接输出。

位置编码

无循环结构,需显式注入位置信息。常用方案:

方案说明
正弦/余弦编码原始 Transformer,固定编码
RoPE旋转位置编码,LLaMA 系列采用
ALiBi线性偏置,外推性更好

主流预训练模型

模型架构适用任务
BERTEncoder文本理解、分类、NER
GPT 系列Decoder文本生成、对话
T5Encoder-Decoder翻译、摘要、问答
LLaMA / QwenDecoder开源通用生成

正则化技术

Dropout

训练时随机置零部分神经元,防止过度依赖特定路径。

self.dropout = nn.Dropout(p=0.3)
x = self.dropout(x)  # 推理时自动关闭

Batch Normalization

对每层输出归一化,加速训练稳定梯度。适合 CNN、MLP。

Layer Normalization

对单个样本的特征维度归一化,适合 RNN 和 Transformer(对变长序列友好)。

数据增强

from torchvision import transforms
 
train_tf = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomCrop(32, padding=4),
    transforms.ColorJitter(brightness=0.2, contrast=0.2),
    transforms.ToTensor(),
    transforms.Normalize(mean, std),
])

迁移学习

策略做法适用场景
特征提取冻结预训练层,只训练分类头数据少且域相似
Fine-tune解冻部分/全部层,小学习率训练有一定数据量
全量训练预训练权重初始化后完整训练数据充足且域差异大
import torchvision.models as models
 
model = models.resnet50(pretrained=True)
for param in model.parameters():
    param.requires_grad = False          # 冻结全部
 
model.fc = nn.Linear(2048, num_classes)  # 替换分类头
optimizer = optim.Adam(model.fc.parameters(), lr=1e-3)

训练技巧

梯度裁剪

# 防止梯度爆炸,RNN 和大模型训练必备
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

混合精度训练

FP16 计算 + FP32 权重,显著节省显存、加速训练。

from torch.cuda.amp import autocast, GradScaler
 
scaler = GradScaler()
with autocast():
    loss = criterion(model(X), y)
 
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()

Early Stopping

best_loss, patience, counter = float('inf'), 10, 0
for epoch in range(max_epochs):
    val_loss = validate(model)
    if val_loss < best_loss:
        best_loss = val_loss
        torch.save(model.state_dict(), 'best.pt')
        counter = 0
    else:
        counter += 1
        if counter >= patience:
            break

PyTorch 完整示例

import torch, torch.nn as nn, torch.optim as optim
 
class MLP(nn.Module):
    def __init__(self, in_dim, hid_dim, out_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(in_dim, hid_dim),
            nn.BatchNorm1d(hid_dim),
            nn.ReLU(),
            nn.Dropout(0.3),
            nn.Linear(hid_dim, out_dim),
        )
    def forward(self, x):
        return self.net(x)
 
model     = MLP(784, 256, 10).to('cuda')
optimizer = optim.Adam(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss()
 
for epoch in range(50):
    model.train()
    for X, y in train_loader:
        X, y = X.to('cuda'), y.to('cuda')
        optimizer.zero_grad()
        criterion(model(X), y).backward()
        optimizer.step()

应用方向

方向代表任务常用架构
计算机视觉图像分类、目标检测、分割ResNet、YOLO、ViT
自然语言处理文本分类、翻译、问答BERT、GPT、T5
语音处理语音识别、合成、分离Wav2Vec、Whisper
生成模型图像生成、文本生成GAN、VAE、扩散模型
多模态图文理解与生成CLIP、GPT-4V

相关文档