第二部分概述
本课程包含超过30小时的视频内容,我们将从零开始实现令人惊叹的 Stable Diffusion 算法!正是这个 “杀手级应用”,让 互联网为之疯狂,也让媒体惊呼 “你可能再也无法相信网上看到的东西了”。
我们与 Stability.ai 和 Hugging Face(Diffusers 库的创建者)的专家密切合作,确保课程涵盖最新的技术。本课程还涵盖了 Stable Diffusion 发布后发表的论文——因此它实际上超越了 Stable Diffusion 本身!我们还将讲解如何阅读研究论文,并通过在课程中学习和实现多篇论文来实践这项技能。
Stable Diffusion 以及一般的扩散方法,因多种原因是一个很棒的学习目标。首先,当然,你可以用这些算法创造出令人惊叹的东西!要想真正将这项技术提升到新的水平,并创造出前所未有的东西,你需要深入理解其底层原理。有了这种理解,你可以设计自己的损失函数、初始化方法、多模型混合等,创造出全新的、前所未有的应用。同样重要的是:这是一个很棒的学习目标,因为现代深度学习中几乎所有关键技术都汇聚在这些方法中。对比学习、Transformer 模型、自动编码器、CLIP 嵌入、潜在变量、U-Net、ResNet 等等都参与了单张图像的生成。
为了最大程度地利用本课程,你应该是一名具备相当信心的深度学习实践者。如果你已经完成了 fast.ai 的 实用深度学习 课程,那么你就准备好了!如果你没有完成那个课程,但能熟练地在 Python 中从零开始构建 SGD 训练循环,在 Kaggle 竞赛中具有竞争力,能够将现代 NLP 和计算机视觉算法应用于实际问题,并且熟悉使用 PyTorch 和 fastai,那么你就准备好开始本课程了。(如果你不确定,我们强烈建议你从《实用深度学习》开始学起。)
内容摘要
在本课程中,我们将探索扩散方法,例如去噪扩散概率模型 (DDPM) 和去噪扩散隐式模型 (DDIM)。我们将亲手实现无条件和条件扩散模型,实验不同的采样器,并深入研究文本反演 (Textual Inversion) 和 Dreambooth 等最近的技巧。
在此过程中,我们将涵盖深度学习的基本主题,例如神经网络架构、数据增强方法和各种损失函数。我们将从零开始构建自己的模型,例如多层感知机 (MLP)、ResNet 和 U-Net,同时实验自动编码器和 Transformer 等生成架构。
在整个课程中,我们将使用 PyTorch 来实现我们的模型,并将创建我们自己的深度学习框架 miniai。我们将掌握 Python 概念,如迭代器、生成器和装饰器,以保持代码的整洁和高效。我们还将探索深度学习优化器,如随机梯度下降 (SGD) 加速方法、学习率退火,并学习如何实验不同初始化器、批量大小和学习率的影响。当然,我们还将使用方便的工具,如 Python 调试器 (pdb) 和 nbdev,以便从 Jupyter Notebook 构建 Python 模块。
最后,我们将触及张量、微积分和伪随机数生成等基本概念,为我们的探索提供坚实的基础。我们将把这些概念应用于机器学习技术,如均值漂移聚类和卷积神经网络 (CNN),并将学习如何使用 Weights and Biases (W&B) 进行实验跟踪。
我们还将使用 NVIDIA 的 apex 库和 Hugging Face 的 Accelerate 库来处理混合精度训练。我们将研究各种类型的归一化,如层归一化 (Layer Normalization) 和批量归一化 (Batch Normalization)。到课程结束时,你将对扩散模型有深入的理解,并掌握实现尖端深度学习技术的技能。
涵盖主题
以下是你在本课程中将详细学习并从零开始构建的所有内容列表。(当我们说“从零开始”时,我们的意思是除了 Python 及其标准库外,你不会依赖其他任何东西。)
- 扩散基础
- 去噪扩散概率模型 (DDPM)
- 前向和反向过程
- 使用神经网络实现噪声预测模型
- 可视化不同时间步长的带噪图像
- 去噪扩散隐式模型 (DDIM)
- DDPM/DDIM 改进
- 替代噪声时间表
- 预处理
- 不同采样器的实现和性能
- 欧拉采样器
- 祖先欧拉采样器
- Heun 方法
- LMS 采样器
- 实现无条件稳定扩散模型
- 创建条件稳定扩散模型
- 逆问题
- 文本反演
- Dreambooth
- 去噪扩散概率模型 (DDPM)
- Hugging Face 的 Diffusers 库
- 预训练管道
- 图像到图像管道
- 引导比例
- 负面提示词
- 回调函数
- 使用 Hugging Face 数据集
- 深度学习优化器
- 随机梯度下降 (SGD) 加速方法
- 动量
- RMSProp
- Adam
- 学习率退火
- PyTorch 学习率调度器
- 余弦退火
- OneCycleLR
- PyTorch 学习率调度器
- 实验批量大小和学习率
- 使用 PyTorch 优化器
- 随机梯度下降 (SGD) 加速方法
- Python 概念
- 组织和简化代码
- Python 中的迭代器和生成器
- 魔术方法 (Dunder methods)
- Python 数据模型
- Python 调试器 (pdb)
- 使用 nbdev 从 Jupyter Notebook 创建 Python 模块
- try-except 块
- 装饰器
- getattr
**kwargs
和委托
- 基础概念
- 张量
- 使用张量的线性分类器
- 使用 Python 和 Numba 进行矩阵乘法
- 将 APL 与 PyTorch 进行比较
- Frobenius 范数
- 深度学习和机器学习代码中的广播机制
- 矩阵乘法
- 爱因斯坦求和约定和
torch.einsum
- GPU 加速和 CUDA
- Numba
- 微积分
- 导数和无穷小
- 有限差分
- 解析导数
- 损失函数
- 对比损失函数
- 感知损失
log_softmax()
函数和交叉熵损失
- 伪随机数生成
- Wickman-Hill 算法
- 深度学习中的随机状态
- 张量
- 神经网络架构
- 多层感知机 (MLP) 实现
- 梯度和导数
- 链式法则和反向传播
- 使用 PyTorch 计算导数
- ReLU 和线性函数类
- ResNet
- 生成架构
- 自动编码器
- 卷积自动编码器
- 变分自动编码器
- U-Net
- 实验 U-Net 中的交叉连接
- CLIP 文本编码器和图像编码器
- Transformer
- 自注意力机制和多头注意力机制
- Rearrange 函数
- 时间嵌入和正弦嵌入
- 创建超分辨率 U-Net 模型
- 逐步解冻预训练网络
- 风格迁移
- 内容损失
- 格拉姆矩阵 (Gram Matrix)
- 神经元细胞自动机
- 循环填充
- 梯度归一化
- 自动编码器
- 深度学习技术
- 数据增强技术
- 随机擦除
- TrivialAugment
- 测试时增强
- 使用 Dropout 改进模型性能
- 使用测试时 Dropout 测量模型置信度
- 数据增强技术
- PyTorch
- PyTorch 的
nn.Module
和nn.Sequential
- 创建自定义 PyTorch 模块
- 实现优化器、DataLoader 和 Dataset
- PyTorch Hook
- PyTorch 的
- Learner 框架
- 构建灵活的训练框架
- 回调函数和异常 (CancelFitException, CancelEpochException, CancelBatchException)
- 指标和 MetricsCB 回调
- DeviceCB 回调
- 使用上下文管理器重构代码
- set_seed 函数
- Callback 类和 TrainLearner 子类
- HooksCallback 和 ActivationStats
- 实验批量大小和学习率
- torcheval 库
- 机器学习技术和工具
- 均值漂移聚类
- 高斯核
- 范数
- Log-Sum-Exp 技巧
- 卷积神经网络 (CNN)
- 卷积和核
- Im2col 技术
- CNN 中的填充和步长
- 感受野
- 从零开始构建 CNN
- 使用 Weights and Biases (W&B) 进行实验跟踪
- Fréchet 起始距离 (FID) 指标
- 核起始距离 (KID) 指标
- 混合精度训练
- HuggingFace 的 Accelerate 库
- 整理函数
- 初始化和归一化
- 激活直方图
- Glorot (Xavier) 初始化
- 方差、标准差和协方差
- 通用 ReLU 激活函数
- 逐层序列单位方差 (LSUV)
- 层归一化 (Layer Normalization) 和批量归一化 (Batch Normalization)
- 实例归一化 (Instance Norm) 和组归一化 (Group Norm)
(“涵盖主题”列表是根据每节课程的主题列表拼接而成,并使用了 GPT 4 及以下提示词:“输入文本包含一份 markdown 列表,列出了多节深度学习和稳定扩散课程中讨论的主题。每节课程的主题列表被拼接到了这份列表中,因此可能包含重复项(或近似重复项)并且组织不当。请创建一个有条理的 markdown 列表,将相似主题分组(使用层次结构或 markdown 列表项),并合并重复或非常相似的主题。”“内容摘要”部分则取自“涵盖主题”列表,并使用了 GPT 4 提示词:“使用 3-4 段 informal 的散文风格(模仿 Jeremy Howard 的风格)总结以下 markdown 课程大纲。不要按照大纲中主题的相同顺序,而是将其安排成最基础和关键的主题放在前面。”)