Skip to content

深度学习概览

深度学习发展历程

2012: AlexNet        - CNN 重回舞台,ImageNet 突破
2014: VGGNet         - 深网络,小滤波器
2014: GAN            - 生成对抗网络
2015: ResNet        - 残差连接,解决梯度消失
2015: LSTM/GRU      - 序列建模成熟
2017: Transformer   - Attention 机制,提出
2018: BERT          - 预训练+微调范式
2019: GPT-2         - 大语言模型
2020: GPT-3         - 1750亿参数
2021: ViT           - Transformer 引入视觉
2022: ChatGPT       - LLM 产品化
2023: LLaMA         - 开源 LLM
2023: GPT-4         - 多模态
2024: Sora          - 文生视频

深度学习模型分类

深度学习模型
├── CNN (卷积神经网络)
│   ├── 图像分类: LeNet → AlexNet → VGG → ResNet → EfficientNet
│   ├── 目标检测: R-CNN → YOLO → SSD
│   └── 语义分割: FCN → U-Net → DeepLab

├── RNN (循环神经网络)
│   ├── 基础RNN
│   ├── LSTM
│   └── GRU

├── Transformer
│   ├── NLP: BERT → GPT → T5
│   └── Vision: ViT → DeiT → Swin

├── 生成模型
│   ├── GAN
│   ├── VAE
│   └── Diffusion (DDPM → Stable Diffusion)

└── 图神经网络
    └── GCN → GAT → GraphSAGE

核心组件

激活函数

函数公式特点
Sigmoidσ(x) = 1/(1+e⁻ˣ)输出[0,1],梯度消失
Tanhtanh(x)输出[-1,1],梯度消失
ReLUmax(0,x)简单,不梯度消失
Leaky ReLUmax(0.01x, x)避免死亡神经元
GELU0.5x(1+tanh(√(2/π)(x+0.044x³)))Transformer 常用
Softmaxeˣⁱ/Σeˣʲ多分类输出

损失函数

python
# 分类
CrossEntropyLoss()           # 多分类
BCELoss()                    # 二分类
BCEWithLogitsLoss()          # Sigmoid + BCE

# 回归
MSELoss()                    # 均方误差
L1Loss() / SmoothL1Loss()    # 绝对误差 / Huber

# 生成模型
AdversarialLoss()           # GAN 对抗损失
PerceptualLoss()             # VGG 感知损失

优化器

优化器公式适用场景
SGD动量更新传统,推荐学习率衰减
Adam自适应学习率默认首选,收敛快
AdamWAdam + L2正则LLM 推荐
RMSprop自适应学习率RNN
LAMB层自适应BERT 大 batch

训练技巧

学习率调度

python
# StepLR
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)

# CosineAnnealing
scheduler = CosineAnnealingLR(optimizer, T_max=50)

# Warmup + Cosine
scheduler = get_cosine_schedule_with_warmup(
    optimizer, num_warmup_steps=500, num_training_steps=10000
)

正则化

python
# Dropout
model = nn.Sequential(
    nn.Linear(784, 256),
    nn.ReLU(),
    nn.Dropout(0.5),  # 训练时随机丢弃50%
    nn.Linear(256, 10)
)

# L2 正则(Weight Decay)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-4)

# Batch Normalization
model = nn.Sequential(
    nn.Conv2d(3, 64, 3, padding=1),
    nn.BatchNorm2d(64),
    nn.ReLU()
)

数据增强

python
# 图像
transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(15),
    transforms.ColorJitter(brightness=0.2),
    transforms.RandomResizedCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean, std)
])

# Mixup
def mixup_data(x, y):
    lam = np.random.beta(0.5, 0.5)
    mixed_x = lam * x + (1 - lam) * x[shuffle]
    return mixed_x, y, y[shuffle], lam

# CutMix
def cutmix_data(x, y):
    # 随机裁剪一块区域粘贴

梯度裁剪

python
# 防止梯度爆炸
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

# 训练循环
for batch in dataloader:
    loss.backward()
    torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
    optimizer.step()

评估指标

python
# 分类
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 检测
# mAP (mean Average Precision)
# IoU (Intersection over Union)

# 分割
# IoU / Dice Coefficient
# pixel_accuracy

# 生成
# FID (Fréchet Inception Distance)
# IS (Inception Score)

下一步

基于 MIT 许可发布