【生成式AI】Diffusion Model 原理详解

news2024/11/18 2:55:52

Diffusion Model

【碎碎念】感觉Diffusion Model里面的数学公式太多了QwQ,所以自己稍微梳理一下。
我自己是听B站的课程:李宏毅课程听懂的,感觉讲得很清楚

概念模型

请添加图片描述
Diffusion Model的基本思想就是:

  • 把一张图片通过 T T Tstep 添加高斯噪声,最后会形成一个高斯分布, N ( 0 , I ) \mathcal N(0,\mathbf{I}) N(0,I)
  • 把添加噪声的每步图片 x 0 ⋯ x T x_0\cdots x_T x0xT看成随机过程,则形成一个马尔可夫链,每一步是已知的 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)
  • 设置一个Network,网络中的参数 θ \theta θ作为先验,如果能预测出逆过程 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt),就可以从噪声图片生成图片

算法流程

在这里插入图片描述

主算法流程如上图,解释以下大致思路:
训练部分:

  • Sample一张图片 x 0 \mathbf{x}_0 x0
  • 选择一个步骤 t t t
  • 优化目标:Denoise网络,给定 t t t t t t步的噪图,能够预测 t − 1 t-1 t1步到 t t t步添加的噪声长什么样子

推理部分:

  • Sample一张噪图
  • T T T步开始一步一步通过Denoise推理出真实图片

实际上上述只是一个非常粗略的解释,要真正理解这个算法,还有如下几个问题要解决:

  1. 如何生成 t t t步的噪图
  2. 形式化Denoise的优化目标

生成t步的噪图

每一步逐渐混入方差为 β i \beta_i βi的高斯噪声,得到下面的式子
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(\mathbf{x}_t|\mathbf{x}_{t-1})=\mathcal N(\mathbf{x}_t;\sqrt{1-\beta_t} \mathbf{x}_{t-1},\beta_t \mathbf{I}) q(xtxt1)=N(xt;1βt xt1,βtI)
用重参数化的写法是:
x t = 1 − β t x t − 1 + β t ϵ t ϵ t ∼ N ( 0 , I ) \mathbf{x_t}=\sqrt{1-\beta_t}\mathbf{x}_{t-1}+\sqrt \beta_t \epsilon_t \\ \epsilon_t\sim\mathcal N(0,\mathbf{I}) xt=1βt xt1+β tϵtϵtN(0,I)

进一步推到

x t = 1 − β t x t − 1 + β t ϵ t = 1 − β t ( 1 − β t − 1 x t − 2 + β t − 1 ϵ t − 1 ) + β t ϵ t = ( 1 − β t ) ( 1 − β t − 1 ) x t − 2 + 1 − ( 1 − β t ) ( 1 − β t − 1 ) ϵ = ⋯ = α t x 0 + 1 − α t ϵ , α t = ∏ i = 1 t 1 − β t \mathbf{x}_t=\sqrt {1 - \beta_t} \mathbf{x}_{t-1}+\sqrt {\beta_t} \epsilon_t \\ = \sqrt{1-\beta_t}(\sqrt{1-\beta_{t-1}}\mathbf{x}_{t-2}+\sqrt {\beta_{t-1}}\epsilon_{t-1})+\sqrt {\beta_t} \epsilon_t \\ =\sqrt{(1-\beta_t)(1-\beta_{t-1})}\mathbf{x}_{t-2}+\sqrt{1 - (1 - \beta_t)(1-\beta_{t-1})}\epsilon \\ =\cdots \\ = \sqrt{\alpha_t}\mathbf{x}_0+\sqrt{1-\alpha_t}\mathbf\epsilon,\\ \alpha_t=\prod_{i=1}^t 1-\beta_t xt=1βt xt1+βt ϵt=1βt (1βt1 xt2+βt1 ϵt1)+βt ϵt=(1βt)(1βt1) xt2+1(1βt)(1βt1) ϵ==αt x0+1αt ϵ,αt=i=1t1βt

这是根据高斯的可加性原理推导得出的结论。也就是,不需要一步步加,可以一次性推导到位。

优化目标

假设整体的 T T T步网络生成的概率分布是 p θ p_\theta pθ,那么其实优化的目标可以是:
max ⁡ θ E x 0 ∼ p d a t a ( x 0 ) [ l o g p θ ( x 0 ) ] \max_\theta \mathbb{E}_{x_0\sim p_{data}(x_0)}[logp_\theta(\mathbf{x}_0)] θmaxEx0pdata(x0)[logpθ(x0)]

这个优化目标可以解释为Sample所有数据集的图片,这些图片被 p θ p_\theta pθ 生成的概率乘积最大(取了个log)

接下来其实利用了一个著名的VLB(变分下界)的定理,这个定理再VAE中使用过,具体的证明可以看视频,这里直接出结论:
log ⁡ p θ ( x 0 ) ≥ E x 1 ⋯ x T ∼ q ( x 1 ⋯ x T ∣ x 0 ) [ log ⁡ p θ ( x 0 ⋯ x T ) q ( x 1 ⋯ x T ∣ x 0 ) ] \log p_\theta(\mathbf{x}_0)\geq \mathbb E_{\mathbf{x}_1\cdots \mathbf{x}_T\sim q(\mathbf{x}_1\cdots \mathbf{x}_T|\mathbf{x}_0)}[\log \frac{p_\theta(\mathbf{x}_0\cdots \mathbf{x}_T)}{q(\mathbf{x_1}\cdots \mathbf{x}_T|\mathbf{x}_0)}] logpθ(x0)Ex1xTq(x1xTx0)[logq(x1xTx0)pθ(x0xT)]

原论文经过了一番精彩的数学推导(注意,这段推导是取符号转化成最小化的Loss,所以符号要反着看):
在这里插入图片描述
在这里插入图片描述
关于这段推导变换的精妙之处,先占个坑,暂时没想出来~
注意到 p ( x T ) p(\mathbf{x}_T) p(xT)就是变换到最后的噪声图,而 q ( x T ∣ x 0 ) q(\mathbf{x}_T|\mathbf{x}_0) q(xTx0)是一个固定的过程,这两者都和网络没关系,所以可以直接在优化项中舍去。

q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0) q(xt1xt,x0)的推导

q ( x t − 1 ∣ x t , x 0 ) = q ( x t − 1 , x t , x 0 ) q ( x t , x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x 0 ) q ( x t ∣ x 0 ) q ( x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(x_{t-1}|x_t,x_0)=\frac{q(x_{t-1},x_t,x_0)}{q(x_t,x_0)}=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)q(x_0)}{q(x_t|x_0)q(x_0)}=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)} q(xt1xt,x0)=q(xt,x0)q(xt1,xt,x0)=q(xtx0)q(x0)q(xtxt1)q(xt1x0)q(x0)=q(xtx0)q(xtxt1)q(xt1x0)
发现等式后面每项都是已知的,然后开始经过一番魔幻推导
在这里插入图片描述
结果就是还是一个高斯分布
梳理一下思路:我们现在有两个高斯分布 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0) p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt),后者就是我们的降噪网络,我们的目标是让我们的降噪网络和 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的分布尽量接近。
再进一步思考,实际上 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的意思就是给定初始图片, t → t − 1 t\to t-1 tt1这个逆过程的分布
而我们的网络是要生成一个降噪网络,这个优化目标告诉我们,需要在没有初始图片的情况下去拟合这个 t → t − 1 t\to t-1 tt1

非常的合理,只不过使用了严谨的数学公式去推导了这个过程罢了。
关于最后一项,说是和VAE类似的处理方法,先占个坑,不解释

优化过程

  • q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)是一个高斯分布,那我们让 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)也是高斯分布就行了。
  • q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的方差是确定的,那我们让 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)的方差和它一样就行了
  • 所以最后我们需要最小化的,就是两者的平均值。

继续化简
在这里插入图片描述
我们让两者形式一致,最后我们需要predict只剩下最后一小项
在这里插入图片描述
这就是Alog1,2的来源
这篇文章到这里就暂告一段落了,参考文献:
https://arxiv.org/pdf/2208.11970.pdf

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

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

相关文章

Redis类型检查与命令多态

Redis中用于操作键的命令基本上可以分为两种类型。 其中一种命令可以对任何类型的键执行,比如说DEL命令、EXPIRE命令 、RENAME命令、TYPE命令、OBJECT命令等。 举个例子,以下代码就展示了使用DEL命令来删除三种不同类型的键: # 字符串键 redis> SE…

实习碎碎念

话说实习一周多了,学到的比自学一个月都多~~~加油狗子你最棒!!! 环境搭建坑死了 SSM框架环境配置 Ideamavenjdktomcatnavicat https://www.cnblogs.com/seigann/p/14528551.htmlhttps://www.cnblogs.com/seigann/p/14528551.h…

聚焦| 900万次点赞量 藏家绣娘直播大赛首秀引关注

义乌00后大学生驻村导师提交援藏教学成绩单 2023年7月30日,第三届全国“乡村振兴智创未来”巾帼共兴创业创新(丹巴分赛区)大赛暨“川府农博”试运行启动仪式在丹巴县高级中学体育馆举办。 本次比赛由金华市妇女联合会指导,中共丹…

C语言三子棋小游戏--数组的应用

注:在最后面,完整源码会以两种形式展现。在讲解时,以三个源文件的形式。 前言:三子棋,顾名思义,就是三个子连在一起就可以胜出。在本节我们要介绍的三子棋模式是这样子的:在键盘输入坐标&#x…

Python-OpenCV中的图像处理-物体跟踪

Python-OpenCV中的图像处理-物体跟踪 物体跟踪 物体跟踪 现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这一点来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的…

LAMMPS推出GUI界面,模拟从未如此简单

lammps一直没有编辑界面,对新手来说特别的不友好,不过,今年8月4号lammps推出了一款包含界面的版本。 运行效果如下图所示,这个版本带有独立的编辑界面,可以使用菜单新建或者打开in文件,也可以使用菜单运行…

python中 “”和“and”的区别

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 1、“&”和“and”有本质区别,属于不同类型的运行符号。& 是位运算;and 是逻辑运算。 2、首先是&:该运输符属于字符串的连接运算符,例如,“w“&”c…

FP独立站苦于投放广告?GG斗篷搞定难题!

在做FP独立站时,卖家常常面临各种难题。因为产品不是正品,因此广告很难过审。然而,为了获得利润,卖家总能找到适合的解决办法。以前,FP卖家常常使用SEO站群的方式,在搜索引擎上抢占免费流量,同时…

Linux-PG+postgres安装

一、PG数据库安装 1. 获取所需依赖包 wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/llvm5.0-devel-5.0.1-7.el7.x86_64.rpm wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/llvm5.0-5.0.1-7.el7.x86_64.rpm wge…

MES与ERP到底有什么不同?MES和ERP的区别

MES和ERP两款系统,在生产制造界早已经名声响亮,但至今还是有很多人分不清这两个系统究竟有什么区别,下面就来讲解一下。 要区分两者,首先就要弄清楚它们是什么。 MES系统 MES全称为制造执行系统(Manufacturing Execu…

AMEYA360:日本SUSUMU推出NRG系列薄膜电阻器

SUSUMU是AMEYA360旗下的代理品牌之一。SUSUMU公司成立于1964年,专业从事生产供应片式电阻、贴片电阻、径向引线电阻、高频表贴原件和扼流圈等。今天跟随小编的步伐一起了解一下Susumu公司NRG系列贴片电阻器。 Susumu NRG系列薄膜电阻器是由非磁性材料制成&#xff0…

Idea创建maven管理的web项目

如果你想在项目中添加一个传统的 src 目录来存放源代码,可以按照以下步骤操作: 1. 在项目视图中,右键单击项目名称,选择 “New” -> “Directory”。 2. 在弹出的对话框中,输入目录名称为 “src”,然后…

虹科新闻 | 虹科与Power-MI正式建立合作伙伴关系

近日,虹科与Power-MI正式建立合作伙伴关系,双方就工业预测性维护领域进行深入的交流与合作,未来将共同致力于为亚洲市场提供完整的、更高质量的预测性维护解决方案,解决亚洲客户的工业自动化挑战。 虹科与Power-MI都表示十分期待…

C语言和C++的区别在哪?如何自学C++?

C语言和C是两种不同的编程语言,它们在语法、特性和用途上有一些区别。以下是C语言和C的一些主要区别: 面向对象编程:C是一种支持面向对象编程的语言,它在C语言的基础上添加了类、对象、继承、多态等面向对象的特性。而C语言是一种…

HbuilderX的下载和使用

官网https://www.dcloud.io/hbuilderx.html

380. O(1) 时间插入、删除和获取随机元素

380. O(1时间插入、删除和获取随机元素 原题链接:完成情况:解题思路:参考代码: 原题链接: 380. O(1) 时间插入、删除和获取随机元素 https://leetcode.cn/problems/insert-delete-getrandom-o1/description/ 完成情…

深度对话|如何设计合适的网络经济激励措施

近日,我们与Mysten Labs的首席经济学家Alonso de Gortari进行了对话,讨论了如何在网络运营商和参与者之间找到激励措施的平衡,以及Sui的经济如何不断发展。 是什么让您选择将自己的经济学背景应用于区块链和Web3领域? 起初&…

Java课题笔记~ Spring 概述

Spring 框架 一、Spring 概述 1、Spring 框架是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。 Spring…

Java密码学

密码学 1.1 密码学基本概念 密码在我们的生活中有着重要的作用,那么密码究竟来自何方,为何会产生呢? 密码学是网络安全、信息安全、区块链等产品的基础,常见的非对称加密、对称加密、散列函数等,都属于密码学范畴。…

云安全攻防(八)之 Docker Remote API 未授权访问逃逸

Docker Remote API 未授权访问逃逸 基础知识 Docker Remote API 是一个取代远程命令行界面(rcli)的REST API,其默认绑定2375端口,如管理员对其配置不当可导致未授权访问漏洞。攻击者利用 docker client 或者 http 直接请求就可以…