Python 全栈体系【四阶】(四十九)

第五章 深度学习

十一、扩散模型

4. 附录:Diffusion的数学推导过程

Diffusion模型数学推导过程较为复杂,不要求掌握,但理解数学推导过程能更深入理解模型。故在此给出其详细推导过程。

4.1 数学前置知识
4.1.1 一元二次方程的方差公式

一元二次方程的标准形式为:

a x 2 + b x + c = 0 ax^2 + bx + c = 0 ax2+bx+c=0

其中, a , b , c a, b, c a,b,c为实数,且 a ≠ 0 a \neq 0 a=0, 其方差形式可以通过配方得到:

a ( x − b 2 a ) 2 + ( 4 a b − b 2 4 a ) = 0 a(x - \frac{b}{2a})^2 + (\frac{4ab - b^2}{4a}) = 0 a(x2ab)2+(4a4abb2)=0

其中, x x x是方程的解, a , b , c a, b, c a,b,c与标准形式相同.

4.1.2 概率统计

条件独立性

P ( x , y ∣ z ) = p ( x ∣ z ) p ( y ∣ z ) P(x, y | z) = p(x|z) p(y|z) P(x,yz)=p(xz)p(yz)

贝叶斯公式

p ( y ∣ x ) = p ( x ∣ y ) p ( y ) p ( x ) p(y|x) = \frac{p(x|y)p(y)}{p(x)} p(yx)=p(x)p(xy)p(y)

条件概率的链式法则

p ( x 1 , x 2 , . . . , x n ) = p ( x 1 ) ∏ i = 2 n   p ( x i ∣ x 1 , x 2 , . . . , x i − 1 ) = p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 1 , x 2 ) . . . p ( x n ∣ x 1 , x 2 , . . . , x n − 1 ) p(x_1, x_2, ..., x_n) = p(x_1) \prod_{i=2}^n \ p(x_i|x_1, x_2, ..., x_{i-1}) \\ = p(x_1)p(x_2|x_1)p(x_3|x_1,x_2)...p(x_n|x_1, x_2, ..., x_{n-1}) p(x1,x2,...,xn)=p(x1)i=2n p(xix1,x2,...,xi1)=p(x1)p(x2x1)p(x3x1,x2)...p(xnx1,x2,...,xn1)

高斯分布

N ( x ∣ μ , σ 2 ) = 1 2 π σ 2    e x p ( − ( x − μ ) 2 2 σ 2 ) N(x|\mu, \sigma^2) = \frac{1}{\sqrt{2 \pi \sigma^2}} \ \ exp(-\frac{(x-\mu)^2}{2 \sigma^2}) N(xμ,σ2)=2πσ2 1  exp(2σ2(xμ)2)

其中, x x x为随机变量, μ \mu μ为期望, σ \sigma σ为方差. 两个高斯分布的乘积仍为高斯分布,两个高斯分布相除$ h(x) = f(x) / g(x)$,如果标准差的比值 σ 1 / σ 2 \sigma1 / \sigma2 σ1/σ2等于一个常数k,则h(x)也是高斯分布.

4.1.3 概率图

马尔科夫性质是指一个过程(通常是时间序列)在给定当前状态下,未来状态的条件概率分布仅仅依赖于当前状态,而不依赖于过去的状态. 也就是说,当前状态是给定的,未来状态与过去状态是条件独立的. 它应用了条件独立假设.

p ( x t ∣ x 1 , x 2 , . . . , x t − 1 ) = p ( x t ∣ x t − 1 ) p(x_t | x_1, x_2, ..., x_{t-1}) = p(x_t | x_{t-1}) p(xtx1,x2,...,xt1)=p(xtxt1)

马尔科夫链式法则:设 x x x表示时间为 t t t的状态, p ( x 0 , x 1 , . . . , x n ) p(x_0, x_1, ... , x_n) p(x0,x1,...,xn)表示在时间 t = 0 , 1 , ⋯   , n t=0, 1, \cdots, n t=0,1,,n中状态的联合概率分布,那么根据马尔科夫性质和条件概率链式法则,可得马尔科夫链式法则的概率密度函数为:

p ( x 1 , x 2 , ⋯   , x n ) = p ( x 1 )   ∏ i = 2 n   p ( x i ∣ x i − 1 ) p(x_1, x_2, \cdots, x_n) = p(x_1) \ \prod_{i=2}^n \ p(x_i|x_{i-1}) p(x1,x2,,xn)=p(x1) i=2n p(xixi1)

4.1.4 变分推断

KL散度(Kullback-Leibler divergence),也叫相对熵,是衡量两个概率分布差异的一种方法. 对于两个概率分布 P P P Q Q Q,KL散度定义为:

D K L ( P ∣ ∣ Q ) = ∫ − ∞ ∞ p ( x ) l o g ( p ( x ) q ( x ) ) d x = E x ∼ p [ l o g ( p ( x ) q ( x ) ) ] D_{KL}(P||Q) = \int_{-\infty}^{\infty} p(x) log(\frac{p(x)}{q(x)}) dx = \mathbb E_{x \sim p} \bigg[ log(\frac{p(x)}{q(x)}) \bigg] DKL(P∣∣Q)=p(x)log(q(x)p(x))dx=Exp[log(q(x)p(x))]

其中, P P P Q Q Q是两个概率分布, p ( x ) p(x) p(x) q ( x ) q(x) q(x)分别为P和Q的概率密度函数. 当 P = Q P=Q P=Q时,KL散度为0,表示两个分布完全相同;当 P P P Q Q Q之间差距越大,KL散度越大,它实际上就是两个分布比值求log运算后的期望.

如果两个分布为高斯分布, p ( x ) = N ( u 1 , σ 1 2 ) , q ( x ) = N ( u 2 , σ 2 2 ) p(x) = N(u_1, \sigma_1 ^2), q(x) = N(u_2, \sigma_2 ^2) p(x)=N(u1,σ12),q(x)=N(u2,σ22),则两者的KL散度为:

D K L ( p ∣ ∣ q ) = l n σ 2 σ 1 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 D_{KL}(p||q) = ln \frac{\sigma_2}{\sigma_1} + \frac{\sigma_1 ^2 + (\mu_1 - \mu_2)^2}{2 \sigma_2 ^2} - \frac{1}{2} DKL(p∣∣q)=lnσ1σ2+2σ22σ12+(μ1μ2)221

其中, D K L ( p ∣ q ) D_{KL}(p|q) DKL(pq)表示以 p ( x ) p(x) p(x)为真实分布, q ( x ) q(x) q(x)为近似分布的KL散度.

4.1.5 重参数化技巧

在神经网络中,通常使用反向传播算法来计算参数的梯度,并用梯度下降法更新参数. 然而,对于含有随机变量的模型,如变分自编码器、GAN或文本扩散模型,直接使用反向传播算法则不行,因为随机变量不可导,无法计算梯度. 重参数化技巧通过把随机变量表示为一个确定性函数,和一个固定随机噪声变量之间的映射关系,使随机变量与模型参数之间的关系变得可导. 假设从一个均值为 μ \mu μ,标准差为 σ \sigma σ的高斯分布中采样一个向量 z z z,则可将采样过程表示为:

z = μ + σ ϵ z = \mu + \sigma \epsilon z=μ+σϵ

其中, ϵ \epsilon ϵ表示一个从均值为0,标准差为1的标准正态分布中采样的噪声向量. 这个过程本质上是将原来的采样过程分解为两个部分:一部分是确定的 μ \mu μ σ \sigma σ,另一部分是不确定的噪声 ϵ \epsilon ϵ.

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python全栈开发是指使用Python语言进行前后端开发的技术栈。Python作为一门简洁、易学、功能强大的编程语言,具有广泛的应用领域和良好的生态系统,因此在全栈开发中也有着广阔的前景。 Python全栈开发可以涵盖以下几个方面: 1. 前端开发Python可以使用各种框架(如Django、Flask、Tornado等)进行前端开发,构建用户友好的网页界面和交互体验。 2. 后端开发Python在后端开发方面有着丰富的库和框架支持,如Django、Flask、Pyramid等,可以用于构建高性能、可扩展的Web应用程序和API。 3. 数据库管理:Python提供了多种数据库连接库和ORM框架,如SQLAlchemy、Django ORM等,可以方便地进行数据库操作和管理。 4. 服务器管理:Python可以通过各种工具和库来进行服务器管理和自动化部署,如Fabric、Ansible等,提高开发效率和系统稳定性。 5. 数据分析与科学计算:Python拥有强大的数据分析和科学计算库,如NumPy、Pandas、Matplotlib等,可以进行数据处理、可视化和机器学习等任务。 Python全栈开发的前景非常广阔。随着互联网的快速发展,Web应用程序的需求不断增加,对全栈开发人员的需求也在增加。而Python作为一门易学易用的语言,具有丰富的库和框架支持,使得开发人员可以更快速地构建高质量的应用程序。此外,Python在数据分析和人工智能领域也有着广泛的应用,这为全栈开发人员提供了更多的发展机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬小帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值