知了AI学习平台Logo知了
← 返回AI教程

速查手册

速查手册

张量操作

API说明示例
torch.tensor(data)从列表/数组创建张量torch.tensor([[1,2],[3,4]])
torch.zeros / ones创建全零 / 全一张量torch.zeros(3, 4)
torch.randn标准正态分布随机张量torch.randn(2, 3)
.to(device)移动到 GPU / CPUx.to('cuda')
.view() / .reshape()改变形状(view 要求连续)x.view(-1, 28*28)
.squeeze() / .unsqueeze()去除 / 添加长度为 1 的维度x.unsqueeze(0)
.detach()脱离计算图(不追踪梯度)loss.detach().item()
torch.cat沿指定维度拼接张量torch.cat([a, b], dim=0)

nn.Module 自定义模型

python
import torch
import torch.nn as nn

class MyModel(nn.Module):
    def __init__(self, in_dim, hidden_dim, out_dim):
        super().__init__()
        self.fc1 = nn.Linear(in_dim, hidden_dim)
        self.relu = nn.ReLU()
        self.dropout = nn.Dropout(0.5)
        self.fc2 = nn.Linear(hidden_dim, out_dim)

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.dropout(x)
        x = self.fc2(x)
        return x

model = MyModel(784, 256, 10)
print(sum(p.numel() for p in model.parameters()))  # 参数量

标准训练循环

python
model = MyModel(784, 256, 10).to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

for epoch in range(num_epochs):
    model.train()                       # 训练模式(启用 Dropout/BN)
    for x, y in train_loader:
        x, y = x.to(device), y.to(device)
        optimizer.zero_grad()           # 清空梯度
        pred = model(x)                 # 前向传播
        loss = criterion(pred, y)       # 计算损失
        loss.backward()                 # 反向传播
        optimizer.step()                # 更新参数

    # 验证
    model.eval()                        # 推理模式
    with torch.no_grad():               # 不计算梯度
        correct = 0
        for x, y in val_loader:
            pred = model(x.to(device))
            correct += (pred.argmax(1) == y.to(device)).sum().item()
    print(f"Epoch {epoch}: val_acc={correct/val_total:.4f}")

数据处理 Dataset & DataLoader

python
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

# 自定义 Dataset
class MyDataset(Dataset):
    def __init__(self, data, labels, transform=None):
        self.data = data
        self.labels = labels
        self.transform = transform

    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        x, y = self.data[idx], self.labels[idx]
        if self.transform:
            x = self.transform(x)
        return x, y

# 常用 transforms
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.5], std=[0.5]),
    transforms.RandomHorizontalFlip(),   # 数据增强
])

# DataLoader
loader = DataLoader(
    MyDataset(data, labels, transform),
    batch_size=64, shuffle=True, num_workers=4
)

# 模型保存与加载
torch.save(model.state_dict(), 'model.pth')
model.load_state_dict(torch.load('model.pth'))
损失函数公式适用场景优缺点
MSE
均方误差
L = mean((y - ŷ)²)回归任务;对大误差敏感+ 凸函数、易优化
- 对离群点敏感
MAE
平均绝对误差
L = mean(|y - ŷ|)回归;数据含离群点+ 鲁棒抗离群
- 零点不可导、收敛慢
CrossEntropy
交叉熵
L = -Σ yᵢ log(ŷᵢ)分类任务(配合 Softmax)+ 梯度不饱和、收敛快
- 需注意数值稳定
BCE
二分类交叉熵
L = -[y log ŷ + (1-y)log(1-ŷ)]二分类、多标签分类+ 概率输出直观
- 标签需在 [0,1]
Hinge
合页损失
L = max(0, 1 - y·ŷ)SVM、最大间隔分类+ 追求最大间隔
- 非光滑、对噪声敏感
Focal LossFL = -α(1-ŷ)^γ · y log ŷ类别极不平衡(检测)+ 抑制易样本、聚焦难样本
- 需调 α、γ 超参
KL 散度L = Σ p log(p/q)分布逼近、知识蒸馏+ 衡量分布差异
- 非对称、非度量
Triplet LossL = max(0, d(a,p) - d(a,n) + m)度量学习、人脸识别+ 学到嵌入空间
- 样本采样困难

速记口诀:回归用 MSE(精度优先)或 MAE(鲁棒优先);多分类用 CrossEntropy + Softmax;二分类/多标签用 BCE;类别不平衡用 Focal Loss;分布对齐用 KL 散度。

优化器核心公式优点缺点适用场景
SGDθ ← θ - η·g简单;泛化好收敛慢;易震荡;需调 lr凸优化;CV 精调
Momentumv ← βv + g<br/>θ ← θ - η·v加速收敛;抑制震荡多一个超参 β稀疏梯度;陡峭曲面
AdaGradθ ← θ - η·g / √(Σg²)自适应 lr;适合稀疏特征lr 单调递减,后期停滞NLP 词嵌入;稀疏数据
RMSPropE ← βE + (1-β)g²<br/>θ ← θ - η·g/√E指数衰减解决 AdaGrad 停滞仍需手调 lr非平稳目标;RNN
Adamm,v ← βm+g, βv+g²<br/>θ ← θ - η·m̂/√v̂动量+自适应+偏差修正;开箱即用泛化有时不如 SGD默认首选;Transformer/LLM
AdamWAdam + 解耦权重衰减权重衰减更合理;泛化更好需调 weight_decay大模型训练标配

选型建议:快速实验 / 原型 → Adam(默认参数);追求极致精度 / 论文复现 → SGD + Momentum + 学习率调度;Transformer / LLM → AdamW + Warmup + Cosine Decay。

激活函数公式导数优点缺点
Sigmoidσ(x) = 1/(1+e⁻ˣ)σ(1-σ)输出 (0,1),适合概率梯度消失;非零中心
Tanhtanh(x) = (eˣ-e⁻ˣ)/(eˣ+e⁻ˣ)1 - tanh²(x)零中心;比 Sigmoid 梯度大仍有梯度消失
ReLUmax(0, x)1 if x>0 else 0计算快;缓解梯度消失;稀疏神经元死亡(负区梯度为 0)
LeakyReLUmax(αx, x), α=0.011 if x>0 else α解决死亡 ReLUα 需调参;效果提升有限
GELUx · Φ(x)Φ(x) + xφ(x)平滑可导;Transformer 标配计算稍贵(需 erf)
SwiGLUSwish(xW₁) ⊗ (xW₂)门控复合LLM FFN 标配;性能更强参数翻倍;计算量大
ELUx if x>0 else α(eˣ-1)1 if x>0 else αeˣ负区有梯度且零中心指数计算开销

选型建议:隐藏层默认 ReLU(快且稳);Transformer / GPT / BERT 用 GELU;现代 LLM(LLaMA 等)的 FFN 用 SwiGLU;输出层二分类用 Sigmoid,多分类用 Softmax。

方法机制施加位置适用场景注意点
L1 正则损失加 λΣ|w|,产生稀疏权重损失函数(权重上)特征选择;模型压缩不可导处需次梯度
L2 正则损失加 λΣw²,权重衰减损失函数(权重上)通用防过拟合;权重衰减不产生真正稀疏
Dropout训练时随机置零 p 比例神经元全连接层之间CNN/MLP 防过拟合推理时关闭;需缩放
BatchNorm按 batch 维度归一化 + 可学习缩放卷积/全连接后、激活前CV 图像;大 batch 训练依赖 batch size;推理需运行均值
LayerNorm按特征维度归一化(单样本)每个样本特征维归一化Transformer / RNN / LLM不依赖 batch;序列首选
RMSNorm只用均方根归一化,去均值同 LayerNorm 位置LLaMA 等现代 LLM比 LN 快约 7-10%
权重衰减每步参数 ×(1-ηλ),等价 L2(SGD)优化器参数AdamW 用解耦版本Adam 上 L2 ≠ 权重衰减

速记:BN 看批次(图像/CV),LN 看特征(序列/NLP/LLM);Dropout 用于全连接;L1 选特征,L2 通用防过拟合;AdamW 用解耦权重衰减替代 L2。

注意力类型机制说明Q / K / V 来源复杂度适用场景
Self-Attention
自注意力
序列内每个位置关注所有位置Q=K=V 来自同一序列O(n²·d)Transformer 编码器;BERT
Masked
Self-Attention
因果掩码,只看过去位置Q=K=V 同序列(上三角掩码)O(n²·d)GPT 解码器;自回归生成
Multi-Head
多头注意力
并行 h 个头,各关注不同子空间每头独立投影 Q/K/VO(n²·d)所有 Transformer 标配
Cross-Attention
交叉注意力
一个序列关注另一个序列Q 来自解码器,K/V 来自编码器O(n·m·d)Seq2Seq 解码器;多模态对齐
TriAttention
三重注意力
跨维度(通道+空间)三路注意力Q/K/V 跨通道与空间维度O(n²·d)视觉任务;细粒度特征建模
Sparse Attention
稀疏注意力
只关注局部窗口或固定模式同 Self-Attention,但掩码稀疏O(n·log n)长序列;Longformer/BigBird
Grouped-Query
GQA
多 Query 共享一组 K/V 头Q 有 h 头,K/V 有 g 组O(n²·d) 计算不变LLM 推理降 KV 缓存;LLaMA-2
Flash Attention分块计算,减少 HBM 读写同标准注意力O(n²) 计算,IO 大减加速训练;显存友好

核心公式:Attention(Q,K,V) = softmax(QKᵀ/√dₖ)·V。自注意力 Q=K=V 同源;交叉注意力 Q 与 K/V 不同源;多头把 d 维拆成 h 个 d/h 子空间并行计算后拼接。

超参数符号典型值含义调整建议
模型维度d_model512 / 1024 / 4096每个 token 的表示维度越大容量越大,参数按 d² 增长
注意力头数num_heads (h)8 / 16 / 32并行注意力模式数须满足 d_model = h × d_k;d_k 常 64
编码/解码层数num_layers (N)6 / 12 / 24 / 32处理遍数 / 网络深度越深理解越深,但训练更难
FFN 维度d_ff4 × d_model前馈网络内部升维宽度通常 4 倍 d_model;SwiGLU 用 ⅔ 缩放
Dropoutp_drop0.1 / 0.3随机置零比例模型越大可适当调大(0.1→0.3)
每头维度d_k64 / 128单头注意力宽度经验值 64 最稳;先定 d_k 再推 d_model
学习率lr1e-4 ~ 5e-4AdamW 初始学习率配 Warmup + Cosine Decay
Batch Sizebatch32 ~ 4M tokens每次更新 token 数大 batch 配大 lr;用梯度累积
模型d_modelheadslayersd_ff参数量
Transformer-Base512862048~65M
BERT-Base76812123072~110M
GPT-2 (小)76812123072~124M
LLaMA-2 7B4096323211008~7B
技术原理加速效果内存影响适用场景
KV Cache缓存已计算的 K/V,避免重复计算解码步计算从 O(n²) 降到 O(n)显存随序列长度线性增长所有自回归推理标配
PagedAttention分页管理 KV Cache,类似虚拟内存吞吐提升 2-4 倍碎片减少,利用率近 100%vLLM;高并发服务
量化 (Quant)FP16→INT8/INT4 降低精度显存减半/四分之一;速度提升显存大幅降低边缘部署;显存受限
GPTQ / AWQ训练后量化(权重量化)INT4 几乎无损,2-3 倍加速权重显存降 75%离线量化部署
投机解码
Speculative
小模型草拟,大模型并行验证2-3 倍加速(接受率高时)额外小模型显存低延迟对话;接受率高的场景
Flash Attention分块计算减少 HBM 读写训练 2-4 倍加速显存 O(n) 而非 O(n²)训练与长序列推理
Continuous
Batching
动态拼接不同请求的 tokenGPU 利用率大幅提升需管理变长序列在线服务;多用户并发
KV Cache 量化缓存 K/V 量化到 INT8/FP8支持更长上下文缓存显存减 50%+长上下文场景

部署组合建议:服务端高并发 → vLLM(PagedAttention + Continuous Batching + Flash Attention);显存受限 → AWQ/GPTQ INT4 量化;极致低延迟 → 投机解码;长上下文 → KV Cache 量化 + 稀疏注意力。

使用提示

  • 点击各卡片标题可展开 / 收起,便于聚焦关注内容
  • 表格支持横向滚动,移动端可左右滑动查看完整对比
  • 想深入了解某个主题,可返回 AI 教程查看对应章节的完整讲解