图像模型

微调的核心步骤​

  1. 预训练模型选择与加载
  • 选择与目标任务匹配的成熟模型(如ResNet、ViT等视觉模型)
  • 加载预训练权重,冻结底部特征提取层(保留通用视觉特征)

示例:在PyTorch中加载ResNet并冻结底层

1
2
3
4
import torchvision
model = torchvision.models.resnet50(pretrained=True)
for param in model.parameters():
    param.requires_grad = False  # 冻结参数
  1. ​模型结构调整
  • 替换顶部全连接层:修改输出节点数与新任务类别匹配
  • 添加适配层:针对小数据集可插入中间过渡层(如256维全连接层)

示例:替换ResNet分类头

1
model.fc = torch.nn.Linear(model.fc.in_features, num_classes)
  1. 数据工程优化
  • 数据增强:旋转/裁剪/翻转(如文档3中随机水平翻转和缩放)
  • 标准化处理:对齐ImageNet均值方差或领域特定统计量
  • 特殊处理:文档4提到的扩散模型需添加噪声后去噪训练
  1. ​训练参数配置
  • 分层学习率设置:顶部新层用较高学习率(如0.01),底部冻结层用低学习率(如0.001)
  • 正则化策略:Dropout(0.5)、权重衰减(1e-4)
  • 训练轮次控制:文档2建议通过验证集早停防止过拟合
  1. ​评估与迭代
  • 指标监控:准确率、混淆矩阵、特征可视化(Grad-CAM)
  • 领域自适应:文档5提到的调整模型适应医学/工业图像
  • 模型压缩:知识蒸馏优化部署效率

完整的过程

步骤1:数据准备与预处理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import torch
from torchvision import datasets, transforms

# 数据增强与标准化(参考文档[1][3])
transform = transforms.Compose([
    transforms.Resize(256),  # 调整输入尺寸
    transforms.CenterCrop(224),  # 中心裁剪
    transforms.ToTensor(),  # 转为张量
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # ImageNet标准化
])

# 加载数据集(文档[1][3]示例)
train_dataset = datasets.OxfordIIITPet(
    root="./data",
    split="trainval",
    download=True,
    transform=transform
)
train_loader = torch.utils.data.DataLoader(
    train_dataset,
    batch_size=32,
    shuffle=True
)

步骤2:加载预训练模型

1
2
3
4
5
from torchvision import models

# 加载ResNet50预训练模型(文档[1]实现)
model = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V1)
num_classes = len(train_dataset.classes)  # 获取分类数(如宠物数据集为37类)

步骤3:模型结构调整

1
2
3
4
5
6
7
# 冻结除最后一层外的参数(文档[1][3]方案)
for name, param in model.named_parameters():
    if "layer4" not in name and "fc" not in name:
        param.requires_grad = False

# 修改分类头(文档[1][3]核心逻辑)
model.fc = torch.nn.Linear(model.fc.in_features, num_classes)

步骤4:训练配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import torch.optim as optim
import torch.nn as nn

# 分层学习率设置(文档[1]优化策略)
optimizer = optim.Adam([
    {"params": model.fc.parameters(), "lr": 1e-3},
    {"params": model.layer4.parameters(), "lr": 1e-5}
])

# 损失函数
criterion = nn.CrossEntropyLoss()

步骤5:训练循环

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

for epoch in range(10):
    model.train()
    for inputs, labels in train_loader:
        inputs, labels = inputs.to(device), labels.to(device)
        
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
    
    # 验证代码(参考文档[3]评估方法)
    model.eval()
    correct = 0
    with torch.no_grad():
        for inputs, labels in train_loader:
            inputs, labels = inputs.to(device), labels.to(device)
            outputs = model(inputs)
            _, preds = torch.max(outputs, 1)
            correct += (preds == labels).sum().item()
    print(f"Epoch {epoch} Acc: {correct/len(train_dataset):.2f}")

步骤6:模型测试(单张图片推理)​

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from PIL import Image

# 加载测试图片
img = Image.open("test_cat.jpg").convert("RGB")
input_tensor = transform(img).unsqueeze(0).to(device)

# 推理预测
model.eval()
with torch.no_grad():
    output = model(input_tensor)
    pred_class = torch.argmax(output).item()
    print(f"预测类别: {train_dataset.classes[pred_class]}")

执行

1
2
3
4
5
# 环境配置
pip install torch torchvision pillow

# 运行训练
python fine_tune.py --epochs 10 --batch_size 32

视频

音频

文本

多模态

问题??

梯度下降是什么? 导数是什么?给简单例子

经典模型

Transformer

自注意力机制的原理 ​- QKV 向量生成

  • 每个输入元素(如单词)通过三个独立的线性变换生成三个向量:

如 ​- 查询向量(Query)​:表示当前元素的“提问”,用于查找相关信息 ​- 键向量(Key)​:存储序列元素的“索引”,供 Query 匹配 ​- 值向量(Value)​:包含元素的实际语义内容

公式:

  • Q = X * W_Q
  • K = X * W_K
  • V = X * W_V

​注意力得分计算

  • 通过 Query 与所有 Key 的点积计算相似度,再通过缩放和归一化生成权重:

注意力得分 = softmax( (Q·K^T) / √d_k )
-(d_k 为 Key 的维度,用于防止梯度爆炸)

例子:我爱打球
输入向量示例​(简化版):

  • “我” -> [0.9, 0.4, 0.2, 0.1]
  • “爱” -> [0.4, 0.8, 0.3, 0.2]
  • “打” -> [0.2, 0.3, 0.6, 0.4]
  • “球” -> [0.1, 0.2, 0.4, 0.9]

​计算注意力权重​(以“爱”为当前词):
计算“爱”的 Query 与所有 Key 的点积:

  • Q_爱·K_我 = 0.4 * 0.9 + 0.8 * 0.4 + 0.3 * 0.2 + 0.2 * 0.1 = 0.76
  • Q_爱·K_爱 = 0.4 * 0.4 + 0.8 * 0.8 + 0.3 * 0.3 + 0.2 * 0.2 = 0.89
  • …(其他词同理)

缩放并 softmax 归一化:

  • 除以√d_k,d_k=4):​0.76 / 2 = 0.38

​**“爱"与"爱”**:

  • [0.4×0.5, 0.8×0.7, 0.3×0.3, 0.2×0.1] → 0.2 + 0.56 + 0.09 + 0.02 = 0.87
  • 缩放后:0.87 / 2 ≈ 0.44

​**“爱"与"打”**:

  • [0.4×0.3, 0.8×0.2, 0.3×0.6, 0.2×0.4] → 0.12 + 0.16 + 0.18 + 0.08 = 0.54
  • 缩放后:0.54 / 2 = 0.27

​**“爱"与"球”**:

  • [0.4×0.1, 0.8×0.2, 0.3×0.4, 0.2×0.9] → 0.04 + 0.16 + 0.12 + 0.18 = 0.5
  • 缩放后:0.5 / 2 = 0.25

将四个得分转换为概率分布:

  • 原始得分:[0.38(我), 0.44(爱), 0.27(打), 0.25(球)]
  • Softmax后:
  • exp(0.38)=1.46, exp(0.44)=1.55, exp(0.27)=1.31, exp(0.25)=1.28
  • 总和:1.46 + 1.55 + 1.31 + 1.28 ≈ 5.6
  • 权重:
  • [1.46/5.6≈0.26, 1.55/5.6≈0.28, 1.31/5.6≈0.23, 1.28/5.6≈0.23]

最终权重:

  • “爱"与"我”:26%
  • “爱"与"爱”:28%
  • “爱"与"打”:23%
  • “爱"与"球”:23%

概念定义与角色分工
1、Query(查询)​

  • ​功能:代表当前需要处理的词或位置的“提问需求”,用于在上下文中检索相关信息。
  • ​类比:类似搜索引擎中的用户输入关键词,如搜索“北京天气”时,Query 是用户的问题。
  • ​技术逻辑:通过线性变换(权重矩阵)将输入向量转换为 Query 向量,其维度与 Key 一致。
  • ​示例:句子“我爱打球”中,“爱”的 Query 向量会聚焦于“谁爱”和“爱什么”的语义关联

2、​Key(键)​

  • 功能:作为上下文中所有词的“索引标签”,用于与 Query 匹配相关性。
  • ​类比:类似数据库的索引字段,如文档标题、关键词等,用于快速匹配查询需求。
  • ​技术逻辑:通过线性变换(权重矩阵 W )生成 Key 向量,与 Query 点积计算相似度。
  • ​示例:在“我爱打球”中,“打”的 Key 可能编码动作特征,与“球”的 Key 形成动宾关联

3、​Value(值)​

  • ​功能:存储实际语义信息,根据注意力权重加权后传递到后续层。
  • ​类比:类似搜索结果的具体内容,如点击链接后展示的网页正文。
  • ​技术逻辑:通过线性变换(权重矩阵 W )生成 Value 向量,其维度通常与 Query/Key 不同。 ​- 示例:当“爱”的 Query 与“我”的 Key 匹配后,其 Value 向量会携带主语“我”的语义信息

DeepSeek 对 MHA 的改进

1、 DeepSeek 的多头注意力机制
基础架构:

  • DeepSeek 的基本模型仍基于 Transformer 框架,其核心组件包含多头注意力机制。
  • 与传统 MHA 类似,输入序列通过查询(Query)、键(Key)、值(Value)矩阵的分头计算,捕捉序列中不同位置的特征关联

​MLA 的创新:

  • DeepSeek 的 ​多头潜在注意力(MLA)​ 通过以下优化提升效率:
  • 低秩键值压缩:将键(Key)和值(Value)矩阵压缩为低维潜在向量,减少 KV 缓存需求(降幅达 93.3%);
  • ​解耦旋转位置编码(RoPE)​:优化位置编码的计算和存储效率,降低长序列处理的内存开销; ​- 动态任务滤波器(DTF)​:在多任务学习中,动态调整不同任务的注意力权重。

DeepSeek 的注意力头数因模型版本而异,具体设计如下:

模型版本 注意力头数 说明
R1-7B 8-16 轻量化设计,面向移动端和边缘计算场景
R1-14B/32B 16-32 引入混合专家系统,支持长上下文(128K Token)和多任务学习
R1-671B 64+ 超大规模模型,通过分布式架构支持多模态推理,头数显著增加以增强表达能力

MHA 和 MLA 对比

维度 传统多头注意力 (MHA) DeepSeek多头潜在注意力 (MLA)
KV缓存效率 线性增长,内存占用高 通过低秩压缩减少 93.3% 的缓存需求
位置编码 标准 RoPE,计算开销大 解耦 RoPE,优化计算和存储效率
适用场景 通用 NLP 任务 支持多任务、长序列、多模态场景

DeepSeek的其他优化

架构层面

  1. 多头潜在注意力(MLA)
  2. 混合专家系统(MoE)

训练效率优化

  • 多词元预测(Multi-Token Prediction)
    • 通过同时预测多个后续词元(token),减少序列生成的迭代次数,训练速度提升 2.8 倍
  • ​组相对策略优化(GRPO)
    • 摒弃传统监督微调(SFT),直接通过强化学习激发模型推理能力,减少人工标注依赖,数据成本降低 40%。
    • 引入多阶段迭代训练,交替进行监督微调与强化学习,提升任务泛化性

推理加速优化

  • ​算法-框架-硬件协同设计
    • 定制化 CUDA 内核优化矩阵乘法和注意力计算,单卡推理吞吐量提升 3.2 倍。 -动态量化技术(8-bit 浮点量化)实现边缘设备部署,移动端推理延迟低于 200ms。
  • ​极简 KV 缓存
    • 通过潜在注意力机制,单个 token 的键值缓存从传统 2L×d 压缩至 L×d latent128K 长文本处理显存占用减少 93.3%

其他

RNN 循环神经网络
卷积神经网络(Convolutional Neural Network,CNN)
LSTM(Long Short-Term Memory)长短期记忆网络

总结

机器学习开发的几个步骤

  • 数据处理:主要包括数据清理、数据预处理、数据增强等。总之,就是构建让模型使用的训练集与验证集
  • 模型训练:确定网络结构,确定损失函数与设置优化方法
  • 模型评估:使用各种评估指标来评估模型的好坏

辅助工具

可视化监控

  • tensorboard
  • Visdom

辅助工具

  • Jupyter:面向交互式开发的通用环境
  • Torchvision:专注于计算机视觉的专用工具库

分布式训练

  • 单机并行化
  • 多机多卡

参考