记录每天的学习内容2026.3.2--深度学习基础复习(AI总结)与ai问答全部对话在github:https://github.com/101per/learning.git
A 局部最优梯度=0,Loss 较高动量、随机初始化、更深网络 B 梯度消失梯度≈0,Loss 高(平台区)ReLU、残差连接、批归一化 C 鞍点某些方向梯度为 0 动量、Adam 优化器 D 全局最优梯度=0,Loss。Adam+正确正则泛化好,收敛快计算略多大模型,Transformer,推荐默认。动量+自适应快速收敛,易用泛化略差默认首选,NLP,快速实验。:降采样操作,减少特征图尺寸,增强
深度学习核心概念完整知识文档
目录
- 卷积操作、池化、Softmax
- 卷积核的可学习性
- 模型的本质构成
- 训练时的类别固定问题
- 反向传播与参数更新
- 前向传播与反向传播的关系
- 梯度的本质与目标
- 卷积到全连接的转换
- 优化器详解
- 训练的随机性与应对策略
一、卷积操作、池化、Softmax
1.1 卷积操作(Convolution)
功能:特征提取的核心机制,通过滑动窗口(卷积核)在输入数据上扫描,学习局部特征模式(边缘、纹理、形状等)。
核心特性:
- 局部连接:每个神经元只连接输入的局部区域(感受野)
- 权值共享:同一个卷积核在整个输入上共享参数
- 平移不变性:无论特征出现在哪里,都能被检测到
数学公式: $$(I * K)(i,j) = \sum{m}\sum{n} I(i+m, j+n) \cdot K(m,n)$$
1.2 池化(Pooling)
功能:降采样操作,减少特征图尺寸,增强平移不变性,降低计算量。
| 类型 | 操作 | 保留信息 |
|---|---|---|
| 最大池化 | 取窗口内最大值 | 最强激活值(最显著特征) |
| 平均池化 | 取窗口内平均值 | 整体平均信息 |
1.3 Softmax
功能:将任意实数向量转换为概率分布(输出值在 0-1 之间,总和为 1)。
数学公式: $$\text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}$$
二、卷积核的可学习性
2.1 核心结论
卷积核数值不是固定的,通过训练从随机初始化自动收敛到最优值。
2.2 固定 vs 可学习对比
特性手工设计(如 Sobel
| 特性 | 手工设计(如Sobel算子) | 深度学习学习 |
|---|---|---|
| 设计方式 | 人工数学推导 | 数据驱动自动优化 |
| 灵活性 | 单一功能 | 任务自适应 |
| 数值 | 永远不变 | 训练后收敛到最优值 |
算子)深度学习学习设计方式人工数学推导数据驱动自动优化灵活性单一功能任务自适应数值永远不变训练后收敛到最优值
2.3 层次化特征学习
- 第一层:边缘、颜色梯度
- 第二层:纹理、简单形状
- 第三层:物体部件
- 第四层:完整物体概念
三、模型的本质构成
3.1 训练好的模型 = 权重参数 + 结构定义
PyTorch 保存的模型文件内容:
{
『conv1.weight』: tensor([...]), # 32 个 3×3×3 卷积核
『conv1.bias』: tensor([...]), # 32 个偏置
『conv2.weight』: tensor([...]), # 64 个卷积核
『fc.weight』: tensor([...]), # 全连接权重矩阵
『fc.bias』: tensor([...]), # 全连接偏置
}
3.2 模型大小示例
- ResNet-50:约 2500 万个参数 → 97MB
- 本质上就是约 2500 万个浮点数
四、训练时的类别固定问题
4.1 核心结论
训练时必须确定类别数量,因为全连接层输出维度硬编码,Softmax 需要固定长度输入。
4.2 增加新类别的解决方案
| 方案 | 做法 | 适用场景 |
|---|---|---|
| 重新训练 | 修改输出层,用所有类别数据训练 | 数据充足 |
| 微调 | 冻结前面层,只训练最后一层 | 数据较少 |
| 零样本学习(CLIP) | 学习图像-文本对齐,类别作为输入 | 开放词汇 |
五、反向传播与参数更新
5.1 完整训练流程
输入图像
↓
[前向传播] → 预测结果
↓
计算 Loss(预测 vs 真实标签)
↓
[反向传播] → 计算梯度 ∂Loss/∂W(每个权重的贡献度)
↓
[优化器] → 更新权重 W = W - lr × gradient
5.2 反向传播的核心:链式法则
$$\frac{\partial Loss}{\partial W_1} = \frac{\partial Loss}{\partial output} \times \frac{\partial output}{\partial W_2} \times \frac{\partial W_2}{\partial W_1}$$
5.3 参数更新示例
W_old = 0.5
gradient = -0.6 # 负梯度表示增加 W 会减少 Loss
learning_rate = 0.1
W_new = 0.5 - 0.1 × (-0.6) = 0.56 # 权重增大
六、前向传播与反向传播的关系
6.1 关键区分
a
| 前向传播 | 反向传播 | |
|---|---|---|
| 本质 | 计算过程 | 学习过程 |
| 目的 | 得到预测结果 | 计算如何改进预测 |
| 是否修改权重 | ❌ 不修改 | ✅ 修改 |
| 类比 | 学生做题 | 对答案+分析错因+改正 |
前向传播反向传播本质计算过程学习过程目的得到预测结果计算如何改进预测是否修改权重❌ 不修改✅ 修改类比学生做题对答案+分析错因+改正
6.2 训练 vs 测试对比
场景前向传播目的后续操作权重变化训练计算 Loss
| 场景 | 前向传播目的 | 后续操作 | 权重变化 |
|---|---|---|---|
| 训练 | 计算Loss | 反向传播+更新 | ✅ 改变 |
| 验证/测试 | 评估性能 | 只统计指标 | ❌ 不变 |
| 推理 | 得到预测 | 无 | ❌ 不变 |
反向传播+更新✅ 改变验证/测试评估性能只统计指标❌ 不变推理得到预测无❌ 不变
七、梯度的本质与目标
7.1 梯度的含义
梯度 ∂Loss/∂W = Loss 对权重的敏感度
梯度值含义行动+5.0W 增加会大幅增大 Loss 大幅减小 W+0.01W 对 Loss 影响很小微调 W0W 已在最优位置不调整-3.0W 减小会增大 Loss 大幅增加
| 梯度值 | 含义 | 行动 |
|---|---|---|
| +5.0 | W增加会大幅增大Loss | 大幅减小W |
| +0.01 | W对Loss影响很小 | 微调W |
| 0 | W已在最优位置 | 不调整 |
| -3.0 | W减小会增大Loss | 大幅增加W |
W
7.2 目标澄清
直接目标:让 Loss 变小(预测更准确) 手段:用 梯度 指导权重更新方向 副产品:收敛时 梯度自动趋于 0
八、卷积到全连接的转换
8.1 转换方式:展平(Flatten)
卷积层输出 [batch, 256, 7, 7] → 展平 → [batch, 12544] → 全连接层
8.2 全连接层的真正目的
不是「为了方便 Softmax」,而是:
- 全局特征整合:把局部特征(边缘、纹理、部件)组合成语义概念
- 分类决策:计算输入特征与每个类别模板的匹配程度
8.3 现代改进:全局平均池化(GAP)
# 传统:展平 [256,7,7] → [12544] → FC(12544,1000),参数 1250 万
# GAP:对每个 7×7 取平均 → [256] → FC(256,1000),参数 25 万(减少 98%)
gap_output = conv_output.mean(dim=[2,3]) # [batch, 256]
九、优化器详解
9.1 优化器演进路线
SGD (基础版)
↓
SGD + Momentum (加惯性)
↓
AdaGrad (自适应学习率)
↓
RMSprop (改进 AdaGrad)
↓
Adam (Momentum + RMSprop,目前最常用)
↓
AdamW (Adam + 正确权重衰减)
9.2 各优化器详解
SGD(随机梯度下降)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 公式:W = W - lr * gradient
# 缺点:梯度小则更新慢,易困在局部最优
SGD + Momentum(动量)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# 公式:
velocity = 0.9 * velocity + gradient # 累积历史速度
W = W - lr * velocity # 用速度更新
# 效果:惯性帮助冲过浅坑,逃离局部最优
Adam(Adaptive Moment Estimation)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999))
# 同时做两件事:
m = beta1 * m + (1-beta1) * gradient # 一阶矩(动量,带惯性)
v = beta2 * v + (1-beta2) * gradient**2 # 二阶矩(方差,自适应 lr)
# 修正偏差后更新
W = W - lr * m_hat / (sqrt(v_hat) + epsilon)
优点:快速收敛,自适应不同参数,默认首选
AdamW(推荐版本)
optimizer = torch.optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
# 修正了 Adam 中权重衰减(L2 正则化)的实现错误
# 大模型、Transformer 训练的标准选择
9.3 优化器对比总结
优化器核心机制优点缺点适用场景 SGD 纯梯度简单,泛化好慢,易困住大规模数据,配合好的初始化 SGD+Momentum 梯度+惯性逃离局部最优需调 momentum 计算机视觉经典选择 Adam 动量+自适应快速收敛,易用泛化略差默认首选,NLP,快速实验
| 优化器 | 核心机制 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| SGD | 纯梯度 | 简单,泛化好 | 慢,易困住 | 大规模数据,配合好的初始化 |
| SGD+Momentum | 梯度+惯性 | 逃离局部最优 | 需调momentum | 计算机视觉经典选择 |
| Adam | 动量+自适应 | 快速收敛,易用 | 泛化略差 | 默认首选,NLP,快速实验 |
| AdamW | Adam+正确正则 | 泛化好,收敛快 | 计算略多 | 大模型,Transformer,推荐默认 |
AdamWAdam+正确正则泛化好,收敛快计算略多大模型,Transformer,推荐默认
9.4 学习率调度
# 1. 阶梯衰减
scheduler = StepLR(optimizer, step_size=30, gamma=0.1)
# 2. 余弦退火
scheduler = CosineAnnealingLR(optimizer, T_max=100)
# 3. 根据验证集调整
scheduler = ReduceLROnPlateau(optimizer, patience=5, factor=0.5)
# 4. 预热+余弦(Transformer 标配)
# 初期小步热身,后期余弦下降
十、训练的随机性与应对策略
10.1 梯度为 0 的三种情况
Loss
↑ ╭─╮ ╭────╮ ╭──────────╮
│ / \ / \ / \
│ / \ vs / \________ vs / ╲___
│ / ╲____ / 平台区(梯度≈0) / 真正的最优解
│_____/ ╲____ / 但 Loss 仍很高 / (我们想要这里)
│ ↑局部最优(陷阱) ↑梯度消失(坏事) ↑全局最优(好事)
情况名称特征解决 A 局部最优梯度=0,Loss 较高动量、随机初始化、更深网络 B 梯度消失梯度≈0,Loss 高(平台区)ReLU、残差连接、批归一化 C 鞍点某些方向梯度为 0 动量、Adam 优化器 D 全局最优梯度=0,Loss
| 情况 | 名称 | 特征 | 解决 |
|---|---|---|---|
| A | 局部最优 | 梯度=0,Loss较高 | 动量、随机初始化、更深网络 |
| B | 梯度消失 | 梯度≈0,Loss高(平台区) | ReLU、残差连接、批归一化 |
| C | 鞍点 | 某些方向梯度为0 | 动量、Adam优化器 |
| D | 全局最优 | 梯度=0,Loss最低 | 无需解决 |
最低无需解决
10.2 训练的随机性来源
来源影响权重初始化不同起点,可能落入不同局部最优数据打乱(Shuffle)每个 batch 不同,梯度估计有噪声 Dropout 随机丢弃神经元,路径不同数据增强随机裁剪、翻转,输入不同 CUDA 非确定性 GPU
| 来源 | 影响 |
|---|---|
| 权重初始化 | 不同起点,可能落入不同局部最优 |
| 数据打乱(Shuffle) | 每个batch不同,梯度估计有噪声 |
| Dropout | 随机丢弃神经元,路径不同 |
| 数据增强 | 随机裁剪、翻转,输入不同 |
| CUDA非确定性 | GPU计算顺序的浮点误差 |
计算顺序的浮点误差
10.3 应对策略
策略 1:多次训练,取最好
best_acc = 0
for seed in [42, 123, 999, 2024, 777]:
set_seed(seed)
model = train()
acc = evaluate(model)
if acc > best_acc:
best_acc = acc
best_model = model
策略 2:使用更好的优化器
# 快速实验
optimizer = torch.optim.Adam(model.parameters(), lr=3e-4)
# 正式训练(推荐)
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)
策略 3:预训练权重
# 站在巨人肩膀上出发
model = resnet50(pretrained=True) # 用 ImageNet 预训练权重
策略 4:集成学习
models = [train(seed=s) for s in range(5)]
prediction = average([m(x) for m in models]) # 投票或平均,减少方差
核心总结
- 卷积核是可学习的:从随机初始化通过训练自动收敛到能检测有用特征的数值
- 模型就是权重:训练好的模型 ≈ 数百万到数亿个浮点数(卷积核+全连接权重)
- 训练必须固定类别:全连接层输出维度硬编码,增加新类别需要重新训练或微调
- 反向传播是学习的核心:不只是算 Loss,而是计算每个权重如何调整才能减少 Loss
- 梯度是工具,Loss 是目标:梯度指导更新方向,最终目标是让 Loss 最小化
- 全连接层目的是全局整合:把局部特征组合成语义概念,不是单纯为了 Softmax
- 优化器决定收敛质量:SGD 是走路,Momentum 是跑步,Adam 是开车,AdamW 是开跑车
- 训练具有随机性:初始化、数据顺序等都导致不同结果,需多次实验或预训练保证稳定性
文档生成时间:2026-03-02 基于完整对话内容整理
更多推荐



所有评论(0)