在讨论扩散模型时,我们常常会产生一个想法,那就是一般情况下扩散模型的前向扩散过程是人为给定的,当前向扩散过程给定了,其对应的反向扩散过程也就被定义了,那么这个我们人为设定的扩散过程是不是最优的那个过程呢?假如不是的话,我们又该如何在避免发生优化过程中的“耦合”(改变一个因素的同时实际上影响到了多个因素)的情况下有的放矢地去对这个扩散过程进行优化呢?这篇来自英伟达团队的《Elucidating the Design Space of Diffusion-Based Generative Models》就比较完善地解答了这个问题。该文章的核心思想就是尽可能将模型训练以及各种参数选取的过程解耦合,让模型的训练过程变成一个与参数选取无关的纯黑盒过程,而推理过程则与参数选取相关,可以认为各种参数选择的差异实际上是我们对连续的ODE过程选取了不同的离散化策略【但是这里的分析并不是一般化的参数设置,所以关于这一部分仍然有研究空间】
现有扩散模型的形式化统一设原有的数据分布空间为$p({\bf x})$,其标准差为$\sigma_d$,考虑通过向数据添加独立同分布的高斯噪声(标准差为$\sigma$) ...
本文参考《DENOISING DIFFUSION BRIDGE MODELS》与《DIFFUSION BRIDGE IMPLICIT MODELS》。
DDBMDDPM等工作可以实现从噪声空间到数据空间的映射,但是很多情形下我们的输入源头其实是来自数据空间A的数据,希望将其映射到另一个数据空间B,这样的话DDPM的一般需要引入条件来指导从噪声空间到数据空间的映射。DDBM则提出了一种新型的扩散桥模型,可以实现两个数据空间的直接映射,比如将低质量图片映射为高质量图片。
关于DDBM的理论推导已经完全被《随机微分方程理论》中的内容覆盖掉了,因此不再复述关于Doob’s h transform的内容。
不过要注意的一点是,在拟合$\nabla_{ {\bf x}_t}\log q({\bf x}_t|{\bf x}_T)$的时候,DDBM采用了DDPM相似的技巧,提出使用模型来拟合$\nabla_{ {\bf x}_t}\log q({\bf x}_t|{\bf x}_0,{\bf x}_T)$,这一拟合目标是有闭式形式的,而$\nabla_{ {\bf x}_t}\log q({\bf x ...
在阅读有关扩散模型、扩散桥模型的相关理论论文的时候,深感学习随机微分方程相关理论的重要性,因此参考北大刘勇老师的《应用随机分析》的讲义以及Simo Särkkä与Arno Solin的《Applied Stochastic Differential Equations》【这本书没有介绍一些随机过程中的基础概念,而是直接切入到了SDE,因此很多地方的叙述不太完整,很多等号实际上是均方极限,但是对于快速想要入门的人还是挺有帮助的】撰写此文。
【待补全:基础概率论公设】
【待补全:ODE求解】
维纳过程性质解析【待补充】
It$\hat o$积分与SDE对于一个SDE,很多时候我们希望求解其分布特性,但是现实是我们无法直接对SDE进行常规的积分来得到对该分布的估计,这时候就需要It$\hat o$积分了(也被称为伊藤积分)。
对于如下形式的通用SDE【其中${\bf w}(t)$为零均值白高斯过程,自相关函数为狄拉克函数,也就是如果只关注某个时刻的方差,那么该方差为无穷,要注意的是其并非维纳过程,这要和此前的博文相区分】
\frac{d\bf x}{dt}={\bf f}({\bf x}, ...
本文参考苏神的博客网站。
【暂待完善】
Analytic-DPM这篇文章提出,目前诸如DDPM和DDIM等模型在最优化ELBO的过程中,存在一个潜在的优化空间是,在给定的前向扩散过程的超参数下,其一般认为反向扩散过程的方差$\sigma_n^2$就是最优的方差取值,但是该文通过分析得到实际上并非如此,核心的原因就在于我们拟合${\bf x}_0$时存在潜在的误差。【这篇文章提出的数学框架实际上指出,我们原本的扩散模型训练流程是没有问题的,但是在推理的时候,我们可以使用训练好的模型通过蒙特卡洛方法来拟合出理论上最优的推理流程方差策略,从而在已有训练模型的基础上进一步提升推理效果,这样看起来那些用模型来拟合最优方差的工作或许被杀死了?当然也可能没有,因为这篇文章的理论推理实际上也引入了一些假设,这些假设会限制优化空间,其实我们可以进一步扩展分析空间来发一篇新的理论文章,或者在指出这篇文献存在的潜在假设局限后,指出我们可以用模型拟合得到潜在的更广的优化空间】
回顾DDPM和DDIM的推导,我们不难发现,最重要的优化项是
\mathbb{E}_{ {\bf x}_{0:T}\sim q({\ ...
本文参考《Tutorial on Diffusion Models for Imaging and Vision》【该文中对DSM的${\bf x}’$替换为${\bf x}$的部分的叙述貌似有点小问题以及最后对fokker-Planck方程的部分的一个例子也有点小问题】以及《 SCORE-BASED GENERATIVE MODELING THROUGH STOCHASTIC DIFFERENTIAL EQUATIONS》。
得分匹配模型宋飏等人在DDPM发表之前就提出了多轮噪声尺度的得分匹配模型,这一类模型的本质后续被证明和DDPM是在同一体系下的,不过重新梳理其理论推导有助于我们后续从另一个视角理解扩散模型。
我们已有一些数据$\{ {\bf x}_i\in\mathbb{R}^D\}_{i=1}^N$,数据的分布为$q({\bf x})$,但是现在我们面临的问题不再是拟合这个分布,而是找到这个分布中概率最大的数据点(其实就是学习已有的数据分布,便于生成一些看起来最常见的数据),那么其实本质上就是找到
\max_{\bf x} q({\bf x})直观来看,我们可以通过梯度上升 ...
本文参考网站1与网站2。
DDPM优化目标梳理DDPM本质上是一种自回归的隐变量模型,将对目标分布$q({\bf x}_0)$的拟合转变为对$q({\bf x}_{0:T})$的拟合。
前向过程被定义为马尔科夫链:
q({\bf x}_{1:T}|{\bf x}_0)=\prod_{t=1}^T q({\bf x}_t|{\bf x}_{t-1})\tag{1}\label{1}且(或许是为了保证拟合目标是可计算的tractable)单步转移也是高斯的:
q({\bf x}_t|{\bf x}_{t-1})=\mathcal{N}({\bf x}_t;\sqrt{1-\beta_t}{\bf x}_{t-1},\beta_t{\bf I})\tag{2}\label{2}其中$\beta_t$为可以人为定义的超参数。结合$(\ref{1})$和$(\ref{2})$,我们可以得到
q({\bf x}_t|{\bf x}_0)=\int_{ {\bf x}_{t+1:T} }\int_{ {\bf x}_{1:t-1} }q({\bf x}_{1:T}|{\bf x}_0)d{\b ...
本文参考:https://juejin.cn/post/7084409806492008456
设代优化的模型参数为$\theta$,目标函数(损失函数)为$J(\theta)$,学习率为$\eta$,迭代周期为$t$,损失函数$J(\theta)$关于当前参数$\theta$的梯度为$g_t=\nabla_\theta J(\theta)$。
梯度下降(Gradient Descent)参数更新方法为:
\theta_{t+1}=\theta_t-\eta\cdot\nabla_\theta J(\theta)=\theta_t-\eta\cdot g_t该方法存在如下的一些缺点:
训练速度慢:在大规模数据集上进行训练时,每输入一个样本都要进行一次参数更新,而每次迭代都要遍历所有的样本。
容易陷入局部解:如果走到局部的洼地,可能会认为已经达到最低点。
批量梯度下降(Batch Gradient Descent)不像标准GD那样,对每个样本输入都进行参数更新,而是直接对所有数据的输入进行参数更新(相当于单独计算每个样本的梯度,然后将其求平均):
\theta_{t+1}=\th ...
转载自https://git-scm.com/book/zh/v2/Git-%e5%88%86%e6%94%af-%e5%88%86%e6%94%af%e7%ae%80%e4%bb%8b。
git分支简介 Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照 。
在进行提交操作时,Git 会保存一个提交对象(commit object)。 知道了 Git 保存数据的方式,我们可以很自然的想到——该提交对象会包含一个指向暂存内容快照的指针。 但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。 首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象, 而由多个分支合并产生的提交对象有多个父对象。
假设现在有一个工作目录,里面包含了三个将要被暂存和提交的文件。 暂存操作会为每一个文件计算校验和,然后会把当前版本的文件快照保存到 Git 仓库中 (Git 使用 blob 对象来保存它们【Blob(Binary Large Object)对象用于表示不可变的、原始数据的类文件对象。它可以存储二进制数据,通常用于处理文件或大 ...
转载自https://git-scm.com/book/zh/v2/Git-%e5%9f%ba%e7%a1%80-%e8%8e%b7%e5%8f%96-Git-%e4%bb%93%e5%ba%93。
获取git仓库有两种获取 Git 项目仓库的方式:
将尚未进行版本控制的本地目录转换为 Git 仓库;
从其它服务器 克隆 一个已存在的 Git 仓库。
在已存在目录中初始化仓库进入希望转化为git仓库的工作目录,执行
$ git init
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。但是这只是一个简单的初始化,项目中的文件还没有被跟踪。
如果在一个已存在文件的文件夹(而非空文件夹)中进行版本控制,你应该开始追踪这些文件并进行初始提交。 可以通过 git add 命令来指定所需的文件来进行追踪,然后执行 git commit :
$ git add *.c %将所有的扩展名为.c的文件添加到暂存区
$ git add LICENSE
$ git commit -m 'initial project ...