扩散模型初探
扩散模型的推导
主要是根据以下网址学习diffusion的数学形式:网址
首先使用
当
前向添加噪声的过程是一个马尔科夫链,
令
在前向过程中添加高斯噪声:
我们需要根据前向过程求得逆向过程的分布情况,即求得如下的分布情况(我们已经根据一些前置知识知道它是正态分布,所以只用求取如下的参数):
根据贝叶斯公式:
根据正太分布的公式:
从而可以求解出
根据上述
扩散模型现在需要的就是通过一个网络来预测
我们需要设计网络来预测,那么我们就需要设计loss函数来进行优化。
首先,我们需要生成地图像分布要和真实图像一致,采用最大似然估计,这个地方的推理和VAE是一致的。
那么我们就将对于图像的分布规约到了对于逆向过程去估计前向过程的分布。这一步就是VAE的
但是上述虽然规约到了逆向过程,但是仍然不是方便计算的表达式,我们需要进一步的归约到可以算的KL散度中:
只有中间一项是在训练过程中是变量,因此在优化过程中考虑中间一项即可,即优化这两个分布的KL散度。
我们设逆向分布为:
具有两个参数
我们需要预测这两个变量来拟合分布。在论文中采用固定的
在对
-
一种是直接预测
, -
另一种是根据之前推导出的相关公式:$$\begin{aligned}
\boldsymbol{\mu}_\theta(\mathbf{x}_t,t)& =\color{red}{\frac1{\sqrt{\alpha_t}}\left(\mathrm{x}t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}}\boldsymbol{\epsilon}\theta(\mathrm{x}t,t)\right)} \
\mathrm{Thus~}\mathbf{x}& =\mathcal{N}(\mathbf{x};\frac1{\sqrt{\alpha_t}}\Big(\mathbf{x}_t-\frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}t}}\boldsymbol{\epsilon}\theta(\mathbf{x}t,t)\Big),\boldsymbol{\Sigma}\theta(\mathbf{x}_t,t))
\end{aligned}$$
可以直接预测 ,然后根据上述公式计算 。
如果对
如果忽略掉前面关于t的权重项,可以得到(忽略之后的实验效果更好):
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了