讨论 2022-11-22
=
## 生成模型与概率图模型(三)
## Diffusion model
上一次介绍了diffusion model通过不断地高斯采样将数据变为到达标准噪声,再将标准噪声还原回数据分布。
其中,数据为$X_0$,标准噪声为$X_T$,正过程$q(x_t|x_{t-1}) = \mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1}, \beta_t I)$,逆过程为$p(x_{t-1}|x_t)=\mathcal{N}(x_{t-1};\mu_\theta(x_t, t), \Sigma_\theta(x_t,t))$
由于diffusion涉及的公式比较多,并且之前已有整理的很完善的工作,这里就摘录了一部分已有的推导,并在关键环节加一些注解,方便大家理解。完整内容可以参考 https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
我们要处理的第一个问题是由递推形式求出通项,以方便我们后续处理,

这部分主要用到了两个知识点,一是高斯分布的重参数化,即$\mathcal{N}(\mu, \sigma^2)= \mu + \sigma \epsilon, \epsilon \sim \mathcal{N}(0, I)$,二是两个高斯分布的方差合并
有了 $q(x_t|x_0)$后,我们就可以着手探讨逆向过程(即生成过程),$q(x_{t-1}|x_t)$了。但是这个条件概率很难求解,可以考虑两方面,一个是把噪声去掉,这本身需要统计信息,即我们需要看很多数据点,当统计充分到把噪声的影响降到足够低的时候,这个条件概率才能求的准。二是信息角度,$x_{t-1}$到$x_{t}$是信息减少,很容易,反过来是信息增加,这就很困难了。为了规避这个问题,diffusion转而估计 $q(x_{t-1}|x_t, x_0)$ 。 因为引入了$x_0$,上述两个问题都不存在了,不过实际生成时我们没有原始数据,所以这里引入答案的思想和VAE其实很像。

这里的技巧是抽取一个exp到外面,里面就把乘法变成加法了。下面就是重点了,我们如何把这个$q(x_{t-1}|x_t,x_0)$写成高斯的形式呢?

这里的主要技巧是把高斯形式的展开,我们考虑
\begin{gather}
\frac{(x-\mu)^2}{2\sigma^2}=\frac{x^2-2\mu x+\mu^2}{2\sigma^2} = \frac{1}{2\sigma^2}x^2 - \frac{\mu}{\sigma^2}x + \frac{\mu^2}{2\sigma^2}
\end{gather}
对号入座就把$\mu,\sigma$求出来了
之后便是loss的推导,最大似然的变分推导就略去(可见VAE部分)

这部分推导比较朴实,把之前提到的$q(x_{t-1}|x_t,x_0) = q(x_t|x_{t-1},x_0) \frac{q(x_{t-1}|x_0)}{q(x_t|x_0)}$反过来用了一下。
我们主要关注中间这一项KL,由此引出的loss即

这个是由两个高斯分布之间的KL推导出来的,具体可参考 https://stanford.edu/~jduchi/projects/general_notes.pdf 最后一部分
## 概率图模型简述
概率图模型涉及众多知识,但在深度学习中应用的并不算广泛,这里只做一个很笼统的介绍,具体方法可查阅有关书籍

### 概率图模型是什么?
用有向图(贝叶斯网络)或无向图(马尔可夫随机场)来描述随机变量之间的关系,可以理解为是对一个巨大的联合概率的拆解。
### 什么时候需要用?
首先我们有多个随机变量(3个及以上),才有引入概率图模型的可能性,如果多个变量关系简单,那么也不需要概率图模型。
### 概率图模型的两大研究问题
**如何构造一个图** 图的构造其实指的是关系的构造,不涉及增加或删除节点。相应算法有多种分类方法,我个人认为分为两类比较合适,一是局部观测,二是全局观测,第一种着重于判定每一条边是否存在,而第二种着重于全图打分,考量整体性。
这里简单介绍一个关于整体性的例子(与概率图模型无关),假定有100个同学要分组,每个人可以提名5想一起的同学和5个不想一起的同学,怎样分配可以最大程度满足大家的意愿。这就是一个典型需要考虑整体性的问题。具体解法可以参见graph multi-cut。
**如何根据一个图进行推理** 这里用推理这个词其实不够恰当,他的意思图中某些随机变量确定了取值或给出了概率,求其他未知变量的取值或概率。有很多算法可以完成这一任务,比如Belief Propagation, Maximum Posterior Probability等
### 为什么深度学习少用概率图模型?
个人认为根本问题在于随机变量的选取,统计学中,往往节点很容易知道,比如系统的状态,故障的类型,各个传感器的度数,我们只需要研究他们之间的关系就可以了。但深度学习里面,一张图像是一个随机变量,还是每个像素点是一个随机变量?我们希望他们之间有多少联系,这个规模很可能远超以前概率图模型的使用场景。再者,一句话,一个单词,一个词组,划分随机变量的不同方式会带来很不一样的概率图模型,每句话划出来的随机变量一不一致。如果把隐状态作为随机事件,那问题就更复杂了。