扩散模型的观后感

近期不得不提的AI作画,实在是太火了。因此,跑去看了diffusion model的基本原理,公式推导比较难。

大概意思上,分为两个步骤。一是训练过程,给定时间迭代步和包含噪声的图,要求模型能够推理出噪声,并采用mseloss反向传播。二是逆扩散过程,从一个完全的噪声图开始,不断迭代模型求取出一部分过程噪声,将纯噪声图还原成高清图。

推荐看看这篇博文,讲的很好,基本不需要再看其他文章:

Diffusion Models:生成扩散模型 - 知乎 (zhihu.com)

一,为何逆扩散过程从一个完全的噪声图开始?

实际上,我觉得从一个包含部分噪声的图开始是最好的,这样既能保证生成的多样性,又能保证结果不是单纯随机的。事实上,很多AI作画除了输入随机变量外,都会要求输入一些标签或者原始图,所以原论文的做法应该是不那么好的。

二,扩散过程中,噪声系数beta为什么要取一个很小的值?beta为什么要随时间步慢慢变大?

如果不取一个很小的数,在10步以内,高清图就会变成一张纯噪声图。我想如此激烈的变化,应该是不便于模型学习的吧。

除此以外,为了防止生成的总的噪声的均值、方差过于大或小,论文还引入了sqrt(1-beta)。

beta还是一个超参数,应当随着时间步慢慢增大,这样后加入的噪声成分总是会大于前者。Zt为时间t加入的噪声。

 因此,

三、损失函数的求取。

扩散模型损失函数的求取耐人寻味。

 作者给出了这样一个交叉熵公式,意思是求取原始图像和经过逆扩散后生成图像的差异。(该交叉熵不可能小于0)

但是该值不好求取,因此,作者就想到了求取该值的上界。通过最小化上界,来使得交叉熵足够小。

也就是最小化Lvlb

该值又可以被简化为,最终得mseLoss(均方误差)。

 

posted @   澳大利亚树袋熊  阅读(120)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示