一、之前的研读总结#
笔者之前进行的研读大多是针对“差分隐私”的数学推导。这段时间内研读的方向主要包括以下几个方面:
利用 差分隐私+同态加密 的方式,进行各种场景的实际应用
联邦学习,利用改进的学习过程,保护数据传输阶段的隐私
深度学习DP,在保证隐私保护程度的前提下,提高精度
通过其他概率论手段,发布一个新的数据集,这个数据集既能够符合原数据集的分布规律,又能保证差分隐私规范。
笔者感觉,第四个方面具有较大的挑战性,但同时也是属于比较有创新点的。它属于“发布数据集”的范畴,需要同时统筹以下方面:
- “分布规律一致性”:发布数据集和原数据集的分布规律保持一致
- “差分隐私规范性”:发布的数据集需要符合差分隐私的规范
- “数据自身一致性”:在往生成数据集中添加噪声时会打破一致性(例如概率和可能为负或者超过1,大量的低噪会让一些低概率的事情提高概率性,进而打扰分布一致)
- “精度要尽可能高”:基于这些数据集获得的训练成果,精度要尽可能高
不难发现,以上几个条件彼此之间是互相矛盾的:为了符合差分隐私的规范,不得不往数据中添加大量的噪声。而大量噪声又会打破数据集的一致性以及不可避免地降低训练精度。理论上来讲,这应该是一个不可避免的矛盾。
但是,在最近比较火热的 diffusion 领域,笔者感觉这种矛盾并不是尖锐对立的。为了保护数据隐私而添加噪声的行为,在 diffusion 上或许反而能够提高生成图像的质量。
在笔者尝试利用 stable-diffusion 绘制图像时,我发现生成的图像在局部有着很惊艳的质量,但如果聚焦于图像全局,则经常会出现“畸形”,例如“生成的人物总是多一只手或者脚”、“生成人物的手指数量不对”、“人物的明暗关系、透视不正确”…….此外,“版权”的问题也是一个值得商榷的问题。
造成这种问题的原因应该是由于生成算法陷入了“局部最优解”。一般情况下,对于局部最优解,“添加噪声”的方式本身就有助于“跳出”局部解。此外,我认为,在“图像生成”这个领域,“整体的协调性”比“局部的精细度”更加重要。一个局部粗糙,但是符合人体结构的生成算法,显然会比局部精细但是人体结构崩坏的算法,更加符合现实审美。
基于这一点,如果我们使得“噪声”的加入在牺牲“局部精细度”的时候,高度保持了“整体的协调性”,那么或许反而能够提高 Diffusion 算法的适用程度。具体来讲,Diffusion 算法中应该有一个类似”损失函数“的东西来控制精度(这个算法的实现原理将是接下来研读的重点)。如果我们能够将这个”精度“分解成”局部精细度“和”全局一致性“,那么加入噪声的时候,侧重点偏向于”局部精细度“,而保持”全局一致性“的精度,那么我们便能够在一定程度上缓解 Diffusion 算法生成”畸形“图像的问题了。
此外,现有的很多”AI绘图“平台,它们所基于的训练素材大多是不存在合法版权的(例如禁止商用等等),因而生成的图像如果存在过拟合的问题,那么便可以称之为”侵权“。而”差分隐私“算法的引入,或许也能够解决”过拟合“的问题。
基于以上两种的思想,我决定去深入研究一下 DDPM 相关的论文,希望能够从中找到相关的线索。此外,Diffusion 算法本身也是属于”生成数据集“的一种,也可以和 DP 结合,在”基于DP的合成数据集“相关的领域对我应该也有相关的启发。
总结一下,本次研读的目标:
了解 Diffusion 算法的实现原理;
给出一个标准,用于划分 Diffusion 中对于”精度“的损失函数,将其划分为”全局一致性“和”局部精细度“;
探究 Diffusion 算法和差分隐私结合的可能性,实现”保障全局一致性“的前提下,通过“牺牲局部精细度“来保证隐私保护(类似于DP中的”局部敏感“和”全局敏感“的调和);
在上一点的基础上,将”精度的划分“思想模型完善,尝试能否在一些简单的方法上进行运用。
二、Diffusion 研读#
DDPM模型包括了两个过程:前向过程和反向过程。它的每一个过程都是一个参数化的马尔可夫链。在前向过程中,对原始图片 X0 不断添加高斯噪声,最后生成了一个完全随机的噪声 Xt 。而逆向过程则反过来,通过一个随机的高斯噪声来生成图片。
2.1 前向过程#
在前向过程中,我们把第 t 次添加噪声后的结果图片记为 Xt,则我们可以给出如下所示的马尔可夫传递过程:
Xt=αtXt−1+1−αtϵt−1 其中,εt−1∼N(0,1) ,是一个高斯噪声。我们继续迭代一次 Xt−1,可以得到:
Xt=αt(αt−1Xt−2+1−αt−1ϵt−2)+1−αtϵt−1Xt=αtαt−1Xt−2+αt(1−αt−1)ϵt−2+1−αtϵt−1 到这一步为止,我们发现式子末尾的噪声部分非常复杂,在此,我们引入高斯分布的两条性质:
定理一、如果X∼N(μ,σ2),且a和b都是实数,那么aX+b∼N(aμ+b,(aσ)2)定理二、如果X∼N(μX,σX2),Y∼N(μY,σY2),且X和Y是统计独立的正态随机变量,那么它们的和也满足正态分布U=X+Y ∼N(μX+μY,σX2+σY2) 由于 εt−1,εt−2∼N(0,1) ,因此根据 定理一 有:
αt(1−αt−1)ϵt−2∼N(0,αt(1−αt−1))1−αtϵt−1∼N(0,1−αt) 再根据 定理二,它们相加的结果也服从高斯分布:
αt(1−αt−1)ϵt−2+1−αtϵt−1∼N(0,1−αtαt−1) 这样,我们就可以把 X_t 的迭代写成统一的规范:
Xt=αtαt−1Xt−2+1−αtαt−1ϵ′ 这样不断迭代下去,我们就可以直接写出 Xt 和 X0 之间的关系:
令αt=αtαt−1...α1,那么有:Xt=αtX0+1−αtϵ 根据上述这道公式,给定图片X0,确定每一步的参数,我们就可以直接计算出最终得到的随机噪声 Xt,这就大大加快了采样的过程。
2.2 反向过程#
这里困扰了我很长时间。既然正向过程我们已经得到了,那为什么逆向过程不能直接反转一下,把 Xt−1 移到左边,Xt 移动到右边,用和上面相似的推导过程快速得出前向的图像 Xi 呢?
我的理解是这样的。首先,我们假设 X0 是一个图片的状态,而 Xt 是一个噪声的状态。那么从 X0 到 Xt ,在这个过程里有效信息被丢失了,整体分布的“有序性”降低,因而呈现出了“熵增”的特性。而“熵增”本身是一个不可逆的过程。这正和它的名称“diffusion”一样,物理学中的“扩散”现象,本质也是熵增的过程,如果没有外力作用,那么这个过程就是不可逆的。
从 X0 到 Xt,我们根据马尔可夫过程,构建了一个高斯分布 q(Xt∣Xt−1)。在逆向过程中,我们需要的是一个逆向分布 q(Xt−1∣Xt),这样可以利用这个逆向分布来从噪声生成图像。但是这个逆向分布究竟是不是高斯分布,这个我们是不知道的,需要去证明。如果直接反转,认为 q(Xt−1∣Xt) 也是一个高斯分布,用上述的式子逆推的话,可能就会导致信息的损失和精度的下降。
因此,逆向过程应该理解为,我们在有数据 Xt 和 Xt−1 的前提下,需要构建一个神经网络,来模拟从 Xt 到 Xt−1 的过程。
我们使用参数化的网络来建模这个去噪过程。下面的这个式子是为了近似目标分布而构建的:
pθ(X0:T)=p(XT)Πt=1Tp(Xt−1∣Xt)qθ(Xt−1∣Xt)=N(Xt−1;μθ(Xt,t),Σθ(Xt,t)) 需要注意的是,当X0已知的时候,反向的条件概率是可以求出来的,我们利用贝叶斯公式做如下变换:
q(Xt−1∣Xt,X0)=q(Xt,X0)q(Xt−1,Xt,X0) 不难发现,原本是从 t→t−1 的逆向过程,在这里的分母中,却演化成了从 0→t 的正向过程。同理,如果我们能够把分子也变成正向过程,那么就可以推导出在 X0 和 Xt 已知条件下,Xt−1 的概率了。
继续利用贝叶斯公式进行如下变换:
q(Xt−1,Xt,X0)=q(Xt,Xt−1,X0)=q(Xt∣Xt−1,X0)∗q(Xt−1,X0) 对分子和分母同时进行进一步变换:
q(Xt,X0)=q(Xt∣X0)∗q(X0)q(Xt−1,X0)=q(Xt−1∣X0)∗q(X0) 削去同项 q(X0),得到:
q(Xt−1∣Xt,X0)=q(Xt∣Xt−1,X0)q(Xt∣X0)q(Xt−1∣X0) 这样我们就把一个逆向过程变成了正向过程的四则运算。
注意到在正向过程中,有:
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI),βt=1−αt
PS:采样过程遵循封闭公式。这个技巧也被称作“重参数”技巧:
IFz∼N(μ,σ2),thenz=μ+σϵwhereϵ∼N(0,1) 这样对于上述的 q(xt∣xt−1),便得到了一开始的马尔可夫传递过程:
Xt=αtXt−1+1−αtϵt−1
这样,上面正向过程运算的各个部分便可以细化为具体的高斯分布:
q(Xt∣Xt−1,X0)=2π1−αt1exp(−2βt(xt−αtxt−1)2) q(Xt−1∣X0)=2π1−αt−11exp(2(1−αt−1)(xt−1−αt−1x0)2) 因为 αi为常数,因此自然常数项前的这一项可以统统约化为一个常量C,从而有:
q(Xt−1∣Xt,X0)∝ exp(−21(βt(xt−αtxt−1)2)+1−αt−1(xt−1−αt−1x0)2−1−αt(xt−αtx0)2) 将上式展开,合并同类项,有:
q(Xt−1∣Xt,X0)∝exp{−21[(βtαt+1−αt−11)xt−12−(βt2αtxt+1−αt−12αt−1x0)xt−1+C(xt,x0)]} 而 q(Xt−1∣Xt,X0) 本身遵循高斯分布,也即:
q(Xt−1∣Xt,X0)=N(xt−1;μ^(xt,x0),βt^I) 根据高斯分布公式的特点,我们便可以一一写出上式中的对应部分:
exp(−2σ2(x−μ)2)=exp(−21(σ21x2−σ22μx+σ2μ2)) 方差部分:
σ21=βt^1=βtαt+1−αt−11,βt^=1−αt1−αt−1∗βt 期望部分:
σ22μ=βt^2μt^(xt,x0)=(βt2αtxt+1−αt−12αt−1x0) μt^(xt,x0)=1−αtαt(1−αt−1)xt+1−αtαt−1βtx0 在 X0 已知的前提(正向过程倒置)下:
Xt=αtX0+1−αtϵX0=αt1(xt−1−αtzt) 将结果代入上式,可以得到:
μ^t=αt1(xt−1−αtβtzt) 也即:
μ^(xt,t)=αt1(xt−1−αtβtzθ(xt,t)) 在此,我们得到了数学期望、方差,带入到一开始构建的网络中,便可以进行训练了:
qθ(Xt−1∣Xt)=N(Xt−1;μθ(Xt,t),Σθ(Xt,t)) 每一步的推断可以总结为:
每个时间步通过当前的 xt 和 t 来预测高斯噪声,然后根据上式得到数学期望 μ^(xt,t)
得到方差 Σθ(xt,t) ,DDPM中使用untrained Σθ(xt,t)=βt^ ,且认为 β^t=βt 和 β^t=1−αt1−αt−1βt 结果近似
计算得到 q(xt−1∣xt) ,利用重参数技巧得到 xt−1