Diffusion原理

news2024/11/30 2:49:06

Diffusion

文章目录

    • Diffusion
      • 前置知识
      • 基本介绍
      • 数学推导
        • 前向过程
        • 反向过程
        • 损失求解

前置知识

马尔科夫链

i i i时刻上的状态条件依赖于且仅依赖于 i − 1 i-1 i1时刻的状态条件,即

P ( x i ∣ x i − 1 , x i − 2 , . . . , x 1 ) = P ( x i ∣ x i − 1 ) P(x_i|x_{i-1},x_{i-2},...,x_1)=P(x_i|x_{i-1}) P(xixi1,xi2,...,x1)=P(xixi1)

重参数

重参数化技巧(reparameterization trick)是为了使从复杂分布中采样的过程能够进行梯度反传。具体来说,它将采样过程改写为一个确定性函数与一个独立的随机变量的组合,从而允许梯度传递。

传统采样方法将随机性直接融入采样过程,使得采样结果成为一个不可微函数(non-differentiable function),这意味着我们无法对参数进行梯度计算和反传。

在传统方法中: [ z ∼ N ( μ , σ 2 ) ] [ z \sim N(\mu, \sigma^2) ] [zN(μ,σ2)] 这里的 z z z是直接从分布中采样的随机变量, μ μ μ σ σ σ 作为参数,梯度无法通过随机采样直接传递给 $μ $和 σ σ σ

而在重参数化方法中,我们将随机性抽离出来,重构为一个确定性函数和一个独立的随机变量的组合: [ z = μ + σ ϵ ] [ z = \mu + \sigma \epsilon ] [z=μ+σϵ] 其中, ϵ ∼ N ( 0 , 1 ) ϵ∼N(0,1) ϵN(0,1) 是一个从标准正态分布中采样的随机变量。

这个重参数化公式使得 z z z变成了一个确定性函数 μ + σ ϵ μ+σϵ μ+σϵ,其中 μ μ μ σ σ σ是可微的参数,而 ϵ ϵ ϵ 的随机性仅通过固定的标准正态分布引入。这样,我们就可以对 μ μ μ σ σ σ进行梯度计算和反传,因为:

  • μ μ μ σ σ σ 是直接与损失函数相关的参数。
  • ϵ ϵ ϵ的随机性独立于参数 μ μ μ σ σ σ,因此不影响梯度计算。

总的来说,重参数化技巧通过将随机采样过程转换为一个可微函数,使得我们能够在训练过程中进行梯度反传,从而有效地优化模型参数。这样我们才能在如变分自编码器(VAE)等模型中进行有效的训练和参数更新。

基本介绍

Diffusion中文为扩散模型。主要包括两个过程,前向过程反向过程。无论是前向过程还是反向过程都是一个参数化的马尔可夫链,主要原理是:通过连续添加高斯噪声来破坏训练数据,然后通过反转这个噪声过程,来学习恢复数据。其原理图如下,

在这里插入图片描述

  • x 0 x_0 x0 x T x_T xT为逐步加噪过的前向过程,噪声是已知的,该过程从原始图片逐步加噪至一组纯噪声。
  • x T x_T xT x 0 x_0 x0 为将一组随机噪声还原为输入的过程。该过程需要学习一个去噪过程,直到还原一张图片。

数学推导

前向过程

假设给定真实图片样本 x 0 x_0 x0服从 x 0 ∼ q ( x ) x_0\sim q(x) x0q(x),Diffision的前向过程通过 T T T次累计对其添加高斯噪声,得到 x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT。每一步的大小是由一系列高斯分布方差的超参数 { β t ∈ ( 0 , 1 ) } t = 1 T \{\beta_t\in(0,1)\}_{t=1}^T { βt(0,1)}t=1T来控制的。前向过程由于每个时刻 t t t只与 t − 1 t-1 t1有关,所以也可以看做马尔科夫过程:
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q ( x t ∣ x t − 1 ) = N ( x t , 1 − β t x t − 1 , β t I ) q(x_{1:T}|x_0)=\prod_{t=1}^Tq(x_t|x_{t-1})\\ q(x_t|x_{t-1})=N(x_t,\sqrt{1-\beta_t}x_{t-1},\beta_tI) q(x1:Tx0)=t=1Tq(xtxt1)q(xtxt1)=N(xt,1βt xt1,βtI)
这个过程中,随着 t t t的增大, x t x_t xt越来越接近纯噪声。当 T → ∞ T\to\infty T, x t x_t xt是完全的高斯噪声。

我们要从某个分布中随机采样(高斯分布)一个样本,这个过程是无法反传递梯度的。而这个通过高斯噪声采样得到的 x t x_t xt的过程在Diffusion中到处都是,因此我们需要通过重参数技巧来使其可微。

假设要从高斯分布 z ∼ N ( z ; μ θ , σ θ 2 I ) z\sim N(z;\mu_{\theta},\sigma_{\theta}^2I) zN(z;μθ,σθ2I)中随机采样一个 z z z,有如下式,
z = μ θ + σ θ ϵ ,   ϵ ∼ N ( 0 , 1 ) z=\mu_{\theta}+\sigma_{\theta} \epsilon,~\epsilon\sim N(0,1) z=μθ+σθϵ, ϵN(0,1)
上式的 z z z依旧是有随机性的,且满足均值为 μ θ \mu_{\theta} μθ,方差为 σ θ 2 \sigma_{\theta}^2 σθ2的高斯分布。这里的 μ \mu μ σ θ 2 \sigma_{\theta}^2 σθ2可以由参数 θ \theta θ的神经网络推断得到,整个采样过程依旧梯度可导,随机性被转移到了 ϵ \epsilon ϵ上。

接着,我们可以直接由 x 0 x_0 x0 β t \beta_t βt得到 x t x_t xt

假设 α t = 1 − β t \alpha_t=1-\beta_t αt=1βt,并且 α ‾ t = ∏ i = 1 t α i \overline\alpha_t=\prod_{i=1}^{t}\alpha_i αt=i=1tαi,由重参数技巧展开 x t x_t xt可以得到,
q ( x t ∣ x t − 1 ) = N ( x t , 1 − β t x t − 1 , β t I ) x t = 1 − β t x t − 1 + β t ϵ t − 1 = α t x t − 1 + 1 − α t ϵ t − 1 = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t 1 − α t − 1 ⏟ σ 1 ϵ t − 2 + 1 − α t ⏟ σ 2 ϵ t − 1 \begin{aligned} q(x_t|x_{t-1})&=N(x_t,\sqrt{1-\beta_t}x_{t-1},\beta_tI)\\ x_t&=\sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}\epsilon_{t-1}\\ &=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon_{t-1}\\ &=\sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}\epsilon_{t-2})+\sqrt{1-\alpha_t}\epsilon_{t-1}\\ &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\underbrace{\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}}}_{\sigma_1}\boldsymbol{\epsilon}_{t-2}+\underbrace{\sqrt{1-\alpha_t}}_{\sigma_2}\boldsymbol{\epsilon}_{t-1} \end{aligned} q(xtxt1)xt=N(xt,1βt xt1,βtI)=1βt xt1+βt ϵt1=αt xt1+1αt ϵt1=αt (αt1 xt2+1αt1 ϵt2)+1αt ϵt1=αtαt1 xt2+σ1 αt 1αt1 ϵt2+σ2 1αt ϵt1
我们将后面两项单独看做两个分布,第一个分布服从 N ( 0 , σ 1 2 I ) N(0,\sigma_1^2I) N(0,σ12I),第二个分布服从 N ( 0 , σ 2 2 ) N(0,\sigma_2^2) N(0,σ22),进而由两个独立高斯分布的可加性,即 N ( 0 , σ 1 2 I ) + N ( 0 , σ 2 2 ) ∼ N ( 0 , ( σ 1 2 + σ 2 2 ) I ) N(0,\sigma_1^2I)+N(0,\sigma_2^2)\sim N(0,(\sigma_1^2+\sigma_2^2)I) N(0,σ12I)+N(0,σ22)N(0,(σ12+σ22)I),所以上式继续推导,
= α t α t − 1 x t − 2 + α t 1 − α t − 1 ⏟ σ 1 ϵ t − 2 + 1 − α t ⏟ σ 2 ϵ t − 1 = α t α t − 1 x t − 2 + ( α t 1 − α t − 1 ) 2 + ( 1 − α t ) 2 ϵ ‾ t − 2 = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ‾ t − 2 = . . . = α ‾ t x 0 + 1 − α ‾ t ϵ \begin{aligned} &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\underbrace{\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}}}_{\sigma_1}\boldsymbol{\epsilon}_{t-2}+\underbrace{\sqrt{1-\alpha_t}}_{\sigma_2}\boldsymbol{\epsilon}_{t-1}\\ &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\sqrt{(\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}})^2+(\sqrt{1-\alpha_t})^2}\overline\epsilon_{t-2}\\ &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}\overline\epsilon_{t-2}\\ &=...\\ &=\sqrt{\overline\alpha_t}\mathbf{x}_0+\sqrt{1-\overline\alpha_t}\boldsymbol\epsilon \end{aligned} =αtαt1 xt2+σ1 αt 1αt1 ϵt2+σ2 1αt ϵt1=αtαt1 xt2+(αt 1αt1 )2+(1αt )2 ϵt2=αtαt1 xt2+1αtαt1 ϵt2=...=αt x0+1αt ϵ
因此任意时刻的 x t x_t xt满足,
q ( x t ∣ x 0 ) = N ( x t ; α ‾ t x 0 , ( 1 − α ‾ t ) I ) q(x_t|x_0)=N(x_t;\sqrt{\overline\alpha_t}x_0,(1-\overline\alpha_t)I) q(xtx0)=N(xt;αt x0,(1αt)I)

反向过程

逆向是去噪的过程。如果能够逆转前向过程并从 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)采样,就可以从高斯噪声 x T ∼ N ( 0 , I ) x_T\sim N(0,I) xTN(0,I)还原出原图分布 x 0 ∼ q ( x ) x_0\sim q(x) x0q(x)。数学原理证明,如果 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)满足高斯分布且 β t \beta_t βt足够小, q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)仍然是一个高斯分布。然而我们无法简单推断 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt),因此我们使用神经网络(参数为 θ \theta θ)去预测这样的一个逆向的分布 p θ p_\theta pθ
p θ ( X 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , ∑ θ ( x t , t ) ) p_\theta(X_{0:T})=p(x_T)\prod_{t=1}^Tp_\theta(x_{t-1}|x_t)\\ p_\theta(x_{t-1}|x_t)=N(x_{t-1};\mu_\theta(x_t,t),\sum_\theta(x_t,t))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以通俗易懂的仓库来讲解JVM内存模型

JVM内存模型可以想象成一个大型的仓库,这个仓库被分成了几个不同的区域,每个区域都有特定的用途和规则。下面我们用一个仓库的比喻来介绍JVM内存模型: 仓库大门(JVM启动): 当JVM启动时,就像打开…

排查PHP服务器CPU占用率高的问题

排查PHP服务器CPU占用率高的问题通常可以通过以下步骤进行: 使用top或htop命令:这些命令可以实时显示服务器上各个进程的CPU和内存使用情况。找到CPU使用率高的进程。 查看进程日志:如果PHP-FPM或Apache等服务器进程的日志记录了具体的请求…

Django入门教程——用户管理实现

第六章 用户管理实现 教学目的 复习数据的增删改查的实现。了解数据MD5加密算法以及实现模型表单中,自定义控件的使用中间件的原理和使用 需求分析 系统问题 员工档案涉及到员工的秘密,不能让任何人都可以看到,主要是人事部门进行数据的…

su user更换用户后无法打开图形屏幕Cannot open your terminal ‘/dev/pts/0‘ 解决办法

我在docker内使用了su john更换了用户,执行petalinux-config -c kernel时打不开图形屏幕窗口,需要执行命令script /dev/null 进入docker和配置状态的所有命令行命令如下: johnjohn-hp:~/zynq$ ./docker_ubuntu16.sh rootjohn-hp:/home/john/…

2024最新版鸿蒙纯血原生应用开发教程文档丨HarmonyOS 开发准备-成为华为开发者

1. 成为华为开发者 在开始应用开发前,需要先完成以下准备工作。在华为开发者联盟网站上,注册成为开发者,并完成实名认证,从而享受联盟开放的各类能力和服务。 1.1. 注册账号 如果您已经有华为开发者联盟帐号,点击右…

记录如何在RK3588板子上跑通paddle的OCR模型

官网文档地址 rknn_zoo RKNPU2_SDK RKNN Model Zoo 一、PC电脑是Ubuntu22.04系统中完成环境搭建(板子是20.04) 安装模型转换环境 ​conda create -n rknn2 python3.10 conda activate rknn2 安装Ubuntu依赖包 su…

CloudStack云平台搭建:XenServer服务器系统安装

1.打开VMware虚拟机,点击“创建新的虚拟机” 2. 点击“自定义(高级)” → “下一步” 3. 点击“下一步” 4. 点击“稍后安装操作系统” → “下一步” 5. 选择“其他” → “其他64位” → “下一步” 6. 修改“虚拟机名称” 、“位置”&…

记录运维大屏监控平台的开发、springboot实现服务器性能监测分析系统

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7…

h5小游戏5--杀死国王(附源码)

源代码如下 1.游戏基本操作 用空格键攻击,kill the king。 css样式源码 charset "UTF-8";font-face {font-family: "AddLGBitmap09";src: url("https://assets.codepen.io/217233/AddLGBitmap09.woff2") format("woff2"…

Canvas简历编辑器-选中绘制与拖拽多选交互设计

Canvas简历编辑器-选中绘制与拖拽多选交互设计 在之前我们聊了聊如何基于Canvas与基本事件组合实现了轻量级DOM,并且在此基础上实现了如何进行管理事件以及多层级渲染的能力设计。那么此时我们就依然在轻量级DOM的基础上,关注于实现选中绘制与拖拽多选交…

系统安全隐患设计面面观

如果只是靠程序员去设计系统的话,估计会有很多安全问题,所以才需要有架构师、设计师,来面面俱到的设计系统安全模块,来应对外部的威胁。 功能开发在系统设计中往往优先考虑,但忽视安全问题可能导致重大隐患。为了解决…

在线竞赛资源共享和交流:如何利用平台高效备战信息学竞赛

在备战信息学竞赛的过程中,资源共享和交流已经成为不可或缺的一部分。如今,在线平台提供了丰富的学习资源、讨论机会和备考支持,考生可以通过真题解析、考点讨论群、备赛社区等方式,与其他考生互动,提升学习效果。本文…

中国五矿集团采购信息

打开https://ec.minmetals.com.cn/open/home/purchase-info点击第二页可以看到参数被加密了 要使用js的hook脚本为 (function() { var stringify_ JSON.stringify; JSON.stringify function(arg) { console.log("您猜怎么着?断住了! ——> …

不到 30 元的 AX1800 路由器!捷稀 JCG Q20 免拆机刷 Padavan / OpenWRT

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 上次把移动送的 JCG Q30 Pro 刷机之后,又从家里翻出个之前电信送的伊拉克战损 AX1800 路由器,意外的发现品牌也是 JCG,型号是 Q20,想着能不能也给它刷了。目…

企业内训|LLM大模型在服务器和IT网络运维中的应用-某日企IT运维部门

本课程是为某在华日资企业集团的IT运维部门专门定制开发的企业培训课程,本课程旨在深入探讨大型语言模型(LLM)在服务器及IT网络运维中的应用,结合当前技术趋势与行业需求,帮助学员掌握LLM如何为运维工作赋能。通过系统…

遗传算法与深度学习实战(20)——使用进化策略自动超参数优化

遗传算法与深度学习实战(20)——使用进化策略自动超参数优化 0. 前言1. 将进化策略应用于超参数优化2. 使用主成分分析扩展维度小结系列链接 0. 前言 我们已经学习了遗传算法 (Genetic Algorithms, GA) 的工作原理,并使用进化策略 (Evolutio…

进入 Masteria:第三周游戏指南

Alpha 第四季在 The Sandbox 中继续展开,这次为大家带来一个全新的星球!踏上 Masteria——一个专注于追求完美的星球。在这个星球的严酷环境中训练、竞争,并磨练你的技能。无论是通过「The Voice: 教练对决」细致打磨你的声乐技巧&#xff0c…

java-web-day5

1.spring-boot-web入门 目标: 开始最基本的web应用的构建 使用浏览器访问后端, 后端给浏览器返回HelloController 流程: 1.创建springboot工程, 填写模块信息, 并勾选web开发的相关依赖 注意: 在新版idea中模块创建时java下拉框只能选17, 21, 23 这里选17, maven版本是3.6.3, 很…

【数据结构】二叉树——堆

一、二叉树的概念与结构 二叉树的概念 二叉树是树的一种,二叉树的特殊之处在于,每个根节点都可以有两个子节点,可以两个子节点都为空,或者一个为空,一个不为空,或者两个都有数,在构建二叉树的…

scala 权限

一.访问权限 idea实例 关于protected: