深度学习框架
掌握 PyTorch 和 TensorFlow 的基本使用,理解动态图与静态图的区别。
---
Day 40:交叉验证与调优
昨天我们学了:
- K 折交叉验证:更稳定的评估方法
- 超参数调优:网格搜索、随机搜索、贝叶斯优化
- 数据泄露的防范
今天进入模块4,深入深度学习的工程实践。
---
一、主流框架对比
| 框架 | 特点 | 适用场景 |
|---|---|---|
| PyTorch | 动态图,Pythonic | 研究、原型 |
| TensorFlow | 静态图,部署友好 | 生产环境 |
| JAX | 函数式,自动微分 | 前沿研究 |
二、PyTorch 基础
import torch
import torch.nn as nn
# 定义模型
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 256)
self.fc2 = nn.Linear(256, 10)
def forward(self, x):
x = torch.relu(self.fc1(x))
return self.fc2(x)
# 训练
model = Net()
optimizer = torch.optim.Adam(model.parameters())
loss_fn = nn.CrossEntropyLoss()
三、GPU 加速
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
---
📌 课程进度:Day 41 / 90 | 模块4:深度学习进阶
🎓 明天预告:Day 42 卷积神经网络(CNN) —— 图像识别的利器!
---
卷积神经网络(CNN)
理解卷积、池化操作,以及 CNN 如何自动提取图像特征。
---
一、为什么需要 CNN?
全连接网络处理图像的问题:
- 参数量爆炸:1000×1000 图像 → 100 万个输入
- 没有空间结构:打乱像素顺序不影响结果
二、卷积操作
核心思想:用一个小窗口(卷积核)在图像上滑动,提取局部特征。
卷积核(3×3)
[1 0 -1]
[1 0 -1]
[1 0 -1] ← 垂直边缘检测
💡 类比:就像用放大镜在图片上扫描,每个位置只看一小块区域。
三、池化(Pooling)
最大池化:取窗口内的最大值,降低分辨率。
作用:
- 减少计算量
- 提供平移不变性
四、CNN 架构示例
输入图像 → [卷积 → ReLU → 池化] × 3 → 全连接 → 输出
---
📌 课程进度:Day 42 / 90
🎓 明天预告:Day 43 CNN架构演进 —— AlexNet到ResNet!
---
CNN架构演进
了解从 AlexNet 到 ResNet 的 CNN 架构演进。
---
一、里程碑架构
| 年份 | 模型 | 核心创新 |
|---|---|---|
| 2012 | AlexNet | ReLU + Dropout + GPU |
| 2014 | VGGNet | 小卷积核(3×3)堆叠 |
| 2015 | ResNet | 残差连接,可训练 152 层 |
| 2016 | DenseNet | 密集连接 |
| 2017 | SENet | 通道注意力 |
二、ResNet 的残差连接
问题:深层网络梯度消失,训练困难。
解决:跳过连接(Skip Connection)
output = F(x) + x
💡 效果:可以训练 1000+ 层的网络。
---
📌 课程进度:Day 43 / 90
🎓 明天预告:Day 44 RNN与LSTM —— 处理序列数据!
---
RNN与LSTM
理解 RNN 的序列建模能力和 LSTM 解决长程依赖的方法。
---
一、RNN 的核心思想
循环:隐藏状态随时间传递,记住之前的信息。
h_t = tanh(W·[h_{t-1}, x_t] + b)
💡 类比:就像一个有记忆的人,每读一个新词,就更新对整句话的理解。
二、LSTM(长短期记忆网络)
核心创新:用"门控"控制信息的流动。
遗忘门:决定忘记多少过去的信息
输入门:决定吸收多少新信息
输出门:决定输出什么
💡 类比:LSTM 就像一个整理衣柜的人——遗忘门决定扔掉什么,输入门决定新增什么。
三、RNN 的局限
- 串行计算:无法并行,训练慢
- 长程依赖:即使 LSTM,也很难记住 100 步之前的信息
- 梯度消失/爆炸
💡 这也是为什么 Transformer 取代了 RNN
---
📌 课程进度:Day 44 / 90
🎓 明天预告:Day 45 Seq2Seq与注意力 —— 机器翻译的基石!
---
Seq2Seq与注意力
理解 Seq2Seq 架构和注意力机制在机器翻译中的应用。
---
一、Seq2Seq 架构
Encoder(RNN) → 上下文向量 → Decoder(RNN)
[我 喜欢 猫] [context] [I like cats]
问题:上下文向量是固定长度的,信息瓶颈。
二、注意力机制
解决:Decoder 每一步都"看"Encoder 的所有输出,决定关注哪里。
Decoder 第 t 步 → 计算与所有 Encoder 输出的注意力权重
→ 加权求和得到上下文
→ 生成输出
💡 这是 Transformer 注意力的前身
---
📌 课程进度:Day 45 / 90
🎓 明天预告:Day 46 生成对抗网络(GAN) —— 伪造大师的诞生!
---
生成对抗网络(GAN)
理解 GAN 的对抗训练原理和典型应用。
---
一、GAN 的核心思想
两个网络互相博弈:
- 生成器(Generator):伪造数据,试图骗过判别器
- 判别器(Discriminator):鉴别真假,试图不被骗
💡 类比:就像假币制造者和警察的博弈——制造者越做越真,警察越练越精。
二、训练过程
1. 训练判别器:真数据标 1,假数据标 0
2. 训练生成器:生成数据,让判别器判为 1
3. 重复直到平衡
三、典型应用
- 图像生成:人脸、风景
- 风格迁移:照片变油画
- 超分辨率:低清变高清
- 数据增强:生成训练数据
---
📌 课程进度:Day 46 / 90
🎓 明天预告:Day 47 变分自编码器(VAE) —— 可控的生成模型!
---
变分自编码器(VAE)
理解 VAE 的隐空间概念和与 GAN 的区别。
---
一、自编码器
输入 → Encoder → 隐向量 → Decoder → 重建输入
目标:学习数据的压缩表示。
二、VAE 的改进
核心创新:隐向量不是确定的,而是服从一个概率分布。
Encoder 输出:均值 μ 和方差 σ
采样:z = μ + σ · ε(ε ~ N(0,1))
损失函数: `` L = 重建损失 + KL散度(让分布接近标准正态) ``
三、VAE vs GAN
| 特性 | VAE | GAN |
|---|---|---|
| 训练稳定性 | 稳定 | 较难 |
| 生成质量 | 较模糊 | 更锐利 |
| 隐空间 | 结构化,可插值 | 难以控制 |
| 用途 | 特征学习、可控生成 | 高质量生成 |
---
📌 课程进度:Day 47 / 90
🎓 明天预告:Day 48 扩散模型(Diffusion) —— DALL-E、Stable Diffusion 的底层!
---
扩散模型(Diffusion)
理解扩散模型的原理——从噪声中"雕刻"出图像。
---
一、核心思想
前向过程:给图像逐步加噪声,直到变成纯噪声。
反向过程:学习如何从噪声中逐步恢复图像。
💡 类比:就像雕塑家从一块大理石中雕刻出雕像——扩散模型从噪声中"雕刻"出图像。
二、训练与采样
训练: ```
- 随机选一张训练图像
- 随机选一个时间步 t
- 加 t 步噪声得到 x_t
- 训练模型预测添加的噪声
**采样(生成)**:
- 从纯噪声开始
- 迭代去噪(通常 20-1000 步)
- 得到生成图像
#### 三、条件生成
通过文本提示引导生成:
"一只宇航员在太空骑马的油画" → Text Encoder → 条件 → 扩散模型 → 图像 ```
代表:Stable Diffusion、DALL-E 3、Midjourney
---
📌 课程进度:Day 48 / 90
🎓 明天预告:Day 49 多模态模型 —— 图文音视频统一的 AI!
---
多模态模型
理解多模态 AI 的原理和典型架构。
---
一、什么是多模态?
让 AI 同时理解多种信息形式:文本、图像、音频、视频。
二、典型架构
图像/音频/视频 → 编码器 → 统一表示空间
↓
文本 ←→ 解码器 ←→ 联合表示
三、代表模型
| 模型 | 能力 |
|---|---|
| CLIP | 图文对齐(OpenAI) |
| GPT-4V | 图文理解 |
| Gemini | 图文音视 |
| LLaVA | 图文对话(开源) |
四、CLIP 的核心思想
对比学习:让配对的图文靠近,不配对的远离。
图像编码器(ViT) 文本编码器(Transformer)
↓ ↓
图像向量 ←——对比学习——→ 文本向量
---
📌 课程进度:Day 49 / 90
🎓 明天预告:Day 50 视觉Transformer(ViT) —— Transformer 进军视觉领域!
---
视觉Transformer(ViT)
理解 ViT 如何将图像当作"词序列"处理。
---
一、核心思想
把图像切分成小块(patch),每个 patch 当作一个"词"。
图像(224×224)→ 切分成 16×16 的 patch(共 196 个)
→ 每个 patch 展平 + 线性投影
→ [CLS] token + 位置编码
→ Transformer Encoder
二、ViT vs CNN
| 特性 | ViT | CNN |
|---|---|---|
| 归纳偏置 | 少(需更多数据) | 局部性、平移不变性 |
| 全局感受野 | 第一层就有 | 需多层堆叠 |
| 数据需求 | 大(ImageNet 不够) | 较小 |
| 可扩展性 | 更好 | 较差 |
三、混合架构
Swin Transformer:窗口注意力 + 层级结构
- 解决 ViT 计算量大的问题
- 结合 CNN 的局部性和 Transformer 的全局性
---
📌 课程进度:Day 50 / 90
🎓 明天预告:Day 51 优化器详解 —— Adam、SGD、学习率调度!
---
优化器详解
深入理解各种优化器的原理和适用场景。
---
一、优化器演进路线
SGD → Momentum → AdaGrad → RMSprop → Adam → AdamW
二、Adam 的原理
结合 Momentum 和 RMSprop:
- 一阶矩估计:动量(梯度方向)
- 二阶矩估计:自适应学习率(梯度大小)
# Adam 参数更新
m = β₁·m + (1-β₁)·g # 动量
v = β₂·v + (1-β₂)·g² # 二阶矩
m_hat = m / (1-β₁^t) # 偏差修正
v_hat = v / (1-β₂^t)
w = w - α·m_hat / (√v_hat + ε)
三、AdamW
改进:将权重衰减(L2 正则)从梯度计算中分离。
💡 实践:现代 Transformer 训练默认使用 AdamW。
---
📌 课程进度:Day 51 / 90
🎓 明天预告:Day 52 学习率调度 —— 让训练更稳定、收敛更快!
---
学习率调度
掌握各种学习率调度策略及其效果。
---
一、为什么需要调度?
- 初期:学习率高,快速接近最优
- 后期:学习率低,精细调整
二、常用策略
| 策略 | 描述 |
|---|---|
| Step Decay | 每 N 轮降低一次 |
| Exponential | 指数衰减 |
| Cosine Annealing | 余弦曲线衰减 |
| Warmup | 前 N 步线性增大 |
| One Cycle | 先增后降 |
三、Warmup 的重要性
问题:训练初期梯度不稳定,大学习率导致发散。
解决:前几千步从小学习率线性增加到目标值。
学习率
↑ ___________
│ / \
│ / \
│ / \
│/ \
└──────────────────→ 步数
Warmup Cosine
---
📌 课程进度:Day 52 / 90
🎓 明天预告:Day 53 归一化技术 —— BatchNorm、LayerNorm!
---
归一化技术
理解归一化技术如何加速训练和稳定网络。
---
一、为什么需要归一化?
- 内部协变量偏移:每层输入分布变化,训练困难
- 梯度问题:大输入导致梯度消失/爆炸
二、BatchNorm
# 对一个 batch 的数据归一化
μ = mean(x) # 批次均值
σ = std(x) # 批次标准差
x_norm = (x - μ) / (σ + ε)
y = γ·x_norm + β # 可学习的缩放和平移
优点:
- 加速训练(可用更大学习率)
- 轻微正则化效果
缺点:
- 依赖 batch size
- 训练和推理行为不一致
三、LayerNorm
Transformer 的选择:对每个样本的所有特征归一化。
# 不依赖 batch,适合序列模型
μ = mean(x, dim=-1)
σ = std(x, dim=-1)
四、RMSNorm
简化版 LayerNorm:去掉均值中心化,只归一化方差。
💡 LLaMA 使用 RMSNorm,计算更快。
---
📌 课程进度:Day 53 / 90
🎓 明天预告:Day 54 正则化进阶 —— Dropout、Early Stopping、数据增强!
---
正则化进阶
掌握 Dropout、Early Stopping 和数据增强等高级正则化技术。
---
一、Dropout 深入
训练时:以概率 p 随机关闭神经元。
推理时:所有神经元激活,输出乘以 (1-p)。
💡 为什么有效:强迫网络学习冗余表示,防止共适应。
二、Early Stopping
核心思想:在验证集性能开始下降时停止训练。
训练集损失 ↓↓↓↓↓
验证集损失 ↓↓↓↑ ← 在这里停止!
三、数据增强
| 模态 | 增强方法 |
|---|---|
| 图像 | 翻转、旋转、裁剪、颜色抖动 |
| 文本 | 同义词替换、回译、随机删除 |
| 音频 | 变速、加噪、混响 |
---
📌 课程进度:Day 54 / 90
🎓 明天预告:Day 55 模型压缩 —— 知识蒸馏、剪枝、量化!
---
模型压缩
掌握知识蒸馏、剪枝和量化三大压缩技术。
---
一、为什么需要压缩?
- 部署到手机/IoT:内存和算力有限
- 降低推理成本:减少服务器资源
- 降低延迟:实时应用需要快速响应
二、知识蒸馏(Knowledge Distillation)
核心思想:让小模型学习大模型的"暗知识"(soft target)。
# 软标签 vs 硬标签
硬标签:[0, 1, 0] # 只告诉正确类别
软标签:[0.1, 0.8, 0.1] # 还告诉相似度信息
💡 暗知识:大模型输出中,错误类别的相对概率也包含信息。
三、剪枝(Pruning)
核心思想:去掉不重要的权重或结构。
| 粒度 | 方法 |
|---|---|
| 权重剪枝 | 把接近 0 的权重设为 0 |
| 结构化剪枝 | 剪掉整个卷积核/注意力头 |
四、量化(Quantization)
核心思想:用更少的比特表示权重。
| 精度 | 比特数 | 效果 |
|---|---|---|
| FP32 | 32 | 标准 |
| FP16 | 16 | 速度翻倍 |
| INT8 | 8 | 速度 4x |
| INT4 | 4 | 速度 8x,质量下降 |
---
📌 课程进度:Day 55 / 90 ✅ 模块4完成
🎓 下一步:模块5:大模型应用与工程 —— API调用、Prompt工程、RAG、Agent!
---