何恺明新作 l-DAE:解构扩散模型

何恺明新作 l-DAE:解构扩散模型

    • 提出背景
      • 扩散模型步骤
      • 如何在不影响数据表征能力的同时简化模型?
      • 如何进一步推动模型向经典DAE靠拢?
      • 如何去除对生成任务设计的DDM中不适用于自监督学习的部分?
      • 如何改进DDM以专注于清晰图像表示的学习?

 


提出背景

论文:https://arxiv.org/pdf/2401.14404.pdf

我们有一堆带噪声的照片,我们的任务是清理这些照片上的噪声,让它们看起来更清晰。

去噪扩散模型(DDM)就像是一个清洁工,它不仅能把照片清理得非常干净,还能通过这个清洁过程学会识别照片中的内容。

但是,这个清洁工原本是被设计来做清洁工作的,人们开始好奇它是怎么学会识别照片内容的。

是因为它清理照片的方式特别(去噪过程),还是因为它在清理时用的一些特殊工具(扩散过程)?

我们的研究就是要探究这个问题。

我们尝试了各种方法,最后发现,关键其实在于这个清洁工如何看待照片中的每一小块内容,把它们转换成更简单的形式来理解。

这有点像是给它一副眼镜,让它能更好地看清楚照片的细节。

通过这个过程,我们设计出了一种简单的方法,让清洁工不仅能清理照片,还能更好地理解照片内容。

我们的方法虽然不是最顶尖的,但比之前的方法有了很大的进步,也让我们看到了未来有更多可能性去改进这个过程。

在这里插入图片描述

图是一种被称为“潜在去噪自编码器”(L-DAE)的技术。它是一种图像处理方法,用于从带有噪声的图片中恢复出清晰的图片。

  1. 原始图像:左下角是一个没有噪声的原始图像,这是一张蝴蝶停在黄色花朵上的照片。

  2. 噪声添加:通过一种技术叫做“片段式主成分分析”(patch-wise PCA),原始图像被转化到一个叫做“潜在空间”的地方,在这个过程中添加了噪声。

    这就是中下角的图像,你可以看到图像变得模糊和杂乱,就像被随机的色块覆盖了一样。

  3. 自编码器:在噪声图像的基础上,一个自编码器开始工作,包括一个编码器和一个解码器。

    编码器的作用是将噪声图像转换为一个更简洁的内部表示,而解码器则尝试从这个表示中重建原始图像。

  4. 去噪图像:最终,自编码器输出了一个去除噪声的图像,这是右下角的图像。

    尽管噪声被去除,图像中的细节和蝴蝶的特征都得以保留。

这个技术的目标是模仿和简化更复杂的去噪扩散模型(DDM),同时尝试保持与经典去噪自编码器(DAE)相似的学习性能。

这张图上方的流程图解释了整个过程:从原始图像开始,通过PCA添加噪声,然后通过自编码器进行编码和解码,最终得到去噪图像。

这种方法是自监督学习的一种形式,这意味着它可以通过观察大量的例子自己学习去噪,而不需要人为指定噪声和去噪之间的关系。

在这里插入图片描述
这幅图是两种不同的机器学习模型,用于处理图像的去噪任务:

  1. 经典的去噪自编码器(DAE):这个模型包括三个部分:

    • 噪声:在输入图像上添加噪声。
    • 编码器:编码器接收带噪声的图像,将其编码到某种内部表示。
    • 解码器:解码器尝试从内部表示中恢复去噪后的图像。
  2. 现代去噪扩散模型(DDM):这个模型是在潜在空间上操作的去噪模型,它包括四个部分:

    • tokenizer:这个组件将原始图像转换成潜在的表示形式。
    • 噪声:就像经典DAE一样,它在潜在表示上添加噪声。
    • 编码器:编码器学习如何处理带噪声的潜在表示。
    • 解码器:解码器从编码器输出的表示中恢复出去噪后的潜在表示,然后可以转换回去噪后的图像。

图中的(a)部分展示的是传统方法,直接在图像空间上添加和预测噪声

而(b)部分展示的是现代方法,如LDM(潜在扩散模型)和DIT(扩散变换器),它们在潜在空间上添加和预测噪声,而不是直接在图像空间上操作。

这种现代方法通常能够更有效地处理高维数据,如图像,因为潜在空间的维度通常远小于原始图像空间的维度,这可以提高处理速度并提升去噪效果。

扩散模型步骤

扩散模型是一类深度生成模型,它们通过模拟数据的扩散过程(即逐渐引入噪声到数据中)来学习数据的分布。

在去噪扩散模型(Denoising Diffusion Models, DDM)中,这一过程被逆转用来生成数据:模型学习如何逐步从噪声中恢复出干净的数据。

下面是解构现代去噪扩散模型的步骤和方法:

  1. Tokenizer(向量化)

    • 这一步是将高维的图像数据映射到一个低维的潜在空间(latent space)。

     
    潜在空间中的向量可以捕捉到图像的重要特征,但是维度更低,这使得处理起来更高效。

  2. 添加噪声

    • 在潜在空间中,这些低维的表示(latent representations)会被逐渐添加噪声,这个过程称为扩散过程。

     
    添加噪声是一个逐步的过程,在每一步中都会引入一些噪声,直到数据完全变成噪声。

  3. 训练去噪模型

    • 训练一个去噪模型来预测每一步扩散过程中添加的噪声。

     
    这个模型的目标是学习如何从带噪声的潜在表示中恢复出原始的潜在表示。

  4. 采样(生成)过程

    • 通过逆向运行扩散过程来生成新的数据。
    • 从纯噪声开始,模型逐步减少噪声,逐步恢复出清晰的数据。

解构这个模型的关键点在于理解如何在潜在空间上进行扩散和去噪过程,而不是直接在原始的数据空间上进行。

如何在不影响数据表征能力的同时简化模型?

在扩散模型中,到底哪个步骤最重要?

实验发现,让 DAE 得到好表征的是低维隐空间,而不是Tokenizer(向量化)。

  • 说明复杂的tokenizer可能不是学习好的数据表示所必需的
  • 简化tokenizer相当于使用更简单的厨具来达到相同的烹饪效果

如何在不影响数据表征能力的同时简化模型?

  • 实验发现,可通过替换复杂的VQGAN tokenizer为更简单的PCA tokenizer

不同的图像处理方法:

  • TA们被用于将图像分解成较小的片段,进而进行深入的特征提取。
    在这里插入图片描述

  • Patch-wise VAE 分词器: 这是一种处理图像的方法,使用了一种称为自编码器的技术,但去掉了一些复杂的数学限制,让它变得更简单。

  • Patch-wise AE 分词器: 这个方法更简单,只是在图像的小块上应用基本的编码和解码过程。

  • Patch-wise PCA 分词器: 这是最基本的方法,用一种称为主成分分析的技术来处理图像的小块。PCA 是一种不需要复杂训练就能找到图像主要特征的方法。

在这里插入图片描述
即使是最基本的PCA方法也表现出色,甚至简单的图像块处理方法有时候比复杂的方法效果更好。

所以,完全可以用简单的代替复杂的。

  • 把复杂的VQGAN tokenizer 换为 更简单的PCA tokenizer。

如何进一步推动模型向经典DAE靠拢?

直接在图像空间操作有助于理解和提高模型的直观性和可解释性。

使用逆PCA直接在图像空间操作,而非仅在隐空间。

如何去除对生成任务设计的DDM中不适用于自监督学习的部分?

因为类别条件化处理会限制模型学习更普遍的数据表示。

移除DDM的类别条件化处理。

如何改进DDM以专注于清晰图像表示的学习?

原始噪声调度太侧重于噪声图像,不利于学习清晰图像表示。

替换噪声调度,让模型更多地关注清晰的图像。

 


如果将这个过程比作学习做菜的过程,那么:

  • 去除类别条件化处理就像是摒弃菜谱中不必要的复杂步骤,专注于基本的烹饪技巧。
  • 简化tokenizer相当于使用更简单的厨具来达到相同的烹饪效果。
  • 改进噪声调度类似于调整烤箱温度,更加关注食物烹饪的质量而非速度。
  • 直接在图像空间操作就像是直接在炉子上(图像上)调整火候,而不是依赖定时器(隐空间)的间接指示。

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

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

相关文章

2024华为软件测试笔试面试真题,抓紧收藏不然就看不到了

一、选择题 1、对计算机软件和硬件资源进行管理和控制的软件是(D) A.文件管理程序 B.输入输出管理程序 C.命令出来程序 D.操作系统 2、在没有需求文档和产品说明书的情况下只有哪一种测试方法可以进行的(A) A.错误推测法测试…

Docker 快速入门实操教程(完结)

Docker 快速入门实操教程(完结) Docker,启动! 如果安装好Docker不知道怎么使用,不理解各个名词的概念,不太了解各个功能的用途,这篇文章应该会对你有帮助。 前置条件:已经安装Doc…

IOS 发布遇到“Unable to authenticate with App Store Connect”错误咋解决?

问题: 在开发ios app后,先发布adhoc版本,测试通过后,再发布testflight版本测试,但是可能会遇到一下问题。 解决办法: 在Signing &Capabilities中,在ios下边要指定有发布权限的Team账号&a…

pytorch基础2-数据集与归一化

专题链接:https://blog.csdn.net/qq_33345365/category_12591348.html 本教程翻译自微软教程:https://learn.microsoft.com/en-us/training/paths/pytorch-fundamentals/ 初次编辑:2024/3/2;最后编辑:2024/3/2 本教程…

迪杰斯特拉算法的具体应用

fill与memset的区别介绍 例一 #include <iostream> #include <algorithm> using namespace std; const int maxn500; const int INF1000000000; bool isin[maxn]{false}; int G[maxn][maxn]; int path[maxn],rescue[maxn],num[maxn]; int weight[maxn]; int cityn…

探索数据宇宙:深入解析大数据分析与管理技术

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua&#xff0c;在这里我会分享我的知识和经验。&#x…

第六课:NIO简介

一、传统BIO的缺点 BIO属于同步阻塞行IO,在服务器的实现模型为&#xff0c;每一个连接都要对应一个线程。当客户端有连接请求的时候&#xff0c;服务器端需要启动一个新的线程与之对应处理&#xff0c;这个模型有很多缺陷。当客户端不做出进一步IO请求的时候&#xff0c;服务器…

《Spring Security 简易速速上手小册》第4章 授权与角色管理(2024 最新版)

文章目录 4.1 理解授权4.1.1 基础知识详解授权的核心授权策略方法级安全动态权限检查 4.1.2 主要案例&#xff1a;基于角色的页面访问控制案例 Demo 4.1.3 拓展案例 1&#xff1a;自定义投票策略案例 Demo测试自定义投票策略 4.1.4 拓展案例 2&#xff1a;使用方法级安全进行细…

c语言数据结构(5)——栈

欢迎来到博主的专栏——C语言数据结构 博主id&#xff1a;代码小豪 文章目录 栈栈的顺序存储结构栈的插入空栈的初始化栈的删除判断空栈读取栈顶元素数据 实现顺序栈的所有代码栈的链式存储结构链式栈的初始化链式栈的入栈操作链式栈的出栈操作 实现链式栈的所有代码 栈 栈是…

学习网络编程No.11【传输层协议之UDP】

引言&#xff1a; 北京时间&#xff1a;2023/11/20/9:17&#xff0c;昨天成功更文&#xff0c;上周实现了更文两篇&#xff0c;所以这周再接再厉。当然做题任在继续&#xff0c;而目前做题给我的感觉以套路和技巧偏多&#xff0c;还是那句话很多东西不经历你就是不懂&#xff…

【Python】2. 基础语法

常量和表达式 我们可以把 Python 当成一个计算器, 来进行一些算术运算. 注意: print 是一个 Python 内置的 函数, 这个稍后详细介绍. 可以使用 - * / ( ) 等运算符进行算术运算. 先算乘除, 后算加减. 运算符和数字之间, 可以没有空格, 也可以有多个空格. 但是一般习惯上写一…

LDR6328芯片:智能家居时代的小家电充电革新者

在当今的智能家居时代&#xff0c;小家电的供电方式正变得越来越智能化和高效化。 利用PD&#xff08;Power Delivery&#xff09;芯片进行诱骗取电&#xff0c;为后端小家电提供稳定电压的技术&#xff0c;正逐渐成为行业的新宠。在这一领域&#xff0c;LDR6328芯片以其出色的…

Qt下使用modbus-c库实现PLC线圈/保持寄存器的读写

系列文章目录 提示&#xff1a;这里是该系列文章的所有文章的目录 第一章&#xff1a;Qt下使用ModbusTcp通信协议进行PLC线圈/保持寄存器的读写&#xff08;32位有符号数&#xff09; 第二章&#xff1a;Qt下使用modbus-c库实现PLC线圈/保持寄存器的读写 文章目录 系列文章目录…

前端Vue3项目如何打包成Docker镜像运行

将前端Vue3项目打包成Docker镜像并运行包括几个主要步骤&#xff1a;项目打包、编写Dockerfile、构建镜像和运行容器。下面是一个基本的流程&#xff1a; 1. 项目打包 首先&#xff0c;确保你的Vue3项目可以正常运行和打包。在项目根目录下执行以下命令来打包你的Vue3项目&am…

nest.js使用nest-winston日志一

nest-winston文档 nest-winston - npm 参考&#xff1a;nestjs中winston日志模块使用 - 浮的blog - SegmentFault 思否 安装 cnpm install --save nest-winston winstoncnpm install winston-daily-rotate-file 在main.ts中 import { NestFactory } from nestjs/core; im…

【5G 接口协议】GTP-U协议介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

基础小白快速入门Python------>模块的作用和意义

模块&#xff0c; 这个词听起来是如此的高大威猛&#xff0c;以至于萌新小白见了瑟瑟发抖&#xff0c;本草履虫见了都直摇头&#xff0c;好像听上去很难的样子&#xff0c;但是但是&#xff0c;年轻人&#xff0c;请听本少年细细讲述&#xff0c;他只是看起来很难&#xff0c;实…

GO-接口

1. 接口 在Go语言中接口&#xff08;interface&#xff09;是一种类型&#xff0c;一种抽象的类型。 interface是一组method的集合&#xff0c;接口做的事情就像是定义一个协议&#xff08;规则&#xff09;&#xff0c;只要一台机器有洗衣服和甩干的功能&#xff0c;我就称它…

【go语言开发】swagger安装和使用

本文主要介绍go-swagger的安装和使用&#xff0c;首先介绍如何安装swagger&#xff0c;测试是否成功&#xff1b;然后列出常用的注释和给出使用例子&#xff1b;最后生成接口文档&#xff0c;并在浏览器上测试 文章目录 安装注释说明常用注释参考例子 文档生成格式化文档生成do…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实&#xff0c;它只是根据上文&#xff0c;猜下一个词&#xff08;的概率&#xff09;…… OpenAI 的接口名就叫【completion】&#xff0c;也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…