一、概率论基础
1、概率 p(x)
事件A的概率是对事件A在试验中出现的可能性大小的一种度量,事件A的概率表示为 \(p(A)\)
2、概率分布
反映随机变量 \(X\)(可能是离散型、也可能是连续型)的所有可能取值(如\(X=x_1,x_2,....\)),将随机变量取这些值的概率一一列举出来的概率分布就是该随机变量的概率分布。对于离散型随机变量,它的概率分布可以用枚举法表示\(P(X=x_i)\);对于连续型随机变量,它的概率分布可以用\(P(X)\)表示。
3、概率密度函数
设 \(X\) 为一连续型随机变量(对于连续性随机变量,它为某一具体数值的概率为 0,只能用范围\([x_1, x_2]\)来表示它的概率),\(x\)为任意实数,\(X\)的概率密度函数记为\(f(x)\),概率密度函数满足条件: (1)\(f(x) \ge 0\);(2)\(\int_{+\infty}^{-\infty}f(x)dx=1\)。
概率密度函数f(x)和概率p(x)的关系:对于任何实数\(x_1<x_2\), \(p(x_1<x<x_2)\)是该概率密度曲线下从\(x_1\)到\(x_2\)的面积:\(p(x_1<x<x_2)=\int_{x_1}^{x_2}f(x)dx\)
4、分布函数(也叫累积分布函数,cumulative distribution function)
连续型随机变量的概率也可以用分布函数 \(F(x)\) 来表示,分布函数的定义为: $$ F(x)=p(X\le x)=\int_{-\infty}^{x}f(t)dt $$ 其中,\(-\infty < x < + \infty\)。分布函数是随机变量最重要的概率特征,分布函数可以完整地描述随机变量的统计规律。 分布函数和概率密度函数的关系:概率密度函数就是变量X在某个很小的取值区间[\(x_1\), \(x_2\)](因为连续性变量取某个确定的值的概率为0)中的概率所表示的函数,概率分布就是变量X在某个大的曲直区间[\(-\infty\), \(x_1\)]中的概率,所以概率分布就是概率密度函数的累加,也就是说,对于连续型随机变量,概率密度函数是分布函数的导数,而分布函数是概率密度函数从负无穷到指定点的积分。物理上来讲,分布函数是概率密度函数曲线下小于\(x\)的面积
Probability Density Function
5、均值和方差
凡是随机变量符合一定的分布,就有均值和方差, 所以如果确定了一个分布的方差和均值,这个分布就100%确定了。
均值(mean):对于一个随机变量\(X\),均值也叫\(X\)的期望值(denoted by \(E(X)\)),即所有样本的平均值。 对于离散随机变量 \(X\) 来说,它的均值等于 \(\sum xP(x)\),其中,\(x\)代表随机变量 \(X\) 的所有可能的取值(对于离散型随机变量来说,\(P(x)\)也叫概率质量函数)。 对于连续随机变量 \(X\) 来说,它的均值等于 \(\int_{-\infty }^{+\infty}xP(x)dx\) ,这里的 \(f(x)\) 是随机变量 \(X\)的概率密度函数。
方差(variance):方差等于每个样本点与均值之差的平方和除以样本数量。
对于一个离散变量\(X\)(一般数据的频次是给定的): 均值:\(E(X)=\frac{\sum^{n}_{i=1}x_i}{n}\),\(x_i\)是离散变量\(X\)的所有取值,\(n\)是数据的个数,这个公式表示把所有数据加起来,然后除以数据的个数,得到的就是均值。 方差:\(S^2=\frac{\sum^{n}_{i=1}(x_i-E(X))^2}{n}\),这个公式表示先求出每个数据与均值的差,然后平方,再把这些平方值加起来,最后除以数据的个数,得到的就是方差。
6、正态分布(normal distribution)
正态分布也称高斯分布,通常记作\(X~N(μ ,σ^2)\),其中\(\mu\)称为均值,\(\sigma^2\)称为方差。正态分布的概率密度函数(说明是连续的)\(f(x)\)符合如下式: $$ f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} $$ 其中,\(μ = 0\),\(σ = 1\)的正态分布被称为标准正态分布。
7、似然函数likelihood function(似然)
wiki:似然函数(也叫似然)指的是一个统计模型用来解释观察到的数据的好坏情况的评判,通过计算在不同模型元素值的情况下看到某些数据的概率来比较的。换句话来讲,我们前面讲的概率密度函数\(f(x)\)其实都是在分布固定的情况下写的(即模型的参数\(\theta\)是固定的),按理来讲应该写成\(f(x|\theta)\)(一般来讲,\(f(x|\theta)\)这样的表达都会避免,而是用\(f(x;\theta)\)或者\(f(x, \theta)\),这样做是为了暗示\(\theta\)是一个固定的未知数而不是有条件的随机变量.),如果反过来,当取值\(x\)是固定的时候,\(f(x|\theta)\)就变成了似然函数了,为了避免歧义,一般将似然函数写成:\(\mathcal{L}(\theta|x)\)。关于参数\(θ\)的似然函数\(L(θ|x)\)(在数值上)等于给定参数\(θ\)后变量\(X\)的概率:\(L(\theta|x)=P(X|x=\theta)\)。似然函数在推断统计学(Statistical inference)中扮演重要角色,尤其是在参数估计方法中。在教科书中,似然常常被用作“概率”的同义词。但是在统计学中,二者有截然不同的用法。概率描述了已知参数时的随机变量的输出结果;似然则用来描述已知随机变量输出结果时,未知参数的可能取值。
8、KL散度
KL散度是信息论里面的知识点。通俗解释就是用一个分布P来表示另一个分布Q而减少的信息熵。 \(KL(Q||P)\)表示用分布Q来表示分布P对所减少的信息熵,\(KL(P||Q)\)表示用分布P来表示分布Q对所减少的信息熵,所以\(KL(Q||P)\neq KL(P||Q)\)。
二、扩散模型核心公式推导
1、AE
autoencoder 的思路和原理比较简单,输入数据input_data通过encoder 压缩到特定维度,之后通过 decoder 恢复成原始维度,然后直接计算 decoder 后的数据与input_data 之间的MSE损失,以此来达到无监督提取特征的功能。(实现方式特别暴力!!!)
2、VAE
VAE 模型是AE的变体,相比于AE直接粗暴的用encoder压缩输入数据的特征的到隐变量然后通过decoder建模重建的特征,VAE做了进一步延伸,将隐变量的概率分布引入到建模过程中,它的encoder不像AE那样直接输出固定的隐变量矩阵,而且矩阵的值是 discrete,而是输出一个多变量的高斯分布(说明学到了输入数据的均值和方差),说明学习到的值是continuous,这也是AVE比AE好的原因。通过学习输入数据的分布来学习数据的特征。
VAE work flow:假定实验数据集是MNIST(1 $\times$ 28 $\times$ 28),隐空间维度是 8,batch_size 是128, 所以输入数据就是[128, 784],通过 encoder 后得到一个代表输入数据均值 $\mu$ 的矩阵[128, 8]和一个代表输入数据标准差 $\theta$ 的矩阵[128, 8],基于这两个矩阵可以得到一个 8 变量的高斯分布(这就是encoder的输出),之后从这个 8 变量的高斯分布中采样的到一个[128, 8]的数据,经过encoder进行解码恢复得到output,即[128, 784]的矩阵。**这个简单操作背后的数学原理**:首先encoder生成的概率模型是基于 p(z|x) 建模的,它的到的是 p(z|x) 分布的均值和方差,然后 decoder 的过程是基于 q(x|z) 建模的. 这个代表prior:$p(z)$,之后从这个 8 变量的高斯分布中采样的到一个[128, 8]的数据,经过encoder进行解码恢复得到[128, 784]的矩阵,这个矩阵就是代表posterior:$p(z|x)$,In other words, the value of observable variables x, given a value for latent variable z.
假如输入的图像特征是\(X\)(这个\(X\)代表很多特征点的集合,可以理解为随机变量),\(X\)符合分布\(P(X)\),它的分布函数为\(P(x)\),VAE的目的就是通过估计出这个分布(即通过 VAE 模型的参数计算出来的特征符合\(P(X)\))。首先,\(P(X)\)可以看作是各种高斯混合分布的叠加(任意的数据分布,都可以由若干的\(m\)个高斯分布组成),公式表示如下: \(\(P(X)=\sum P(z)P(x|z)\)\) \(x\)表示随机变量\(X\)的取值,\(P(z)\)是第\(z\)个高斯分布,\(P(x|z)\)是取到第\(m\)个高斯分布的概率(或权重)。
上面的情况表示的是有限个高斯分布的(离散)形式,但现实情况下,\(P(X)\)通常是由无限个的高斯组成的,因此,将其变成积分的形式,代表无限个高斯分布的组合。上式可以写为: \(\(P(x)=\int_{z}P(z)P(x|z)dz\)\) 其中,\(P(z)\)表示高斯分布,\(z\sim N(0,1)\),而\(P(x|z)\)是未知的,可以理解为条件分布(在高斯分布\(z\)出现的情况下,特征\(x\)出现的概率满足的分布),它的均值和方差为,\(x|z \sim N(\mu(z), \sigma(z))\)。于是我们真正需要求解的就是\(\mu(z)\)和\(\sigma(z)\)的表达式,所以VAE引入encoder和decoder来求解。 第一个神经网络叫做Encoder,它求解的结果是\(q(z|x)\), \(q(x)\)可以代表任何分布。第二个神经网络叫做Decoder,它求解的是\(\mu(z)\)和\(\sigma(z)\),等价于求解\(P(x|z)\),其中,第一个神经网络Encoder的目的就是辅助第一个Decoder求解\(P(x|z)\)。
VAE的工作原理更深入: 上面讲到,模型的目的就是估计输入图像的特征(随机变量)\(X\)的分布\(P(X)\),然后通过该分布生成符合该分布的新图像出来。由上面的介绍可知,分布函数\(P(x)\)表示的是随机变量\(X\)的取值小于某一数值\(x\)的概率,我们希望学习尽可能多的数据,即随机变量\(X\)的取值范围足够大,所以\(X\)的分布函数\(P(x)\)也越大,这等价于求解: \(\(maximum L=\sum_{x}logP(x)\)\)给定任意一个分布\(q(x)\),有\(\int_{z}q(z)q(x|z)dz=1\),于是根据贝叶斯定理可以推导出:
\((5)\)式中右边第二项为\(q(z|x)\)和\(P(z|x)\)两个分布之间的KL散度距离,根据KL公式性质,该项恒大于等于0,记:
于是可以得到: \begin{align}logP(x)=L_b + KL(q(z|x)||P(z|x))\ge L_b \end{align}
原来是要求使得\(logP(x)\)最大化的\(P(x∣z)\),现在引入了一个\(q(z|x)\),就转换成了同时求\(P(x∣z)\)和\(q(z|x)\)使得\(logP(x)\)最大化,不妨来观察下\(logP(x)\)和\(L_b\)的关系: 根据公式\(P(x)=\int_zP(z)P(x|z)dz\),当我们固定住\(P(x|z)\)时,由于\(P(z)\)是固定的,所以\(P(x)\)也是固定的,那么\(logP(x)\)也就固定住了。而根据 \(6\) 式可知,如果调节\(q(z|x)\)使得分布\(q(z|x)\)与分布\(P(z|x)\)接近相等,即\(L_b\)越来越大,如果分布\(q(z|x)\)与分布\(P(z|x)\)完全相等,即KL散度为0时,此时\(L_b\)就完全等同于\(logP(x)\)。所以,无论\(logP(x)\)的值如何,总可以通过调节\(q(z|x)\)使得\(L_b\)等于它,又因为\(L_b\)是\(logP(x)\)的下界,所以求解\(max logP(x)\)等价于求解:
\begin{align} maximum (L_b) \end{align} 从宏观角度来看,调节\(P(z|x)\)就是相当于调节Decoder,调节\(q(z|x)\)就是调节Encoder,于是VAE模型的算法便是:Decoder每改进一次,Encoder就调节成跟其一致,并且利用约束项迫使Decoder在训练的时候“只能前进,不能后退”。这便是VAE的巧妙设计之处。
现在只需求解\(maximum (L_b)\),注意到:
所以,求解\(maximum (L_b)\)等价于求解KL的最小值和\(q(z|x)log{P(x|z)}\)的最大值,第一项的展开式等于:
于是,第一项式子就是第二节VAE模型架构中第二个损失函数的由来。
第二项注意到:
上述的这个期望,也就是表明在给定\(q(z|x)\)的情况下,\(P(x|z)\)的值尽可能高,第二项式子就是第二节VAE模型架构中第一个损失函数的由来。