模型微调步骤
图像模型
微调的核心步骤
- 预训练模型选择与加载
- 选择与目标任务匹配的成熟模型(如ResNet、ViT等视觉模型)
- 加载预训练权重,冻结底部特征提取层(保留通用视觉特征)
示例:在PyTorch中加载ResNet并冻结底层
|
|
- 模型结构调整
- 替换顶部全连接层:修改输出节点数与新任务类别匹配
- 添加适配层:针对小数据集可插入中间过渡层(如256维全连接层)
示例:替换ResNet分类头
|
|
- 数据工程优化
- 数据增强:旋转/裁剪/翻转(如文档3中随机水平翻转和缩放)
- 标准化处理:对齐ImageNet均值方差或领域特定统计量
- 特殊处理:文档4提到的扩散模型需添加噪声后去噪训练
- 训练参数配置
- 分层学习率设置:顶部新层用较高学习率(如0.01),底部冻结层用低学习率(如0.001)
- 正则化策略:Dropout(0.5)、权重衰减(1e-4)
- 训练轮次控制:文档2建议通过验证集早停防止过拟合
- 评估与迭代
- 指标监控:准确率、混淆矩阵、特征可视化(Grad-CAM)
- 领域自适应:文档5提到的调整模型适应医学/工业图像
- 模型压缩:知识蒸馏优化部署效率
完整的过程
步骤1:数据准备与预处理
|
|
步骤2:加载预训练模型
|
|
步骤3:模型结构调整
|
|
步骤4:训练配置
|
|
步骤5:训练循环
|
|
步骤6:模型测试(单张图片推理)
|
|
执行
|
|
视频
音频
文本
多模态
问题??
梯度下降是什么? 导数是什么?给简单例子
经典模型
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的其他优化
架构层面
- 多头潜在注意力(MLA)
- 混合专家系统(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:专注于计算机视觉的专用工具库
分布式训练
- 单机并行化
- 多机多卡