首页 > 其他分享 >DALL·E 2(内含扩散模型介绍)-生成式模型【学习笔记】

DALL·E 2(内含扩散模型介绍)-生成式模型【学习笔记】

时间:2024-12-16 22:28:13浏览次数:7  
标签:一个 DALL 模型 生成式 VAE VQ 图像 生成

视频链接:DALL·E 2(内含扩散模型介绍)【论文精读】_哔哩哔哩_bilibili(up主讲的非常好,通俗易懂,值得推荐)

1、GAN模型

        GAN部分约在视频的第28分钟位置处开始。

        GAN就是左右手互搏。GAN需要训练两个网络,一个是生成器Generator,一个是判别器Discriminator。生成器:给定一个随机噪声z,生成器会生成一些东西。在这里希望生成器能生成一个比较真实的图片x‘,再将生成的图片x’给判别器,同时也给一些真实的图片x给判别器。让判别器判断哪个是真图片,哪个是假图片。判别器其实是一个0/1的二分类问题。

        通过Generator和Discriminator这两个网络之间的互相较量,判别器和生成器不断的提高自己,最后生成比较真实的图片。事实上,因为GAN的目标函数就是用来以假乱真的,所以截止到目前, GAN生成的图片保真度也是非常高,人眼难以区分生成的图片是真是假,所以这才有了Deepfakes的火爆。不光是真实,经过这么多年对GAN模型的改造,GAN现在依然比较好用,需要的数据不是那么多,能在各个场景下使用,优点还是蛮多的。

        GAN有一个最致命的缺点就是训练不够稳定。最主要的原因在于它要同时训练Generator和Discriminator这两个网络,存在一个平衡的问题。如果训练的不好,模型就训练坍塌了。此外,由于GAN的主要优化目标就是让图片尽可能真实,因此,它生成图片的多样性就不太好。它的多样性主要来自于刚开始的随机噪声,简单来说就是GAN的创造性不太好。最后,GAN不是一个概率模型,它的生成都是隐式的,它就是通过一个网络去完成的,研究人员也不知道它做了什么,也不知道它遵循什么分布,所以说GAN在数学上就不如后续的VAE或者扩散模型优美。

2、VAE模型

2.1、AE(Auto-Encoder

        AE部分约在视频的第30分30秒位置处开始。

​        AE比较简单,是很早之前的技术了。大概意思是给定一个输入x,经过一个编码器E,就能得到一个特征Z,这个特征的维度一般都会小很多,所以也管它叫bottleneck。再从bottleneck开始,经过一个解码器D,最终得到一个图像x'。

        训练的目标函数是希望重构图像x'能尽可能的重建之前的x(x'尽可能接近原始输入数据x)。由于是自己重建自己,因此叫Auto-Encoder,就是自编码器。在自编码器AE出来之后,紧接着就出来了去噪自编码器(Denoising Auto-Encoder,DAE)。

​        DAE就是先把原图进行一定程度的打乱(输入数据中通常包含噪声),比如说变成xc(corrupted x),再将经过扰乱后的输入传给编码器E,后续操作和AE一样。此时,得到一个 bottleneck的特征,再通过解码器D得到了一个输出x'。同样,希望输出x'能够重建原始的x,而不是重建经过扰动之后的xc。后续证明这个改进非常的有用,尤其是对视觉领域更加有用,会让训练出来的模型非常的稳健,也不容易过拟合。部分原因是因为图像像素冗余性较高,即使对原来的图片做一些污染,模型还能抓住它的本质,然后把它重建出来。这和何凯明的掩码自编码器(Masked Auto-Encoder,MAE)比较相似。在训练的时候能够mask掉75%的图像区域,还能把这个图像很好的重建出来,说明了图像的冗余性确实高,从侧面证明了DAE和MAE的有效性。

        不论是AE、DAE还是MAE,他们的主要目的都是为了学习中间的bottleneck特征,并通过这个特征去做一些分类、检测、分割等任务,它并不是用来做生成的,原因是因为bottleneck特征中学到的不是一个概率分布,没法对它进行采样。这个Z并不像GAN里那样是一个随机噪声,它是一个专门用来重建的特征。这种encoder-decoder的形式确实是一个很好的结构,怎么使用这种结构去做图像生成呢?所以就有了变分自编码器(Variational Auto-Encoder,VAE)。

2.2、VAEVariational Auto-Encoder

        VAE部分约在视频的第33分钟位置处开始。

        VAE跟AE有很大的差别,虽然它的整体框架看起来还是一个输入x进了一个编码器E,得到了一些东西,然后出解码器D,最后得到一个输出x'。VAE的目标函数还是让输出x'尽可能的去重建原来的x。

        看起来好像一样,但其实有一个非常重要的区别,就是VAE的中间不再是学习一个固定的bottleneck特征,而是去学习一个分布。作者假设这个分布是高斯分布,高斯分布可以用均值和方差来描述。具体而言,当得到从编码器E输出的特征后,在后面加一些FC层,去预测均值和方差,得到对应的均值和方差之后,用公式Z=μ+σε采样一个Z,这样VAE就可以用来做图像生成了。因为在训练好模型以后,完全可以把前面的编码器E扔掉,此时的Z就是一个可以从高斯随机噪声里抽样出来的样本。将Z给解码器D,这样就能生成一张照片了。

        因为VAE预测的是一个分布。从贝叶斯概率的角度来看,前面的这一过程就是给定x,得到 z 的过程(q(z|x)),其实就是一个后验概率。学出来的distribution就是一个先验分布。后面的给定z去预测一张图片x的时候(p(x|z)),它其实就是likelihood,就是说这里做的就是Maximum likelihood(最大似然估计),从数学上看就干净很多、优美很多。

        VAE也有一些不错的性质,比如:由于VAE学的是一个概率分布,它从这个分布里面去抽样,所以它生成的图像多样性就比GAN要好得多。这也就是为什么研究人员后续做了很多基于VAE的工作,包括VQ-VAE,还有VQ-VAE-2,以及后来的DALL·E第1版模型也是在VQ-VAE的基础上做的。

2.3、VQ-VAE(Vector Quantized Variational Auto-Encoder

        VQ-VAE部分约在视频的第35分钟位置处开始。

        向量量化变分自编码器(Vector Quantized Variational Auto-Encoder,VQ-VAE)从整体上看和VAE差不多。VQ的含义是Vector Quantized,就是把VAE做量化。那为什么要这么做?原因如下:现实生活中所有的这些信号,包括声音、图像等可能都是连续的,或者说大部分任务可能都是回归任务,但将它表示出来以及去解决这些问题时,其实都把它离散化了,图像变成像素了,语音也都抽样过了。大部分工作的比较好的模型也都是分类模型,又都从回归任务变成分类任务。同样,如果用之前的VAE方式,就不好把模型做大,图像的尺寸做大,而且那个分布也不好学习。因此,可以不去做那个分布的推测,而是用一个codebook(VQ-VAE能利用codebook机制把图像编码成离散向量)进行代替。这个codebook可以理解聚类的中心等,codebook的大小一般是K乘以D,K一般是8192,D一般可能是512或768(表示有8192个长度为D的向量在这个codebook 里,即有8192个聚类中心)。此时,如果有一个图片经过编码器E得到了一个特征图f(长宽分别是H和W),将这个特征图里的向量与codebook里的向量进行对比,看看它跟哪个聚类中心最接近,再将最接近聚类中心的那个编码存到Z矩阵里。因此,Z里面可能有一些编号,比如说1或者100之类的。

         一旦完成聚类的分配,就不用之前的特征f了。取而代之的是,将index对应的特征拿出来(如Z里面编号为1,就将K×D中编号为1的向量拿出来;如果编号为10,就将K×D中编号为10的向量拿出来),生成新的特征图叫做fq(就是quantized feature经过量化后的特征)。这个量化后的特征非常可控,因为它永远都是从这个codebook里来的,而不是一个随机的东西,因此优化起来相对容易。有了特征图fq以后,跟之前的AE或者VAE就差不多了,通过一个解码器,就可以去重构一张图片。目标函数还是让x'尽量跟x保持一致。这样就完成了整个VQ-VAE的训练。

         VQ-VAE非常有用,它后来不仅用在了DALL·E中,还用在视觉中做自监督学习。如BEIT这篇论文中将DALL·E训练好的codebook拿过去,将图片全都quantize成特征图fq,再通过特征图fq做ground truth(监督学习中正确的标注是ground truth)自监督训练一个视觉网络。最近BEIT又出了VL-BEIT(就是vision language的BEIT), 也是大概的思路,只不过是用一个transformer编码器去做多模态的任务。

         说完VQ-VAE后会发现这里学习的是一个固定的codebook了,意味着VQ-VAE没办法像VAE那样做随机采样,然后去生成对应的图片。准确的说VQ-VAE不像是一个VAE,更像是一个AE。VQ-VAE学的codebook和特征图fq是拿去做high level任务的,也就是做分类、检测等。如果想让VQ-VAE做生成怎么办?还需要单独再训练一个prior网络。在VQ-VAE论文中,作者又训练了一个 Pixel CNN当做prior网络,从而能够利用已经训练好的codebook去做图像的生成。

         在VQ-VAE之后又有VQ-VAE-2,这是一个简单的改进。VQ-VAE-2首先把模型变成层级式的,不仅做局部的建模,还做全局的建模,加上attention后,模型的表达能力变强了。同时,它还根据codebook又去学了一个prior,所以生成的效果也非常好。对于VQ-VAE来说,先训练了一个codebook,然后又训练了一个Pixel CNN去做这种生成,Pixel CNN其实是一个auto regressive自回归模型。那还有什么模型是自回归呢?那就是OpenAI的看家本领——GPT系列了。OpenAI将Pixel CNN换成GPT,得到了一个更好的图像生成。既然language那边做得这么好,为什么不想办法用文本去引导图像生成呢?因此就有了DALL·E。

2.4、DALL·E

        DALL·E部分约在视频的第39分40秒位置处开始。

         DALL·E从模型上来看非常简洁,如果有一个图像文本对,这个文本先通过BPE编码得到一个特征ft,这个特征有256维。还有一个256*256的图像,经过一个VQ-VAE,这个VQ-VAE中有一个训练好的codebook,在DALL·E中直接拿过来用。因此,DALL·E是一个两阶段的图像生成器,将原来的图像变成图像特征fq以后,这个维度就下降了很多,就从256*256变成了32*32,一共有1024个token,最后将文本特征和图像特征直接连接起来,变成了一个有1280个token的序列。再将这个序列扔给GPT,把该遮住的地方遮住,让GPT模型去预测就好了。 

         至于推理,只需要提供一个文本,将文本变成文本的特征ft,再通过文本的特征直接用自回归的方式把图像生成出来。

         DALL·E论文中还有很多细节,如会生成很多很多的图片,到底选哪一张?它会用CLIP模型去做一个排位,挑选出与文本最贴切的生成的图片作为最后的生成图像。DALL·E里有将近一半的篇幅都在写怎么才能把12个billion(也就是120亿)这么大的参数训练起来,以及怎样去收集了一个特别大的数据集能够支撑训练这样一个模型,这沿袭了GPT系列工作的特点,就是大力出奇迹。

3、扩散模型

        扩散模型部分约在视频的第41分30秒位置处开始。 

         假设你有一张正常的图片X0,每一步都往这个图片里加一个很小的正态分布的噪声,得到X1,这个X1就是在X0的基础上多点了几个杂的点。再给X1加噪声,一直加到T次,如果这个T特别大,如果无穷无尽的话,那最终X0就会变成一个真正的噪声,就变成一个正态分布了,更专业一点叫做各项同性的正态分布。整个过程就叫做forward diffusion(前向扩散过程)。为什么要叫扩散模型?这个名字是来自于热力学的启发就是thermodynamics,热力学中有一个名词叫diffusion。在热力学中,描述的过程是:如果有一些高密度的和低密度的物质,高密度的物质会慢慢的向低密度做扩散。比如说喷了香水,这个香水就会慢慢扩散到整个房间,最后达到一种平衡。所谓的平衡,就是这里提到各项同性的正态分布,这是趋近于随机噪声的。视觉这边就沿用了这个名字,还是叫它diffusion model。

         那这跟图像生成有什么关系?反过来想,如果现在输入的是一个随机噪声,也就是GAN里面的那个Z,如果能找到一种方式,或者训练一个网络,能慢慢的把这个噪声一点一点的再恢复到最初的图片X0,就可以做图像生成了。事实上扩散模型就是这么简单,就是通过反向过程去做图像生成的。如果随机抽样一个噪声(如XT或者是之前的任意一步),就可以训练一个模型,将XT变到XT-1。再用同样的模型将XT-1变成XT-2,一步一步的倒推回来。反向过程中使用的所有模型都是共享参数的,就只有一个模型,只不过要采样生成很多次,这也是现在扩散模型非常大的一个不足。扩散模型训练上跟别的模型比起来,是比较贵的。在推理的时候,扩散模型是最慢的一个。对于GAN,只要训练好了这个模型,接下来给它一个噪声,它就能出来一张图片,非常的快,就做一次模型的forward就可以了。对于扩散模型,尤其是最原始的扩散模型来说,一般T选1000步。即如果你随机选择一个噪声,要往回推1000步的话,就要做1000次的forward,一点一点把这个图像恢复出来,这个开销是远远大于其他生成模型的。

参考链接:DALL·E 2(内含扩散模型介绍)【论文精读】Hierarchical Text-ConditionalImage Generation with CLIP Latents_dalle2-CSDN博客

标签:一个,DALL,模型,生成式,VAE,VQ,图像,生成
From: https://blog.csdn.net/zly19980718/article/details/144500546

相关文章

  • Showrunner AI技术浅析(二):大型语言模型
    1.GPT-3模型架构详解GPT-3是基于Transformer架构的预训练语言模型,由OpenAI开发。其核心思想是通过自注意力机制(Self-Attention)处理输入序列,并生成自然语言文本。1.1Transformer架构基础Transformer架构由Vaswani等人在2017年提出,主要由编码器(Encoder)和解码器(Decoder)组成。......
  • CosyVoice 2.0 支持双向流式语音合成;无问芯穹开源全模态理解端侧模型丨RTE 开发者日报
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源
    前言对于本教程,说白了,就是期望能通过一个程序判断一张图片是否为某个物体,或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题,因此主要处理是与不是的问题,比如我的模型是判断一张图片是否为苹果,那么拿一张图片给模型去推理,他会得出这张图是苹果的概率,如果概率......
  • SD模型微调之LoRA
    SD模型微调方法LoRA详细介绍,包括数据集准备,模型微调过程,推理过程,优缺点等。 ......
  • 【量化交易】分类模型与量化投资中的预测:股市是“黑白分明”还是“灰色地带”?
    欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:⭐️全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.⭐️AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。⭐️大数据平台建设指南:全面讲解从数据采集到......
  • 大语言模型
    LLM目录LLM1.人工智能(AI):2.自然语言处理(NLP):3.Transformer:Transformer的核心特点:它们之间的关系:1.AI是NLP的基础:2.Transformer是NLP的核心技术之一:3.Transformer在AI中的影响:总结:直接使用已存在的开源大模型(Ollama、Huggingface开源社区)好处:坏处:总结建议:微调大......
  • 2024年DIIRC大模型行业应用十大典范案例集(附完整PDF下载)
    本案例集汇集当前大模型技术在各行各业中应用的杰出案例集,旨在展示大模型技术如何推动产业智能化、优化业务流程,并增强用户体验。案例集中的每一个案例都是基于实际应用,涵盖了从数字员工平台、智能写作工具、数据分析诊断系统,到知识管理平台和产业顾问等多个领域,体现了大模......
  • 微软 Phi-4:小型模型的推理能力大突破
    在人工智能领域,语言模型的发展日新月异。微软作为行业的重要参与者,一直致力于推动语言模型技术的进步。近日,微软推出了最新的小型语言模型Phi-4,这款模型以其卓越的复杂推理能力和在数学领域的出色表现,引起了广泛关注。Phi-4的出现不仅挑战了“模型越大越好”的传统观念,还为......
  • 解密AI大模型:四大核心技术驱动智能革命
            随着人工智能(AI)技术的飞速发展,AI大模型正成为各行各业变革的推动力。从自动化到个性化推荐,AI大模型的应用在不断扩展。本文将深入解析四大核心技术——提示工程、函数调用、检索增强生成(RAG)和微调,这些技术正引领着AI大模型的智能革命。一、提示工程(PromptEng......
  • 【人工智能】教你如何利用CodeMoss的OpenAI API调用GPT4大语言模型(最全教程)
    文章目录OpenAIAPIKey的使用场景步骤1:打开[CodeMoss](https://pc.aihao123.cn/index.html#/page/login?invite=1141439&fromChannel=1_Moss1213)工具步骤2:进入API管理界面步骤3:生成新的OpenAIAPI使用OpenAIAPI的实战教程1.可以调用的模型2.Python示例代码(基础)3.Pytho......