创新的扩散:生成式学习的最新进展
文章与趋势
生成式学习将走向何方?我们将去往何处?
前些年,生成式领域的核心是用于文本生成的大型语言Transformer模型。尽管文本与视觉方向的Transformer模型仍是众多研究者和AI公司的关注重点,但扩散模型近来已然抢占了它们的风头。
随着扩散模型(完整论文:https://arxiv.org/abs/2006.11239 )的出现,生成式学习领域近来掀起了一场重大变革。大约一年半前,也就是2021年5月11日,我们初次见识到扩散模型的表现超越了生成对抗网络(GAN)。而如今,扩散模型已然无处不在。
什么是扩散模型?
从本质上讲,扩散模型属于生成式模型。在训练过程中,模型会分多个步骤向输入数据中逐步添加随机噪声,对数据进行扰动。随后,模型通过逆向过程学习如何反转噪声、对输出进行去噪,从而还原出原始数据。在推理阶段,扩散模型便可以基于噪声输入生成全新的数据。

扩散模型示意图
扩散模型的应用
扩散模型首批真正广为人知的代表性应用,是一系列用于生成艺术作品与图像的大型模型;下面这些名字你大概率已经有所耳闻:
- https://openai.com/dall-e-2/ (OpenAI出品,2022年4月6日发布)
- https://imagen.research.google/ (Google出品,2022年5月23日发布)
- https://stability.ai/blog/stable-diffusion-public-release (Stability.ai出品,2022年8月22日发布,自发布起完全开源)
需要注意的是,尽管这些模型能够生成逼真且富有艺术感的图像,但相关争议也在不断发酵——这些模型的训练数据均爬取自互联网,并未征得原创艺术家的许可。此外,艺术家群体也对AI这一竞争者表达了担忧。我对知识产权相关法律了解有限,无法提供更多深入见解,但我记得去年GitHub Copilot(https://github.com/features/copilot)基于GitHub代码训练时,也引发过类似的批评。
我不确定这会将艺术家群体置于何种境地。就目前我们所知的情况来看,AI并不会取代程序员;更准确地说,是不会使用AI的程序员会被会使用AI的程序员取代——这和90年代“深蓝”战胜卡斯帕罗夫后国际象棋领域发生的变化类似。我不确定这对艺术家而言意味着什么,但既然精灵已经逃出瓶子,再也收不回去,或许我们只能顺势而为,学会利用这些新技术发挥其最大价值。
从图像到视频
继上述第一波图像生成扩散模型之后,各家公司近期开始向更高阶迈进,陆续推出能够根据文本提示生成视频片段的模型:
- https://arstechnica.com/information-technology/2022/09/write-text-get-video-meta-announces-ai-video-generator/ (Meta,2022年9月29日发布)
- https://venturebeat.com/ai/google-ai-generator-takes-on-meta-as-text-to-video-trend-ramps-up/ (Google,2022年10月6日发布)
我猜再过几周,我们就能看到Stability.ai推出首个开源的同类视频生成模型了。另外值得一提的是,OpenAI目前还没有推出自己的视频生成扩散模型。(顺带一提,结合他们近期发布的字幕生成工具Whisper来看,我很好奇他们是否正在研发视频片段重新对齐的API。)
另外需要说明的是,目前的扩散模型数量远比这里列举的多得多。想要感受其数量之庞大,可以在这个网站中搜索“diffusion”关键词:https://scorebasedgenerativemodeling.github.io/ 。或者也可以查看这个仓库,截至本文撰写时,里面已经收录了超过300篇相关论文:https://github.com/heejkoo/Awesome-Diffusion-Models 。
我猜想下一波标志性的应用方向会聚焦于3D环境(比如VR领域)与运动生成。目前这一方向已经出现了一些值得关注的成果:
- https://dreamfusion3d.github.io/
- https://arxiv.org/abs/2210.02438
- https://guytevet.github.io/mdm-page/
生物学领域的应用
我曾指导过一名博士生,他的研究方向是用图神经网络生成分子,因此我对扩散模型在生物学领域的应用也深有感触。例如:

Foldingdiff示意图。来源:https://arxiv.org/abs/2209.15171v1
再结合基于Transformer的模型,比如https://www.biorxiv.org/content/10.1101/2021.05.24.445464v1 和https://www.nature.com/articles/s41586-021-03819-2 中的成果,我不禁好奇图神经网络的未来会走向何方。一方面,去年微软的这档播客(https://www.microsoft.com/en-us/research/podcast/machine-learning-molecular-simulation-and-the-opportunity-for-societal-good-with-chris-bishop-and-max-welling/ )也探讨过相关话题。但迄今为止,AI在分子数据领域最亮眼的应用,并非基于图神经网络实现的。其中一种解释是,我们尚未找到让图神经网络突破小分子限制、实现规模化扩展的方法,但未来如何仍有待观察。就像投资者会分散投资一样,我们也不该把所有希望都寄托在单一技术方向上。
拓展学习资源
想要深入了解扩散模型?下面是一份精选的实用资源清单:
- https://jalammar.github.io/illustrated-stable-diffusion/ 作者:Jay Alammar
- https://github.com/InFoCusp/diffusion_models/blob/main/Diffusion_models.ipynb 作者:InFoCusp
- https://theaisummer.com/diffusion-models/ 作者:Sergios Karagiannakos 与 Nikolas Adaloglou
- https://lilianweng.github.io/lil-log/2021/07/11/diffusion-models.html 作者:Lillian Wang
数值计算拥有开放的未来吗?
作为Python Conda工具(https://docs.conda.io/en/latest/ )的长期爱好者与使用者,我近期很荣幸受邀参加了Anaconda十周年的圆桌论坛,论坛主题围绕开源与科学计算展开,同台参与的还有https://twitter.com/teoliphant 、https://twitter.com/DynamicWebPaige 以及https://datascience.columbia.edu/people/ryan-abernathey/ 。
数值计算的未来会是开放的吗?我们如今正处于开源2.0阶段。我还记得十年前,我们还只是把代码项目上传到GitHub而已。一路走来,我们已经进步了太多!而现在的第二阶段,我们要学习的是如何长期维护项目,构建可持续发展的社区。
近期一个很好的例子,就是PyTorch加入Linux基金会这件事:https://www.linuxfoundation.org/blog/blog/welcoming-pytorch-to-the-linux-foundation 。
本次圆桌论坛的完整录像可在下方查看。
研究深度解读
在这个部分,我会精选一篇研究论文进行解读。为了贴合本期通讯的“扩散主题”,我选的当然是一篇扩散模型相关的论文!这是一篇用于生成表格数据的扩散模型:https://arxiv.org/abs/2209.15421 。
首先,为什么要研发生成表格数据的模型?主要有两方面的应用价值:
- 生成规模更大的数据集,以及在类别不平衡场景下对少数类进行过采样。
- 在原始数据无法共享的场景下(比如出于隐私保护考虑),生成逼真的合成数据集。
TabDDPM绝非首个尝试生成逼真表格数据的模型。在它之前,生成对抗网络(GAN)和变分自编码器(VAE)早已被广泛用于这一领域,代表性的研究包括https://arxiv.org/abs/2204.00401 和https://arxiv.org/abs/1907.00503 。
而TabDDPM这篇论文的核心观点是:扩散模型的表现能够超越同类的GAN与VAE模型(这和本文前面提到的图像、视频领域的发展规律相似)。
TabDDPM的工作原理是什么?
对于类别型(以及二值型)特征,TabDDPM采用多项扩散,添加均匀噪声;对于数值型特征,则使用通用的高斯扩散过程。随后,模型通过全连接网络(MLP)学习逆向扩散过程。

特征分布对比。来源:https://arxiv.org/abs/2209.15421
需要注意的是,TabDDPM并非只是死记硬背训练数据中的样本。作者通过分析“最近样本距离”(DCR)分布得出了这一结论——分布中存在大量非零的距离值。
后续针对合成数据集质量的分析,量化了在生成数据上训练的多个分类器的性能。例如,在15个分类与回归数据集上,随机森林、逻辑回归、决策树、CatBoost等模型在TabDDPM生成的合成数据上的表现,均优于在GAN或VAE生成的合成数据上的表现。
如果你想要尝试使用TabDDPM,可以在这里获取它的源代码:https://github.com/rotot0/tab-ddpm 。
开源亮点
用Whisper生成高质量字幕
OpenAI近期发布了开源语言模型Whisper(https://github.com/openai/whisper ),可用于为音频文件生成字幕(隐藏式字幕)与内容摘要。我亲自测试了一下,效果惊艳。和YouTube自带的字幕生成功能,以及我这些年试过的好几款付费服务相比,Whisper生成字幕的准确率要高得多。它对我的口音,以及深度学习领域的专业术语都能很好地识别,这点让我印象格外深刻。
希望这个工具对你也有帮助。我用它给我博客上所有的深度学习课程视频(https://sebastianraschka.com/blog/2021/dl-course.html )重新生成了字幕,脚本在这里:https://gist.github.com/rasbt/0d09932c861851f177bd8f13dc93b354 。
Jupyter笔记本中的PyTorch多GPU支持
了解我的人都知道,我是Jupyter笔记本的忠实用户——它是我做原型开发和教学时最喜欢的环境。但Jupyter笔记本有个小局限:由于多进程限制,它无法支持大多数现代深度学习多GPU训练方案。我很高兴地告诉大家,PyTorch Lightning 1.7版本新增了在Jupyter笔记本中对PyTorch的多GPU支持。你可以在这里了解更多详情:https://lightning.ai/pages/community/tutorial/multi-gpu-jupyter-notebooks/ !
特征选择中的特征分组功能
自荐一下:我的mlxtend库(http://rasbt.github.io/mlxtend/CHANGELOG/ )现在在特征选择和排列重要性算法中支持特征分组功能了。用户可以将多个相关特征(比如独热编码生成的一组特征)在选择过程中当作一个整体分组来处理。

独热编码特征的特征分组支持
教学小贴士
这里分享5个从计算层面优化深度神经网络推理性能的技巧。
(注:为了限定讨论范围,本文只介绍不改变模型架构的方法。会改变架构的技术,比如模型剪枝,会在后续的推文中讨论。)
(1) 并行化
并行化指的是将训练数据的(小)批次拆分成多个分块,目标是并行处理这些更小的数据分块。

并行化示意图
(2) 向量化
向量化用批量运算取代了开销高昂的for循环,一次性对多个元素执行相同操作。

用点积实现加权和的for循环向量化
(3) 循环分块
改变循环中数据的访问顺序,以充分利用硬件的内存布局与缓存机制。

算子融合的概念示意图
(4) 算子融合
如果有多个循环,尽量将它们合并成一个。

两次遍历与一次遍历计算均值和方差的对比
(5) 量化
量化通过降低数值精度(通常将浮点数转为整数)来加快计算速度、降低内存占用,同时尽量保证精度不受损失。

PyTorch Lightning中量化感知训练的示例
机器学习面试题
你是在巩固知识点,还是在准备面试?这个板块的问题或许能帮到你(也可能帮不上)。
- 自然语言处理中的分布假说是什么?它应用在哪些场景?适用范围有多广?
- 无状态训练和有状态训练的区别是什么?分别在什么情况下使用?
- 递归和动态规划的区别是什么?
(答案将在下期通讯中公布。)
精彩引语
“我认为五年之后,我们就不再需要做提示工程了。” ——https://greylock.com/greymatter/sam-altman-ai-for-the-next-era/
近期活动
全球顶尖的机器学习与AI顶会NeurIPS(https://neurips.cc/ )很快就要召开了!2022年11月28日至12月1日。
如果你要去参会的话,欢迎过来打个招呼!我会联合主持一场主题为“业界、学界,以及两者之间”(即从学术到产业的转型)的工作坊社交活动。更多细节后续公布!
学习与效率技巧
我最喜欢的学习新事物的工具之一是Anki(https://apps.ankiweb.net/ )。这是一款用于间隔重复学习的开源闪卡软件。间隔重复的意思是,系统会根据你对问题难度的判断,在特定间隔后才重复出现该问题(比如,第一次间隔3天,之后是2周、3个月、1年,以此类推)。
我从本科时期就开始用它了。它帮我最大化地利用阅读和学习时间,牢牢记住知识点。我坚信,它是帮我度过大学初期时光的核心工具之一。到现在已经用了十多年,我积累了成千上万张卡片。
我是怎么用的呢?读文章或者教材的时候,我会针对那些想记住的重点内容,给自己提一些“有意思”的问题。有时候我还会把截图作为答案加进去。

Anki中一张闪卡问题的示例
我每天会新增5到15张新卡片。另外,我每天会花大概10到15分钟复习,避免卡片堆积。

我Anki卡组里待复习的内容,有数千张卡片。
我通常在晚上放松休息前完成每日复习。不过有时候我也会用手机版,利用碎片时间复习卡片——比如剪头发早到了几分钟,或者在机场等行李的时候。
这份通讯是我的个人兴趣项目,没有直接的商业收入。不过如果你愿意支持我的话,可以考虑购买我的书籍:https://sebastianraschka.com/books 。如果你觉得这些书有深度、有帮助,也欢迎推荐给你的朋友和同事。

https://www.amazon.com/Machine-Learning-PyTorch-Scikit-Learn-scikit-learn-ebook-dp-B09NW48MR1/dp/B09NW48MR1/ , https://nostarch.com/machine-learning-and-ai-beyond-basics , and http://mng.bz/M96o
你的支持对我意义重大!非常感谢!