第二部分概述

本课程包含超过30小时的视频内容,我们将从零开始实现令人惊叹的 Stable Diffusion 算法!正是这个 “杀手级应用”,让 互联网为之疯狂,也让媒体惊呼 “你可能再也无法相信网上看到的东西了”

我们与 Stability.ai 和 Hugging Face(Diffusers 库的创建者)的专家密切合作,确保课程涵盖最新的技术。本课程还涵盖了 Stable Diffusion 发布后发表的论文——因此它实际上超越了 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
  • Hugging Face 的 Diffusers 库
    • 预训练管道
    • 图像到图像管道
    • 引导比例
    • 负面提示词
    • 回调函数
    • 使用 Hugging Face 数据集
  • 深度学习优化器
    • 随机梯度下降 (SGD) 加速方法
      • 动量
      • RMSProp
      • Adam
    • 学习率退火
      • PyTorch 学习率调度器
        • 余弦退火
        • OneCycleLR
    • 实验批量大小和学习率
    • 使用 PyTorch 优化器
  • 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.Modulenn.Sequential
      • 创建自定义 PyTorch 模块
      • 实现优化器、DataLoader 和 Dataset
    • PyTorch Hook
  • 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 课程大纲。不要按照大纲中主题的相同顺序,而是将其安排成最基础和关键的主题放在前面。”)