跳转至

深度学习概览

本页目标:建立统一术语与工程视角,避免“只会调包不会定位问题”。

1. 什么是深度学习

深度学习(Deep Learning)是机器学习的一个分支。核心是:

  • 用参数化函数(通常是神经网络)近似复杂映射关系;
  • 通过数据驱动学习参数;
  • 使用梯度下降及其变体优化目标函数。

形式化地,给定输入 \(x\)、参数 \(\theta\)、模型 \(f_\theta\):

\[ y = f_\theta(x) \]

训练过程是在数据集 \(\mathcal{D}\) 上最小化经验风险:

\[ \min_\theta \frac{1}{N}\sum_{i=1}^{N}\mathcal{L}(f_\theta(x_i), y_i) \]

2. 深度学习工作流

  1. 问题定义:任务类型(分类/回归/生成/检索/多模态)。
  2. 数据准备:采集、清洗、标注、切分、版本化。
  3. 建模:基线模型、损失函数、优化器、评估指标。
  4. 训练:监控训练曲线、调参、正则化、早停。
  5. 评估:离线指标 + 误差分析 + 线上指标。
  6. 部署:模型导出、服务化、监控、回滚。

3. 最小可运行训练示例(PyTorch)

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, TensorDataset

# 1) 造一个二分类玩具数据集
x = torch.randn(1000, 20)
true_w = torch.randn(20, 1)
logits = x @ true_w + 0.1 * torch.randn(1000, 1)
y = (torch.sigmoid(logits) > 0.5).float()

dataset = TensorDataset(x, y)
loader = DataLoader(dataset, batch_size=64, shuffle=True)

# 2) 定义模型
model = nn.Sequential(
    nn.Linear(20, 64),
    nn.ReLU(),
    nn.Linear(64, 1)
)

criterion = nn.BCEWithLogitsLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

# 3) 训练循环
for epoch in range(10):
    model.train()
    epoch_loss = 0.0
    for xb, yb in loader:
        optimizer.zero_grad()
        pred = model(xb)
        loss = criterion(pred, yb)
        loss.backward()
        optimizer.step()
        epoch_loss += loss.item() * xb.size(0)

    print(f"epoch={epoch:02d} loss={epoch_loss/len(dataset):.4f}")

4. 初学者最常见误区

  • 把“训练集效果好”当成“模型有效”。
  • 只看单一指标,不做分组误差分析。
  • 数据泄漏(如把未来信息泄露到训练特征)。
  • 不做可复现管理(随机种子、依赖版本、数据快照)。

5. Wiki 不应该有的内容(本项目约定)

  • 营销文案式表述:只说“很强大”但没有定义与证据。
  • 无来源的性能结论:必须标注实验设置或引用来源。
  • 不可运行伪代码堆砌:示例代码应最小可运行。
  • 只给结论不给边界条件:必须说明适用场景和限制。