深度学习概览
深度学习发展历程
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],梯度消失 |
| Tanh | tanh(x) | 输出[-1,1],梯度消失 |
| ReLU | max(0,x) | 简单,不梯度消失 |
| Leaky ReLU | max(0.01x, x) | 避免死亡神经元 |
| GELU | 0.5x(1+tanh(√(2/π)(x+0.044x³))) | Transformer 常用 |
| Softmax | eˣⁱ/Σeˣʲ | 多分类输出 |
损失函数
python
# 分类
CrossEntropyLoss() # 多分类
BCELoss() # 二分类
BCEWithLogitsLoss() # Sigmoid + BCE
# 回归
MSELoss() # 均方误差
L1Loss() / SmoothL1Loss() # 绝对误差 / Huber
# 生成模型
AdversarialLoss() # GAN 对抗损失
PerceptualLoss() # VGG 感知损失优化器
| 优化器 | 公式 | 适用场景 |
|---|---|---|
| SGD | 动量更新 | 传统,推荐学习率衰减 |
| Adam | 自适应学习率 | 默认首选,收敛快 |
| AdamW | Adam + 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)下一步
- 学习 CNN 卷积神经网络
- 学习 RNN 循环神经网络
- 学习 Transformer