今天我们发布了新课程,从深度学习基础到 Stable Diffusion,该课程是程序员实用深度学习的第二部分。
现在就开始吧!
在这个包含超过 30 小时视频内容的课程中,我们将从头实现令人惊叹的 Stable Diffusion 算法!这就是那个让 互联网为之疯狂 的 杀手级应用,并导致媒体称 “你可能再也不会相信你在网上看到的东西了”。
我们与 Stability.ai 和 Hugging Face(Diffusers 库的创建者)的专家密切合作,确保课程严谨地涵盖了最新的技术。课程包含了 Stable Diffusion 发布后出现的论文内容,因此实际上甚至超越了 Stable Diffusion 本身包含的技术!我们还讲解了如何阅读研究论文,并在整个课程中通过学习和实现多篇论文来练习这项技能。感谢所有帮助构建本课程的杰出人士。我特别要感谢 Tanishq Mathew Abraham (Stability.ai) 和 Jonathan Whitaker (即将出版的 O’Reilly Diffusion 书籍的合著者) 帮助我讲授了部分课程,以及 Pedro Cuenca (Hugging Face) 在幕后做出的巨大贡献。还要感谢 Kat Crowson 为我们提供了她在整个课程中大量使用的 k-diffusion 库,并回答了我们所有的问题,以及 Francisco Mussari 为大部分课程制作了文字记录。
Stable Diffusion 以及一般的扩散方法,是极好的学习目标,原因有很多。首先,当然,你可以用这些算法创造出令人惊叹的东西!要真正将这项技术提升到新的水平,并创造出前所未有的东西,你需要真正深入理解其内部工作原理。有了这种理解,你可以设计自己的损失函数、初始化方法、多模型混合等等,从而创造出从未出现过的全新应用。同样重要的是:它是一个极好的学习目标,因为现代深度学习中几乎所有关键技术都在这些方法中汇聚。对比学习、Transformer 模型、自编码器、CLIP 嵌入、潜在变量、U-Nets、ResNets 等等,许多技术都参与到创建一张图像的过程中。
为了最大程度地从本课程中获益,你应该是一名具备一定信心的深度学习实践者。如果你已经完成了 fast.ai 的 程序员实用深度学习 课程,那么你就可以开始了!如果你没有完成该课程,但对从头使用 Python 构建 SGD 训练循环、在 Kaggle 竞赛中具有竞争力、使用现代 NLP 和计算机视觉算法解决实际问题以及使用 PyTorch 和 fastai 感到熟悉,那么你就可以开始本课程了。(如果你不确定,我们强烈建议先从 程序员实用深度学习 开始。)
现在就开始吧!
内容概要
在本课程中,我们将探索扩散方法,例如去噪扩散概率模型(DDPM)和去噪扩散隐式模型(DDIM)。我们将亲自动手从头实现无条件和有条件扩散模型,构建并实验不同的采样器,并深入研究文本反演(textual inversion)和 Dreambooth 等最新技巧。我们还将学习并实现 Karras 等人于 2022 年发表的论文 Elucidating the Design Space of Diffusion-Based Generative Models,该论文使用 预处理 来确保模型的输入和目标缩放到单位方差。Karras 模型根据输入中存在的噪声量,预测干净图像和噪声的插值版本。
在此过程中,我们将涵盖重要的深度学习主题,包括各种神经网络架构、数据增强方法(包括效果惊人但被严重低估的 TrivialAugment 策略),以及各种损失函数,包括感知损失和风格损失。我们将从头构建自己的模型,例如多层感知机(MLPs)、ResNets 和 Unets,同时实验自编码器和 Transformer 等生成式架构。
在整个课程中,我们将使用 PyTorch 实现模型(但首先会用纯 Python 实现所有必要的部分!),并会创建我们自己的深度学习框架,命名为 miniai
。我们将掌握 Python 概念,如迭代器、生成器和装饰器,以保持代码的整洁和高效。我们还将探讨 AdamW 和 RMSProp 等深度学习优化器、学习率退火,并学习如何实验不同初始化器、批次大小和学习率的影响。当然,我们还将利用实用的工具,如 Python 调试器 (pdb) 和用于从 Jupyter notebook 构建 Python 模块的 nbdev。
最后,我们将涉及张量、微积分和伪随机数生成等基础概念,为我们的探索提供坚实的基础。我们将把这些概念应用于均值漂移聚类和卷积神经网络(CNN)等机器学习技术,并了解如何使用 Weights and Biases (W&B) 进行跟踪。
我们还将使用 NVIDIA 的 apex 库和 Hugging Face 的 Accelerate 库来处理混合精度训练。我们将研究各种归一化类型,如层归一化(Layer Normalization)和批归一化(Batch Normalization)。课程结束时,你将对扩散模型有深入的理解,并具备实现尖端深度学习技术的技能。
现在就开始吧!
Tanishq 的想法
以下是 Stability.ai 的 Tanishq Mathew Abraham 对本课程的看法,他协助教授了部分课程
fast.ai 第二部分课程是独一无二的。我认为这门课程的独特之处在于,它教你如何从头构建深度学习模型,同时深入探索扩散模型领域的尖端研究。没有其他课程能引导你阅读扩散领域最先进的论文(有时论文刚发表几周),并构建清晰易懂的实现。我们甚至在课程中探索了一些新的研究方向,希望这门课程能让其他人进一步探索他们自己的想法。
如果你对从头构建最先进深度学习模型的进阶课程感兴趣,和/或你对最先进的扩散模型如何工作以及如何构建它们感兴趣,那么这门课程就是为你准备的!即使作为协助开发本课程的人员,我也发现这是一次了不起的学习体验,希望对你来说也是如此!