最近AI绘画应用如火如荼,
有关算法的应用产品也很多,比如DALLE2
官网地址:https://openai.com/dall-e-2/
DALLE2产品描述:DALL·E2是一个新的人工智能系统,可以根据自然语言的描述创建逼真的图像和艺术
其主要功能有:
AI绘画架构,核心算法就是运用了Diffusion(扩散算法)
举个列子:之前三亚出现游客聚集性新冠,如果当时不选择集中隔离,而是允许游客自由进出,那原本集中在一起的游客病例的特征(也可以说是病例轨迹),因为扩散开来,回到各个城市,那不同的游客的病例特征(病例轨迹)也会因此多样化了。
回到图像中,游客的病例特征也就是对应到图像的特征上(最直接的特征就是图像直方图)
对比以前的GAN也是图像生成的算法
GAN缺点:
GAN所能生成出的图像,其图像特征多样性较差,在训练中,只需要生成器生成的图像能满足当前的判别器,使判别器不能识别出假的即可了。
Diffusion算法可以根据结构,有二个方向分成是前向过程和反向过程
核心:不断对输入的图像数据加入噪声,最后变成一个纯噪声的数据
已知最初的原始图像的数据,前向过程,就是需要求得每一个 t t t时刻的图像数据
也就是已知 x 0 x_0 x0,求 x 2 , . . . , x t x_2,...,x_t x2,...,xt
每一个时刻添加一个高斯噪声,
由 x 0 x_0 x0到 x 1 x_1 x1… x N x_N xN时刻
每个时刻 t t t,加入的噪声是不同的,并且加入噪声的数量,会随着时间,越来越多。
设 t t t时刻噪声的值 z 1 z_1 z1,是服从高斯分布的,所有噪声都是服从高斯分布的
设 t t t时刻噪声值的权重为 α t \alpha_t αt
α t = 1 − β t \alpha_t=1-\beta_t αt=1−βt,通过 β \beta β来调节 α \alpha α的值, β \beta β是一个小于1的值, β \beta β越来越大, α \alpha α越来越小。
通过 α \alpha α来调节,每个时刻的噪声数量,随着时间,噪声越来越大。
设 t t t时刻的图像分布为 x t x_t xt
x t x_t xt时刻的分布,是由 t − 1 t-1 t−1时刻 x t − 1 x_{t-1} xt−1加入噪声得到的,于是得:
x t = α t x t − 1 + 1 − α t z t x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}z_t xt=αtxt−1+1−αtzt
其中 1 − α t = β t \sqrt{1-\alpha_t}=\sqrt{\beta_t} 1−αt=βt
如何得到 x t x_t xt,可以通过 x t − 1 x_{t-1} xt−1得到, x t − 1 x_{t-1} xt−1由 x t − 2 x_{t-2} xt−2,依次递归到 x 0 x_0 x0得到
但 是 太 慢 了 , 运 算 时 间 过 长 , 目 前 我 们 已 知 的 就 只 有 x 0 , 如 何 将 x t 用 x 0 去 表 示 但是太慢了,运算时间过长,目前我们已知的就只有x_0,如何将x_t用x_0去表示 但是太慢了,运算时间过长,目前我们已知的就只有x0,如何将xt用x0去表示
步骤1
首先将 x t − 1 = α t − 1 x t − 2 + 1 − α t − 1 z 2 x_{t-1}=\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}z_2 xt−1=αt−1xt−2+1−αt−1z2 带入到 x t = α t x t − 1 + 1 − α t z t x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}z_t xt=αtxt−1+1−αtzt中得
x t = α t ( α t − 1 x t − 2 + 1 − α t − 1 z 2 ) + 1 − α t z 1 x_t = \sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}z_2)+\sqrt{1-\alpha_t}z_1 xt=αt(αt−1xt−2+1−αt−1z2)+1−αtz1
步骤2:合并高斯分布
已知每次加入的噪声都服从高斯分布 z 1 , z 2 , . . . N ( 0 , I ) z_1,z_2,...~N(0,I) z1,z2,... N(0,I)
x t = α t α t − 1 x t − 2 + ( α t ( 1 − α t − 1 ) z 2 + 1 − α t z 1 ) x_t=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+(\sqrt{\alpha_t(1-\alpha_{t-1})}z_2+\sqrt{1-\alpha_t}z_1) xt=αtαt−1xt−2+(αt(1−αt−1)z2+1−αtz1)
这里有二个高斯分布 N ( 0 , 1 − α t ) N(0,1-\alpha_t) N(0,1−αt), N ( 0 , α t ( 1 − α t − 1 ) ) N(0,\alpha_t(1-\alpha_{t-1})) N(0,αt(1−αt−1))
由数学公式可以推导若两个独立的高斯分布 N 1 ( u 1 , σ 1 2 ) N_1 ~(u_1,\sigma_1^2) N1 (u1,σ12), N 2 ( u 2 , σ 2 2 ) N_2 ~(u_2,\sigma_2^2) N2 (u2,σ22),其合并后为 N ( u , σ 2 ) N ~(u,\sigma^2) N (u,σ2)
其中 u = u 1 + u 2 u=u_1+u_2 u=u1+u2, σ 2 = σ 1 2 + σ 2 2 \sigma^2=\sigma_1^2+\sigma_2^2 σ2=σ12+σ22
因此 N ( 0 , 1 − α t ) N(0,1-\alpha_t) N(0,1−αt), N ( 0 , α t ( 1 − α t − 1 ) ) N(0,\alpha_t(1-\alpha_{t-1})) N(0,αt(1−αt−1))合并为 N ( 0 , ( 1 − α t ) 2 + α t 2 ( 1 − α t − 1 ) 2 ) N(0,(1-\alpha_t)^2+\alpha_t^2(1-\alpha_{t-1})^2) N(0,(1−αt)2+αt2(1−αt−1)2)
化简后得
x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 z 3 x_t=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}z_3 xt=αtαt−1xt−2+1−αtαt−1z3
其中 z 3 z_3 z3为高斯分布 z 1 , z 2 z_1,z_2 z1,z2的合并
步骤3
既然 x t x_t xt可以直接通过 x t − 2 x_{t-2} xt−2,那一直推导到 x 0 x_0 x0由此可得
x t = α ˉ t x 0 + 1 − α ˉ t z t x_t=\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar \alpha_t} z_t xt=αˉtx0+1−αˉtzt
其中 α ˉ t = α t ∗ α t − 1 ∗ α t − 2 ∗ α t − 3 ∗ . . . . ∗ α 0 \bar \alpha_t=\alpha_t*\alpha_{t-1}*\alpha_{t-2}*\alpha_{t-3}*....*\alpha_0 αˉt=αt∗αt−1∗αt−2∗αt−3∗....∗α0
现在我们知道了,正向过程,如何由图像转为噪音点图像,现在我们要反过来思考怎么由噪声图像还原到原图像,也叫去噪的过程
也就是已知 x t x_t xt,求 x t − 1 , . . . , x 0 x_{t-1},...,x_0 xt−1,...,x0
已知 x t x_t xt,求 x t − 1 , . . . , x 0 x_{t-1},...,x_0 xt−1,...,x0
通过贝叶斯公式,可以得:
我们可以通过先验条件 x 0 x_0 x0来求得后验条件 x t − 1 x_{t-1} xt−1或 x t x_t xt,或任何一个 t t t时刻的 x x x值。也就是说 P ( x t − 1 ∣ x 0 ) P(x_{t-1}|x_0) P(xt−1∣x0), P ( x t ∣ x 0 ) P(x_t|x_0) P(xt∣x0)已知
目的是反向推理: P ( x t − 1 ∣ x t ) P(x_{t-1}|x_t) P(xt−1∣xt),先验条件为 x t x_t xt,求后验条件 x t − 1 x_{t-1} xt−1,公式如下:
P ( x t − 1 ∣ x t ) = P ( x t ∣ x t − 1 ) P ( x t − 1 ) P ( x t ) P(x_{t-1}|x_t)=\frac{P(x_t|x_{t-1})P(x_{t-1})}{P(x_t)} P(xt−1∣xt)=P(xt)P(xt∣xt−1)P(xt−1)
其中 P ( x t − 1 ) P(x_{t-1}) P(xt−1), P ( x t ) P(x_t) P(xt)可以通过先验条件 x 0 x_0 x0求得
也就是 P ( x t − 1 ∣ x 0 ) P(x_{t-1}|x_0) P(xt−1∣x0), P ( x t ∣ x 0 ) P(x_t|x_0) P(xt∣x0)
步骤1
因为 P ( x t − 1 ) , P ( x t ) P(x_{t-1}),P(x_t) P(xt−1),P(xt)都可以通过先验条件 x 0 x_0 x0求得,虽然这里 x 0 x_0 x0未知,但可以将 P ( x t − 1 ∣ x t ) = P ( x t ∣ x t − 1 ) P ( x t − 1 ) P ( x t ) P(x_{t-1}|x_t)=\frac{P(x_t|x_{t-1})P(x_{t-1})}{P(x_t)} P(xt−1∣xt)=P(xt)P(xt∣xt−1)P(xt−1)表示为:
P ( x t − 1 ∣ x t , x 0 ) = P ( x t ∣ x t − 1 , x 0 ) P ( x t − 1 ∣ x 0 ) P ( x t ∣ x 0 ) P(x_{t-1}|x_t,x_0)=P(x_t|x_{t-1},x_0)\frac{P(x_{t-1}|x_0)}{P(x_t|x_0)} P(xt−1∣xt,x0)=P(xt∣xt−1,x0)P(xt∣x0)P(xt−1∣x0)
其中 P ( x t − 1 ∣ x 0 ) = α ˉ t − 1 x 0 + 1 − α ˉ t − 1 z P(x_{t-1}|x_0)=\sqrt{\bar\alpha_{t-1}}x_0+\sqrt{1-\bar \alpha_{t-1}}z P(xt−1∣x0)=αˉt−1x0+1−αˉt−1z ~ N ( α ˉ t − 1 x 0 , 1 − α ˉ t − 1 ) N(\sqrt{\bar\alpha_{t-1}}x_0,1-\bar\alpha_{t-1}) N(αˉt−1x0,1−αˉt−1)
其中 P ( x t ∣ x 0 ) = α ˉ t x 0 + 1 − α ˉ t z P(x_t|x_0)=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar \alpha_t}z P(xt∣x0)=αˉtx0+1−αˉtz ~ N ( α ˉ t x 0 , 1 − α ˉ t ) N(\sqrt{\bar\alpha_t}x_0,1-\bar\alpha_t) N(αˉtx0,1−αˉt)
其中 P ( x t ∣ x t − 1 , x 0 ) = α t x t − 1 + 1 − α t z P(x_t|x_{t-1},x_0)=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}z P(xt∣xt−1,x0)=αtxt−1+1−αtz ~ N ( α t x t − 1 , 1 − α t ) N(\sqrt{\alpha_t}x_{t-1},1-\alpha_t) N(αtxt−1,1−αt)
步骤2
从式子中可以看到都包含一个 z z z的高斯分布(正态分布)
由高斯分布公式:
步骤3
化简步骤2得:
u ^ t ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 β t 1 − α ˉ t x 0 \hat u_t(x_t,x_0)=\frac{\sqrt{\alpha_t}(1-\bar \alpha_{t-1})}{1-\bar \alpha_t}x_t+\frac{\sqrt{\bar \alpha_{t-1}}\beta_t}{1-\bar \alpha_t}x_0 u^t(xt,x0)=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1βtx0
其中 x 0 = 1 α ˉ t ( x t − 1 − α ˉ t z t ) x_0=\frac{1}{\sqrt{\bar \alpha_t}}(x_t-\sqrt{1-\bar \alpha_t}z_t) x0=αˉt1(xt−1−αˉtzt)
最终结果求出:
u ^ t = 1 α t ( x t − β t 1 − α ˉ t z ˉ t ) \hat u_t=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\bar \alpha_t}}\bar z_t) u^t=αt1(xt−1−αˉtβtzˉt)
如果上面的公式计算看不懂,只需要记住这最后这个式子即可。
模型的训练和预测,并通过损失函数来拟合,一直是围绕着噪声 Z t Z_t Zt来求解的
前向过程:我们随机增加的噪声——>噪声就是已知的标签 y y y
反向过程:通过模型预测出前面时刻的图像,来还原,已知 x t x_t xt,求得 x t − 1 x_{t-1} xt−1,也就得到了中间的噪声 y ^ \hat y y^。
用前向反向的噪声来作为损失函数,来拟合模型
模型整体主干结构选择U-Net
算法流程图
Algorithm 1 Training
算法训练
Algorithm 2 Samping
模型训练完,就不需要前向过程,只用反向做预测