《扩散模型 从原理到实战》Hugging Face (一)

文章目录

  • 前言
  • 第一章 扩散模型简介
    • 1.1 扩散模型的原理
      • 1.1.1 生成模型
      • 1.1.2 扩散过程


前言

Hugging Face最近出版了第一本中文书籍《扩散模型 从原理到实战》,其中内容关于扩散模型(Diffusion Model),和AIGC相关的内容较多(Hugging Face的Diffusion课程链接:https://github.com/huggingface/diffusion-models-class)。在这里,记录一下学习过程。
文章内容自用,如有侵权请及时与我联系


第一章 扩散模型简介

扩散模型(Diffusion Model)是一类十分先进的基于扩散思想的深度学习生成模型。生成模型除了扩散模型之外,还有出现较早的VAE(Varitational Auto-Encoder,变分自编码器)和GAN(Generative Adversarial Net, 生成对抗网络)等。虽然它们与扩散模型也有一些渊源,不过这并不在本书的讨论范围之内。同时本书也不会深入介绍扩散模型背后复杂的数学原理。即便如此,你依然可以基于本书介绍的内容学会通过相关代码来生成精美图像。

1.1 扩散模型的原理

扩散模型是一类生成模型,他运用物理热力学中的扩散思想,主要包括前向扩散和反向扩散两个过程。本节将介绍扩散模型的原理,其中不包含复杂的数学推导。

1.1.1 生成模型

在深度学习中,生成模型的目标是根据给定的样本(训练数据)生成新样本。首先给定一批训练数据X,假设其服从某种复杂的真实分布p(x),则给定的训练数据可视为从该分布中才养的观测样本x。如果能够从这些观测样本中估计出训练数据的真实分布,不就可以从该分布中源源不断地采样出新的样本了么?生成模型实际上就是这么做的,它的作用是估计训练数据的真实分布,并将其假定为q(x)。在深度学习中,这个过程称为拟合网络。

那么问题来了,怎么才能知道估计的分布q(x)和这是的分布p(x)的差距大不大呢?一种简单的思路是要求所有的训练数据采样自q(x)的概率最大。这种思路实际上来自统计学中最大似然估计的思想,它也是生成模型的基本思想之一,因此生成模型的学习目标就是对训练数据的分布进行建模。

1.1.2 扩散过程

最大似然估计思想已经在一些模型(如VAE)上应用并取得了不错的效果。扩散模型可看作一个更深层的VAE。扩散模型的表达能力更加丰富,而且其核心在于扩散过程。

扩散的思想来自物理学中的非平衡热力学分支。非平衡热力学专门研究某些不处于热力学平衡中的物理系统,其中最为典型的研究案例是一滴墨水在水中扩散的过程。在扩散开始之前,这地墨水会在水中的某个地方形成一个大的斑点,我们可以认为这是这滴墨水的初始状态,但要描述该初始状态的概率分布则很困难,因为这个概率分布非常复杂。随着扩散过程的进行,这滴墨水随着时间的推移逐步扩散到水中,水的颜色也逐渐变成这滴墨水的颜色。此时,墨水分子的概率分布将变得更加简单和均匀,这样我们就可以很轻松地用数学公式来描述其中的概率分布了。

在这种情况下,非平衡热力学就派上用场了,它可以描述这滴墨水随时间推移的扩散过程中每一个“时间”步(旨在将连续的时间过程离散化)状态的概率分布。若能够想到办法把这个过程反过来,就可以从简单的分布中逐步推断出复杂的分布。

公认最早的扩散模型DDPM(Denosising Diffusion Probabilisitic Model)的扩散原理就由此而来,不过仅有上述条件依然很难从简单的分布倒推出复杂的分布。DDPM还做了一些假设,例如假设扩散过程是马尔可夫过程(即每个时间步状态的概率分布仅由上一个时间步状态的概率分布加上当前时间步的高斯噪声得到),以及假设扩散过程的逆过程是高斯分布。

1)前向过程
前向过程是给数据添加噪声的过程。假设给定一批训练数据,数据分布为x0~q(x0),其中,0表示初始状态,即还没有开始扩散。如前所述,将前向加噪声的过程分为离散的多个时间步T,在每一个时间步t,给上一个时间步t-1的数据xt-1添加高斯噪声,从而生成带有噪声(简称“带噪”)的数据xt,同时数据xt也会被送入下一个时间步t+1以继续添加噪声。其中,噪声的方差是由一个位于区间(0,1)的固定值βt 确定的,均值则是由固定值βt和当前时刻“带噪”的数据分布确定。在反复迭代和加噪(即添加噪声)T次之后,只要T足够大,根据马尔科夫链的性质,最终就可以得到纯随机噪声分布的数据,即类似稳定墨水系统的状态。

接下来,我们用简单的公式描述一下上述过程。从时间步t-1到时间步t的单步扩散加噪声的数学表达式:
在这里插入图片描述

最终的噪声分布数学表达式如下:
在这里插入图片描述

2)反向过程
前向过程是将数据噪声化的过程,反向过程则是“去噪”的过程,即从随机噪声中迭代恢复出清晰数据的过程。

要从采样自高斯噪声的数据xt~N(0,I)的一个随机噪声中恢复出原始数据x0,就需要知道反向过程中每一步的图像分布状态转移。类似地,DDPM也将反向过程定义为一个马尔科夫链,只不过这个马尔科夫链是由一系列用神经网络参数化的高斯分布组成的,也就是需要训练的扩散模型。

从时间步t到时间步t-1的单步反向“去噪”过程的数学表达式如下:
在这里插入图片描述

由于反向过程的每一步都是参数化的高斯分布,因此可以分别求高分分布的均值和方差。这里略去根据贝叶斯公式推导的过程,最终得到时间步t-1的高斯分布q(xt-1|xt, x0)的均值和方差的数学表达式如下:
在这里插入图片描述
在这里插入图片描述

可以看出,方差是一个定量(扩散过程参数固定),而均值是一个依赖于x0和xt的函数,因此需要使用扩散模型来优化参数。

3)优化目标

扩散模型预测的是噪声残差,即要求后向过程中预测的噪声分布与前向过程中施加的噪声分布之间的“距离”最小。

下面我们从另一个角度来看看扩散模型。如果把中间产生的变量看成隐变量的话,那么扩散模型其实是一种包含T个隐变量的模型,因此可以看成更深层次的VAE,而VAE的损失函数可以使用变分推断来得到变分下界(variational lower bound)。至于具体过程,本书不做过多的公式推导,感兴趣的读者可以参考DDPM原文。

扩散模型的最终优化目标的数学表达式如下:

在这里插入图片描述

可以看出,在训练DDPM时,只要用一个简单的MSE(Mean Squared Error, 均方误差)损失来最小化前向过程施加的噪声分布和后向过程预测的噪声分布,就能实现最终的优化目标。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023企业网盘产品排行榜揭晓:选择最适合你的企业网盘工具

企业网盘产品已成为企业文件管理协作的主要选择之一,无论是在文件管理方面,还是团队协作上,企业网盘都表现优秀。为了帮助企业选到心怡的企业网盘产品,我们综合了不同的产品测评网站意见,整理了2023企业网盘产品排行榜…

【游戏开发教程】Unity Cinemachine快速上手,详细案例讲解(虚拟相机系统 | 新发出品 | 良心教程)

文章目录 一、前言二、插件下载三、案例1:第三人称自由视角,Free Look character场景1、场景演示2、组件参数2.1、CinemachineBrain:核心2.2、CinemachineFreeLook:第三人称自由视角相机2.2.1、设置Follow:跟随2.2.2、…

phpstorm动态调试

首先在phpstudy搭建好网站,在管理拓展开启xdebug拓展 查看php.ini配置已经更改 需要增添修改一下设置 [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php5.6.9nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_trace…

[Open-source tool] 可搭配PHP和SQL的表單開源工具_Form tools(1):簡介和建置

Form tools是一套可搭配PHP和SQL的表單開源工具,可讓開發者靈活運用,同時其有數個表單模板和應用模組供挑選,方便且彈性。Form tools已開發超過20年,為不同領域的需求者或開發者提供一個自由和開放的平台,使他們可建構…

STM32f103入门(1) 配置点亮Led灯

1 安装keil5 MDK 双击 MDK524a.EXE安装成功后管理员模式打开CID复制到破解软件 选择ARM生成代码复制到New License ID CodeAdd LIC破解完毕 2安装stm32芯片 可找资料自行安装 如下 3 创建工程 Project->new project 本篇芯片为stm32f103保存到自定义文件夹下在根目录下…

【SkyWalking】分布式服务追踪与调用链系统

1、基本介绍 SkyWalking是一个开源的观测平台,官网:Apache SkyWalking; 可监控:分布式追踪调用链 、jvm内存变化、监控报警、查看服务器基本配置信息。 2、SkyWalking架构原理 在整个skywalking的系统中,有三个角色&am…

WPS右键新建没有docx pptx xlsx 修复

解决wps右键没有新建文档的问题 右键没有新建PPT和Excel 1 wps自带的修复直接修复没有用 以上不管咋修复都没用 2 先编辑注册表 找到 HKEY_CLASSES_ROOT CTRLF搜文件扩展名 pptx docx xlsx 新建字符串 三种扩展名都一样操作 注册表编辑之后再次使用wps修复 注册组件&am…

K8S如何部署ZooKeeper以及如何进行ZooKeeper的平滑替换

前言 在之前的章节中,我们已经成功地将Dubbo项目迁移到了云环境。在这个过程中,我们选择了单机ZooKeeper作为注册中心。接下来,我们将探讨如何将单机ZooKeeper部署到云端,以及在上云过程中可能遇到的问题及解决方案。 ZooKeeper…

picGo+gitee+typora设置图床

picGogiteetypora设置图床 picGogitee设置图床下载picGo软件安装picGo软件gitee操作在gitee中创建仓库在gitee中配置私人令牌 配置picGo在插件设置中搜索gitee插件并进行下载 TyporapicGo设置Typora 下载Typora进行图像设置 picGogitee设置图床 当我了解picGogitee可以设置图床…

Vue3 [Day11]

Vue3的优势 create-vue搭建Vue3项目 node -v npm init vuelatest npm installVue3项目目录和关键文件 Vetur插件是Vue2的 Volarr插件是Vue3的 main.js import ./assets/main.css// new Vue() 创建一个应用实例 > createApp() // createRouter() createStore() // 将创建实…

TensorFlow中slim包的具体用法

TensorFlow中slim包的具体用法 1、训练脚本文件(该文件包含数据下载打包、模型训练,模型评估流程)3、模型训练1、数据集相关模块:2、设置网络模型模块3、数据预处理模块4、定义损失loss5、定义优化器模块 本次使用的TensorFlow版本…

【C++】—— C++11之可变参数模板

前言: 在C语言中,我们谈论了有关可变参数的相关知识。在C11中引入了一个新特性---即可变参数模板。本期,我们将要介绍的就是有关可变参数模板的相关知识!!! 目录 序言 (一)可变参…

0基础学习VR全景平台篇 第90篇:智慧眼-数据统计

【数据统计】是按不同条件去统计整个智慧眼项目中的热点,共包含四大块,分别是数据统计、分类热点、待审核、回收站,下面我们来逐一进行介绍。 1、数据统计 ① 可以按所属分类、场景分组、所属场景、热点类型以及输入热点名去筛选对应的热点&…

文生图模型之Stable Diffusion

原始文章地址 autoencoder CLIP text encoder tokenizer最大长度为77(CLIP训练时所采用的设置),当输入text的tokens数量超过77后,将进行截断,如果不足则进行paddings,这样将保证无论输入任何长度的文本&…

Kaniko在containerd中无特权快速构建并推送容器镜像

目录 一、kaniko是什么 二、kaniko工作原理 三、kanijo工作在Containerd上 基于serverless的考虑,我们选择了kaniko作为镜像打包工具,它是google提供了一种不需要特权就可以构建的docker镜像构建工具。 一、kaniko是什么 kaniko 是一种在容器或 Kube…

【Linux】进程状态|僵尸进程|孤儿进程

前言 本文继续深入讲解进程内容——进程状态。 一个进程包含有多种状态,有运行状态,阻塞状态,挂起状态,僵尸状态,死亡状态等等,其中,阻塞状态还包含深度睡眠和浅度睡眠状态。 个人主页&#xff…

Diffusion Models for Image Restoration and Enhancement – A Comprehensive Survey

图像恢复与增强的扩散模型综述 论文链接:https://arxiv.org/abs/2308.09388 项目地址:https://github.com/lixinustc/Awesome-diffusion-model-for-image-processing/ Abstract 图像恢复(IR)一直是低水平视觉领域不可或缺的一项具有挑战性的任务&…

算法竞赛入门【码蹄集新手村600题】(MT1220-1240)C语言

算法竞赛入门【码蹄集新手村600题】(MT1220-1240)C语言 目录MT1221 分数的总和MT1222 等差数列MT1223 N是什么MT1224 棋盘MT1225 复杂分数MT1226 解不等式MT1227 宝宝爬楼梯MT1228 宝宝抢糖果MT1229 搬家公司MT1230 圆周率MT1231圆周率IIMT1232 数字和MT1233 数字之…

适配器模式实现stack和queue

适配器模式实现stack和queue 什么是适配器模式?STL标准库中stack和queue的底层结构stack的模拟实现queue的模拟实现 什么是适配器模式? 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff…

时间和日期--Python

1. 时间:time模块 总结:2. datetime模块 相比与time模块,datetime模块的接口更直观、更容易调用 2.1 datetime模块定义的类 (1)datetime.date:表示日期的类。常用的属性有:year、month、day; &#xff…