扩散模型的观后感
近期不得不提的AI作画,实在是太火了。因此,跑去看了diffusion model的基本原理,公式推导比较难。
大概意思上,分为两个步骤。一是训练过程,给定时间迭代步和包含噪声的图,要求模型能够推理出噪声,并采用mseloss反向传播。二是逆扩散过程,从一个完全的噪声图开始,不断迭代模型求取出一部分过程噪声,将纯噪声图还原成高清图。
推荐看看这篇博文,讲的很好,基本不需要再看其他文章:
Diffusion Models:生成扩散模型 - 知乎 (zhihu.com)
一,为何逆扩散过程从一个完全的噪声图开始?
实际上,我觉得从一个包含部分噪声的图开始是最好的,这样既能保证生成的多样性,又能保证结果不是单纯随机的。事实上,很多AI作画除了输入随机变量外,都会要求输入一些标签或者原始图,所以原论文的做法应该是不那么好的。
二,扩散过程中,噪声系数beta为什么要取一个很小的值?beta为什么要随时间步慢慢变大?
如果不取一个很小的数,在10步以内,高清图就会变成一张纯噪声图。我想如此激烈的变化,应该是不便于模型学习的吧。
除此以外,为了防止生成的总的噪声的均值、方差过于大或小,论文还引入了sqrt(1-beta)。
beta还是一个超参数,应当随着时间步慢慢增大,这样后加入的噪声成分总是会大于前者。Zt为时间t加入的噪声。
因此,
三、损失函数的求取。
扩散模型损失函数的求取耐人寻味。
作者给出了这样一个交叉熵公式,意思是求取原始图像和经过逆扩散后生成图像的差异。(该交叉熵不可能小于0)
但是该值不好求取,因此,作者就想到了求取该值的上界。通过最小化上界,来使得交叉熵足够小。
也就是最小化Lvlb。
该值又可以被简化为,最终得mseLoss(均方误差)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理