条件变分自动编码器CVAE:基本原理简介和keras实现

简介: 条件变分自动编码器CVAE:基本原理简介和keras实现

变分自动编码器(VAE)是一种有方向的图形生成模型,已经取得了很好的效果,是目前生成模型的最先进方法之一。它假设数据是由一些随机过程,涉及一个未被注意的连续随机变量z假设生成的z是先验分布Pθ(z)和条件生成数据分布Pθ(X | z),其中X表示这些数据。z有时被称为数据X的隐藏表示。

 

像任何其他自动编码器架构一样,它有一个编码器和一个解码器。编码器部分试图学习qφ(z | x),相当于学习数据的隐藏表示x或者x编码到隐藏的(概率编码器)表示。解码器部分试图学习Pθ(X | z)解码隐藏表示输入空间。图形化模型可以表示为下图。


 

image.png

对模型进行训练,使目标函数最小化


 

image.png

这种损失的第一项是重建错误或数据点的预期负对数可能性。期望是关于编码器的分布在表示通过采取一些样本。这个术语鼓励解码器在使用来自潜在分布的样本时学会重构数据。较大的错误表示解码器无法重构数据。

第二项是Kullback-Leibler编码器之间的分布q_φ(z | x)p (z)。这个散度度量了在使用q表示z上的先验时损失了多少信息,并鼓励其值为高斯分布。

在生成过程中,来自N(0,1)的样本被简单地输入解码器。训练和生成过程可以表示为以下


 

image.png

一种训练时变分自编码器实现为前馈神经网络,其中P(X|z)为高斯分布。红色表示不可微的采样操作。蓝色表示损失计算

image.png

测试时变分的自动编码器,它允许我们生成新的样本。编码器路径被简单地丢弃。

VAE进行如此简要的描述,其原因在于,VAE并不是本文的主要关注对象,而是与本文的主要主题紧密相关的。

VAE生成数据的一个问题是,我们对生成的数据类型没有任何控制。例如,如果我们用MNIST数据集训练VAE,并尝试通过向解码器输入Z ~ N(0,1)来生成图像,它也会产生不同的随机数字。如果我们训练好,图像会很好,但我们将无法控制它会产生什么数字。例如,你不能告诉VAE生成一个数字“2”的图像。

为此,我们需要对VAE的体系结构进行一些修改。假设给定一个输入Y(图像的标签),我们希望生成模型生成输出X(图像)。所以,VAE的过程将被修改为以下:鉴于观察y, z是来自先验分布Pθ(z | y)和输出分布Pθ产生的x (x | y,z)。请注意,对于简单的VAE,之前是Pθ(z)和输出是由Pθ(x | z)

image.png

 

VAE中的可视化表示任务

这里编码器部分试图学习qφ(z | x, y),相当于学习隐藏的代表数据或编码xy条件。解码器部分试图隐藏表示学习Pθ(x | z, y)解码隐藏表示输入空间条件的y图形化模型可以表示为如下图所示。

image.png

 

条件VAE (Conditional VAE)的神经网络结构可以表示为如下图。

image.png

X是像。Y是图像的标签,它可以用一个离散向量表示。

目录
相关文章
|
1月前
|
机器学习/深度学习 关系型数据库 MySQL
大模型中常用的注意力机制GQA详解以及Pytorch代码实现
GQA是一种结合MQA和MHA优点的注意力机制,旨在保持MQA的速度并提供MHA的精度。它将查询头分成组,每组共享键和值。通过Pytorch和einops库,可以简洁实现这一概念。GQA在保持高效性的同时接近MHA的性能,是高负载系统优化的有力工具。相关论文和非官方Pytorch实现可进一步探究。
312 4
|
1月前
|
自然语言处理 PyTorch 算法框架/工具
自然语言生成任务中的5种采样方法介绍和Pytorch代码实现
在自然语言生成任务(NLG)中,采样方法是指从生成模型中获取文本输出的一种技术。本文将介绍常用的5中方法并用Pytorch进行实现。
162 0
|
23天前
|
机器学习/深度学习 自然语言处理 算法
长序列中Transformers的高级注意力机制总结
Transformers在处理长序列时面临注意力分散和噪音问题,随着序列增长,注意力得分被稀释,影响相关上下文表示。文章探讨了序列长度如何影响注意力机制,并提出了多种解决方案:局部敏感哈希减少计算需求,低秩注意力通过矩阵分解简化计算,分段注意力将输入分割处理,层次化注意力逐级应用注意力,递归记忆增强上下文保持,带有路由的注意力机制动态调整信息流,以及相对位置编码改进序列理解。这些方法旨在提高Transformer在长序列任务中的效率和性能。
30 3
|
10天前
|
机器学习/深度学习
【保姆级教程|YOLOv8添加注意力机制】【1】添加SEAttention注意力机制步骤详解、训练及推理使用
【保姆级教程|YOLOv8添加注意力机制】【1】添加SEAttention注意力机制步骤详解、训练及推理使用
|
1月前
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:自动编码器(Autoencoder)
使用Python实现深度学习模型:自动编码器(Autoencoder)
29 0
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch深度学习基础之Reduction归约和自动微分操作讲解及实战(附源码 超详细必看)
PyTorch深度学习基础之Reduction归约和自动微分操作讲解及实战(附源码 超详细必看)
66 0
|
11月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用PyTorch构建神经网络(详细步骤讲解+注释版) 02-数据读取与训练
熟悉基础数据分析的同学应该更习惯使用Pandas库对数据进行处理,此处为了加深对PyTorch的理解,我们尝试使用PyTorch读取数据。这里面用到的包是torch.utils.data.Dataset。 在下面的代码中,分别定义了len方法与getitem方法。这两个方法都是python的内置方法,但是对类并不适用。这里通过重写方法使类也可以调用,并且自定义了getitem方法的输出
使用PyTorch构建神经网络(详细步骤讲解+注释版) 02-数据读取与训练
|
11月前
|
机器学习/深度学习 API 算法框架/工具
Keras 高级教程:模型微调和自定义训练循环
我们在前两篇文章中介绍了如何使用 Keras 构建和训练深度学习模型的基础和中级知识。在本篇文章中,我们将探讨一些更高级的主题,包括模型微调和自定义训练循环。
|
计算机视觉
又改ResNet | 重新思考ResNet:采用高阶方案的改进堆叠策略(附论文下载)(二)
又改ResNet | 重新思考ResNet:采用高阶方案的改进堆叠策略(附论文下载)(二)
85 0
|
机器学习/深度学习 算法框架/工具 计算机视觉
又改ResNet | 重新思考ResNet:采用高阶方案的改进堆叠策略(附论文下载)(一)
又改ResNet | 重新思考ResNet:采用高阶方案的改进堆叠策略(附论文下载)(一)
179 0