狗都能看懂的VAE笔记

news/2024/5/19 20:46:14/文章来源:https://blog.csdn.net/weixin_42392454/article/details/129751980

文章目录

    • 自编码器
    • 普通Auto-Encoder的问题
    • 解决的方法
    • 如何运作
    • 数学细节

生成模型Auto-Encoder一直是一个非常有创造性的方向。期中的VAE变分编码器一直是我没搞懂的部分,在AI绘画突然火起来的时候,不得不搞清楚VAE了。看了很多VAE的讲解,没有良好的数学基础,看的我是云里雾里,终于看了众多大神的讲解,搞清楚了VAE设计的思路和解决的问题。所以此博客不涉及数学的推导,只从直观的理解和作用上讲解。

自编码器

在这里插入图片描述
自编码器是生成模型的一种,输入为一张图,通过Encoder压缩成低维特征之后,再利用Decoder恢复成原图。它的优化目标是输入XXX与输出X^\hat{X}X^越接近越好,所以可以选择L2Loss作为重构Loss。这里插一句题外话,可能大家会认为Auto-Encoder会在压缩图像领域很流行,但实际上是在去噪领域比较常用。输入带噪声的图像,输出不带噪声的原图图像。

普通Auto-Encoder的问题

除了Encoder的部分,自编码器还有的Decoder部分。那这里我们可以想象下,如果取出一个训练好的自编码器Decoder部分,给他输入一组vector,是不是可以创造出新的图像?理想确实是这样,但现实是,随便输入一组数据,它大概率生成的是一张毫无逻辑的噪声图。

那为什么会这样呢?

  • 直观上理解:你训练出来的这个AE只是尽可能的在还原输入图像,你无法限制它内部的Encoder部分是真的在学如何压缩有用的特征,而Decoder也一样,无论怎么样都会把Encoder压缩的特征还原回去。所以Encoder和Decoder实际上达成了一种“默契”,它们自己有加密通话,只对训练数据有效,换组数据就解密不了了。因此,它不关心编码数据是否真的有特征,它只需要完美的还原回去就行了。所以普通的AE就相当于是模型在自嗨。

  • 从数学角度理解:在不加限制的情况下,我们把数据压缩到极致的时候,输入高维的特征实际上已经是在“一条线”上,编码结果已经丧失了可分性。我们希望它是被压缩成右边这个样子,在编码后仍具有可分性。

在这里插入图片描述

解决的方法

我们刚刚说了不加限制的情况,产生的编码是毫无意义的。由于自动编码器模型可以自由地编码潜在向量,我们可以想象,潜在空间可能会有很多区域,其中的空白区域会产生随机/不可解释的输出,如图中的空白区域所示。我们希望具有有意义输出的潜在空间区域是连续的,而不是像下图那样是分开的,这样可以方便地在不同属性之间进行插值。

在这里插入图片描述

有了“限制条件”,我们可以防止模型对潜在空间中相距很远的数据进行编码,并鼓励尽可能多的返回分布“重叠”,当Encoder编码出来的分布如下图所示,从而满足预期的连续性和完整性条件,我们才可以获得有效数据。

在这里插入图片描述

举个例子

在这里插入图片描述

想象一下上面的例子,自动编码器将图像编码为表示照片中的微笑的潜在属性(在真实的训练中,我们不知道每个属性实际表示什么,这样举例更好理解)。普通的自动编码器将为潜属性提供一个值,但变分自动编码器将潜属性存储为属性的概率分布,如上面的图所示。

生成一个分布比生成一个具体的值更好,为什么这么说呢?对于一个连续的分布,在训练过程中你可以进行采样,这意味着,只要在这个分布上的任何采样点,你都可以生成一个同样大笑的脸。而在另一个分布上,你可以生成一个不笑的脸。虽然在两个分布重叠的地方,模型需要降分布学习成既像大笑,又像不笑的脸。这个过程,loss值可能会不太好看,导致训练不稳定。但这样模型就可以获得一张微笑的脸,这个过程我们可以看成是一种正则化,不让AE过拟合。

这就是VAE和普通AE的区别了。

在这里插入图片描述

如何运作

当我理解了VAE设计初衷之后(将编码结果存储为概率分布时),第二个问题是如何得到一个分布?

我们做了一个重要的假设来简化这个过程。我们假设潜在分布总是高斯分布。高斯分布可以很容易地用两个值来描述,即均值和方差或标准差(可以从方差计算出标准差)。你也可以把它用其他任何分布表示,只是生活中大部分问题都可以高斯分布解释。

所以VAE的模型就变成了下面这个样子,Encoder输入图像,输出均值的和方差。

在这里插入图片描述

但是,此抽样过程需要额外的关注。训练模型时,我们需要能够使用称为反向传播的技术来计算网络中每个参数在最终输出损失方面的关系。但是,我们根本无法为随机抽样过程做到这一点。不过,我们可以利用一个被称为“重参数化“的聪明想法,我们从单位正态分布中ε\varepsilonε随机采样,乘上方差σ\sigmaσ,加上均值μ\muμ

在这里插入图片描述
通过重新参数化,我们现在可以优化分布的参数,同时仍然保持从该分布中随机抽样的能力。下面是反向传播的计算过程。
在这里插入图片描述

论文和源码在计算时,会对σ\sigmaσ取log,那是因为方差计算出来都是正值,取log之后可以让它变为负的,使得其探索更多的潜在分布。

数学细节

这里会有点难懂,但我会尽可能清晰的讲解。不感兴趣的同学可以跳过。

在这里插入图片描述

现在假设存在一个分布z可以生成x。Decoder自然地由p(x∣z)p(x|z)p(xz)定义**,它描述了给定编码变量的解码变量的分布**,而Encoder由p(z∣x)p(z|x)p(zx)定义**,它描述了给定解码变量的编码变量**。我们只能看的到x,但我们想计算z的特征,换句话说,计算p(z∣x)p(z|x)p(zx),那么利用贝叶斯公式可得:
p(z∣x)=p(x∣z)p(z)p(x)p(z|x)=\frac{p(x|z)p(z)}{p(x)} p(zx)=p(x)p(xz)p(z)
其中
p(x)=∫p(x∣z)p(z)dzp(x)=\int{p(x|z)p(z)dz} p(x)=p(xz)p(z)dz
计算p(x)p(x)p(x)相当困难,这通常是一个棘手的分布。然而,我们可以应用变分推理来估计这个值。

让我们通过另一个分布q(z∣x)q(z|x)q(zx)来近似p(z∣x)p(z|x)p(zx),如果我们可以通过定义q(z∣x)q(z|x)q(zx)的参数,使它非常类似于p(z∣x)p(z|x)p(zx),我们可以用它来执行难处理分布的近似推理。
在这里插入图片描述

其实简单来说就是,p(z∣x)p(z|x)p(zx)长什么样我不知道,我可以用一个已知的q(z∣x)q(z|x)q(zx)去近似它。而一般用来衡量两个分布是否一致的损失函数是KL散度。所以当我们优化的时候,只需要最小化KL散度即可:
minKL(q(z∣x)∣∣p(z∣x))minKL(q(z|x)||p(z|x)) minKL(q(zx)∣∣p(zx))
Ali Ghodsi 博士在这里进行了完整的推导,所以最终的损失就是:
L(x,x^)+∑jKL(qj(z∣x)∣∣p(z))L(x,\hat{x}) + \sum_{j}{KL(q_j(z|x)||p(z))} L(x,x^)+jKL(qj(zx)∣∣p(z))
第一项是重构损失,即重构输出与输入之间的差值,通常使用均方误差(MSE)。第二项是真实分布p(z)p(z)p(z)与我们选择的分布q(z∣x)q(z|x)q(zx)之间的KL散度,其中q通常是一个均值和单位方差为零的正态分布N(0,1)。鼓励分布q(z∣x)q(z|x)q(zx)在训练中接近真实分布p(z)p(z)p(z)

最后让我们来更直观的比较,这两项的作用

在这里插入图片描述
只使用重构损失时就是普通的AE,又会遇到之前说的问题。但是,如果我们只专注于用我们的KL散度损失项模拟先验分布,我们将会将每个单位z描述为单位正态分布,而不能描述原始数据。所以需要结合两者一起优化。

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

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

相关文章

The Shebeen——爱尔兰酒吧 NFT 来袭!

从爱尔兰神像到标志性的爱尔兰帽子,The Shebeen——爱尔兰酒吧 NFT 系列是一系列非常吸引的独特数字资产,体现了爱尔兰的精神和风俗。 The Shebeen NFT 系列均来自 The Shebeen——爱尔兰酒吧游戏体验,3 月 17 日至 3 月 29 日可在 The Sandb…

c/c++开发,无可避免的自定义类类型(篇八).为类妥善处理异常

目录 一、异常简述 1.1 异常是什么 1.2 异常处理概念 二、异常处理 2.1 try……catch异常处理语法 2.2 动态异常说明-throw 2.3 标准异常体系 2.4 try ...catch抛出异常对象的处理 2.5 异常捕获处理级别 2.6 抛出对象方式 2.7 try 块以及处理块内严禁跳转语法使用 2.8 异常捕…

【MySQL高级篇】 第8章_索引的创建与设计原则

第8章_索引的创建与设计原则 1. 索引的声明与使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物…

Python如何实现读写txt文件?读写txt文件的方法有哪些?

前言 又是一篇纯知识点的文章,现在看文章的人越来越少了,是都去看视频了吗 今天就来聊聊 - Python实现读写txt文件的方法 一、读写模式: w:向文件中写入内容,w会清空原来文本内容a:向文件中追加内容r&am…

sql性能优化:MS-SQL(SQL Server2012)服务器配置选项(sp_configure )对照表

sql性能优化:MS-SQL(SQL Server)服务器配置选项(sp_configure )对照表 2019服务器配置选项 (SQL Server) - SQL Server | Microsoft Learn 2012服务器配置选项 | Microsoft Learn 介绍 可以使用 SQL Server Managemen…

什么是蓝牙的核心协议层和产品类型?一文读懂BQB认证中两者的关联

蓝牙核心协议层 什么是蓝牙核心协议层? 所有蓝牙产品必须拥有相应资格才可以进行出售或分发。而蓝牙技术是需通过软件和硬件的 组合实现,分为蓝牙HOST主机(软件)和CONTROLLER控制器(硬件)。 蓝牙核心协议层的规范如何? 目前蓝牙技术分为经典蓝牙(BR/EDR) 和低功耗蓝牙(B…

【vulhub靶场】medium_socnet

文章目录环境搭建信息收集主机发现:端口扫描Web 渗透(CVE-2019-14322)Pallets Werkzeug 0.15.4 路径遍历漏洞代码注入-反弹shell关于Dockerfile判断是否在Docker环境中:Command SHELL 提升至 Meterpreter方法一方法二Docker环境中存在内网环境内网主机探…

二分查找【含左边界查询 + 右边界查询】

789. 数的范围 - AcWing题库 二分查找看起来是很简单的一个算法,但是其中涉及到比较多的细节问题。 一不小心就死循环了…… 使用条件 一般情况下,二分查找通常适用于一个有序的序列中(一般为升序) 算法解析 确定左右边界 首…

Linux内核文件系统知识大总结

1、文件系统特点文件系统要有严格的组织形式,使得文件能够以块为单位进行存储。文件系统中也要有索引区,用来方便查找一个文件分成的多个块都存放在了什么位置。如果文件系统中有的文件是热点文件,近期经常被读取和写入,文件系统应…

Cursor软件,内含GPT服务,软件免费,可以进行聊天

Cursor软件,内含GPT服务,软件免费,可以进行聊天 Cursor这个软件的安装 安装好后,双点击使用: 最后有软件地址 如果英文不好,怎么办,搭配有道词典: 效率嘎嘎快 用Ctrl+K进行代码指令后面如下自动生成代码 也可以在聊天框里面进行代码的编写和对话

linux 调试系列(二)coredump段错误查找使用详解

《linux 调试系列(一)coredump环境配置》 《linux 调试系列(二)coredump段错误查找使用详解》 一、 背景 这一节,通过一个样例,详细介绍怎么使用coredump来定位程序段错误。 构造两个常用错误,…

STM-32:GPIO 输出-点亮LED-流水灯-蜂鸣器

目录一、GPIO1.1GPIO简介1.2GPIO 硬件解析1.2.1保护二极管1.2.2 P-MOS、N-MOS 管1.2.3数据输入输出寄存器1.2.4复用功能输出1.2.5模拟输入输出1.3GPIO 的工作模式1.3.1 输入模式 (模拟/浮空/上拉/下拉)1.3.2 输出模式 (推挽/开漏)1.3.3 复用功能 (推挽/开漏)1.3.4 小结二、GPIO…

线程与子线程

目录 一、简介 线程 主线程与子线程 线程与进程 并发和并行 二、代码编写 1、创建线程之每个线程有独立的线程函数 验证 2、创建线程 每个线程共用的同一线程函数 验证 3、回收线程资源(阻塞) 验证 4、分离线程(不阻塞&a…

DI相关内容

DI相关内容5,DI相关内容5.1 setter注入5.1.1 环境准备5.1.2 注入引用数据类型步骤1:声明属性并提供setter方法步骤2:配置文件中进行注入配置步骤3:运行程序5.1.3 注入简单数据类型步骤1:声明属性并提供setter方法步骤2:配置文件中进行注入配置步骤3:运行程序5.2 构造…

如何用VOSviewer Online想画啥就画啥(配合python+networkX)

VOSviewer一直都是学术界文献可视化的神器,不过貌似很少看有人来DIY,随意画东西。 那笔者花了点时间测试了一下,发现【VOSviewer Online networkX/python】可以极快的画出好看的网络关系图。 网址:https://app.vosviewer.com/ …

Win10系统的截图功能 几种快捷键 以及QQ附带的截图功能

直接按 Prtsc 键 对整个屏幕截图,比如下图 altshiftPrtSc 对某个窗口截图 winshifts 矩形截图,可以对当前屏幕选择一个矩形区域截图,比如下面这样 如果失效,解决方法是在任务管理器里重新启动文件资源管理器的进程 参考:截图快捷键…

docker开启的Mysql修改时区

进入docker 查询和修改时区 注意:MySQL 中存储的时间默认为 UTC 时间,因此需要根据需要进行转换。 你可以使用以下命令查询 MySQL 当前的时区: SELECT global.time_zone;该命令会返回 MySQL 当前的全局时区设置,如果你想查询当…

.NET Core 实现Excel的导入导出

.NET Core 使用NPOI实现Excel的导入导出前言NPOI简介一、安装相对应的程序包1.1、在 “管理NuGet程序包” 中的浏览搜索:“NPOI”二、新建Excel帮助类三、调用3.1、增加一个“keywords”模型类,用作导出3.2、添加一个控制器3.3、编写导入导出的控制器代码…

通达信破底翻形态选股公式,选出破底之后再翻回的标的

破底翻形态,顾名思义就是跌破底部之后再翻回来。编写不带未来函数的形态类公式还是比较难的,理解也不容易。通过今天介绍的破底翻形态选股公式,希望能给大家一些思路。 一、FINDLOWBARS、FINDLOWBARS函数 1、FINDLOWBARS 含义:计…

二叉树的所有路径

1题目 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [1,2,3,null,5] 输出:["1->2->5","1->3"…