[读书笔记] Variational AutoEncoders

news2024/9/21 11:09:25

小全读书笔记 《Variational AutoEncoders》

  • 1. Generative Model (生成式模型)简述
  • 2. 简单生成模型 AutoEncoders![AutoEncoder结构图](https://img-blog.csdnimg.cn/46c5dcf47e754bf7b71d973a15507e0e.png#pic_center)
    • 2.1 结构
    • 2.2 不足
  • 3. Variational AutoEncoders
  • 4. Variational AutoEncoders的数学支持

此读书笔记来自于Joseph Rocca的Understanding Variational Autoencoders (VAEs),非常推荐阅读原文。

1. Generative Model (生成式模型)简述

在深度学习模型范畴中,区别于图像分类、检测、分割等领域中的各种经典模型,

  1. 从模型的目标而言,上述经典模型致力于对输入数据判定类别、bounding box或segment area,而Generative Model的目的在于学习输入数据的分布,以生成更多的样本;

  2. 从训练数据而言,上述经典模型必须依赖于groundtruth annotation,而Generative Model能不一定强依赖于annotation,如给定一个人脸数据集,完全可以不依赖于任何的annotation也可以生成新的人脸,但若希望生成“特殊条件”的人脸,如长头发的人脸,则训练过程依然需要提供相应的annotation。

2. 简单生成模型 AutoEncodersAutoEncoder结构图

2.1 结构

AutoEncoders包含了一个encoder和decoder的经典结构,

  • encoder的作用是将输入从原空间映射到latent space,往往latent space的数据维度是要小于原空间的。
  • decoder则是将latent space中的数据重新映射回与原空间维度完全一致的新空间。

AutoEncoder的训练目标是通过Encoder和Decoder的变换后,能尽可能地保持输入数据地信息完整性,即 x = x x=x x=x.

在这样的结构里,decoder就起到了一个样本生成的一个作用:设想若以成功训练好了AutoEncoder,我们完全可以单独将decoder拿出来,输入一些random的signal或者在原latent space sample中加入random signal,即可生成出原数据中不存在的数据。

AutoEncoder的应用场景(它还能用来干什么):
Dimensionality Reduction(数据降维):通过Encoder可以将数据维度大大降低,而且decoder的存在可以极大地保证了降维后的数据仍包含了原数据的信息量,基于此可以较好地恢复回原来的样子。

2.2 不足

AutoEncoder的致命不足:无法保证生成数据的泛化性,即生成的数据与原数据并不能完全保证是同分布的。借用Joseph的一个图来说明这个问题。
图来源于Joseph
造成这种现象的根本问题在于两点:

  1. 模型并不理解noise:尽管decoder能对任何latent space空间的都能映射到原空间,但这种映射的pattern在训练数据和测试数据上是存在gap的。训练过程中decoder的输入其实可以认为是原空间的fixed point,在测试过程中加入的noise对于decoder来说是unseen和unknown的,decoder是没有机制保证加噪后的输出质量的。

  2. 过拟合(Overfitting):可以想象一个极端的例子,latent space就只有一维,当decoder的参数量大到一定程度,依然能完美地拟合训练数据,但这样的模型却是无意义的。当然,这样的例子有点极端,并不具备代表性,但这种缺乏约束和规范的结构实际上确实是很容易收到overfit的影响。

那在训练过程中,每次对decoder的输入加入噪声,是否可行?
答案依然是No,原因依然是上述两点,当加入噪声之后,decoder是能处理noise了,但是模型依然可以狡猾地将不同sample在latent space的分布极大地区分开来,以大大降低noise的作用。依然借用Joseph的一个图说明这个问题。
图来源于Joseph

来到这里,一个非常straight-forward的想法很自然地出来了:约束样本在latent space的分布,以让decoder能理解noise,从而保证泛化性。

Joseph总结了AutoEncoder不足的本质在于Irregular latent space,我的出发点是其对noise的泛化性不足,俩者的理解最终还是殊途同归。
基于此,一个最简单的想法是:训练过程中限制样本在latent space的距离是否可行。读者并未对这进行验证,VAE提出了一个更加fancy的solution。

3. Variational AutoEncoders

相比于AutoEncoder(AE),VAE最本质的一个改进在于:encoder预测的是一个输入样本在latent space的一个分布,并且VAE对这些分布进行了约束。

  1. 什么叫做“latent space的一个分布”
    对于AutoEncoders,encoder的作用是将一个输入数据 x x x映射到latent space是一个single point,在latent space里,这个point只代表 x x x .而VAR认为latent space里,它应该代表了一个分布,即以输入数据为代表的一类东西。举例而言,如果输入是一只站立的黄色的狗,AE只会认为它是一只站立的黄色的狗,VAE会认为它可以是一只黄色的狗,也可以是黑色的,也可以是坐着的。
    在这里插入图片描述
    而这个分布则用这个条件概率表示 P ( z ∣ x ) P(z|x) P(zx) .

  2. 如何通过一个输入 x x x得到一个分布 P ( z ∣ x ) P(z|x) P(zx)

    首先,我们假定这个分布是一个正态分布,因此 P ( z ∣ x ) ∼ N ( μ , σ 2 ) P(z|x) \sim N(\mu, \sigma^2) P(zx)N(μ,σ2)

    这样的假定是合理的,如果不做假定,是无法求解的,其次正态分布是能更好地反映“以输入数据为代表的一类东西”的这种性质。

    因此,若想得到这个分布,本质只需要求得正态分布的均值和方差,我们可以将其建模成 μ = f θ ( x ) \mu = f_\theta(x) μ=fθ(x), σ = g β ( x ) \sigma=g_\beta(x) σ=gβ(x), 是学习参数, f f f g g g 建模成深度网络。

  3. 如何对 P ( z ∣ x ) P(z|x) P(zx)进行约束?

    VAE希望对任何的输入数据,得到的分布都属于一个标准正态分布 P ( z ∣ x ) → N ( 0 , 1 ) P(z|x) \rightarrow N(0,1) P(zx)N(0,1),训练过程中迫使拟合标准正态分布,“迫使”的方式则是引入KL散度这一loss项实现。
    图来源于Joseph

  4. 这种约束为啥是有效的?

    回顾这个分布 P ( z ∣ x ) P(z|x) P(zx)的本质:其代表的是以输入数据为代表的一类东西,而且这个约束要求所有样本的分布都要接近 N ( 0 , 1 ) N(0,1) N(0,1)。从均值的角度,这意味着所有的东西都必须要迫近原点,这就避免了上述提到的问题.

    那在训练过程中,每次对decoder的输入加入噪声,是否可行?”,也就是分布之间必须要尽可能地靠近。那这就够了吗?No!还得从方差的角度去限制,如果不对方差进行限制,也就是这个分布是以零点为中心无限发散的,这极大地影响模型的收敛。方差的限制隐藏的意义是:让同分布内的数据要尽可能地靠近。

    方差约束的通俗理解:
    如果方差是不约束的,假设当前样本在latent space是狗的分布,因方差过大在latent space采样出了一张桌子,而训练过程我们需要要求这张桌子复原回一只狗,这会影响模型的收敛。

现在我们可以正式介绍VAE的结构,

  • encoder:基于输入样本预测出一个该样本在latent space的分布
  • decoder:对于这个分布的任意一个样本,均可通过该样本复原出输入样本
  • 图来源于Joseph

4. Variational AutoEncoders的数学支持

TBD

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

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

相关文章

【Vue已解决】阻止Vue在启动时生成生产提示

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

3 redis线程IO模型

1 IO模型 1.1 IO IO (Input/Output&#xff0c;输入/输出)即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作&#xff0c;通常用户进程中的一个完整IO分为两阶段&#xff1a;用户进程空间<–>内核空间、内核空间<–>设备空间&…

常用脚本记录

文章目录 1. shell脚本1.1 backup.sh // 目录备份&#xff08;数据备份&#xff09;1.2 check_ip.sh // 检查ip1.3 FlotMonitor.sh // 流量监控1.4 ssh_NoPasswd.sh // 集群免密 2. python脚本2.1 游戏脚本2.1.1 saolei.py // 扫雷(python3)2.1.2 Guessnum.py // 猜数字(python…

Centos7 部署单机 Minio 对象存储服务

MinIO 是一款基于 Go 语言发开的高性能、分布式的对象存储系统&#xff0c;客户端支持 Java&#xff0c;Net&#xff0c;Python&#xff0c;Javacript&#xff0c;Golang语言。 MinIO 的主要目标是作为私有云对象存储的标准方案&#xff0c;非常适合于存储大容量非结构化的数据…

基于AT89C51单片机的简易计算机设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87715642?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 本设计是以单片机AT89C51为核心的简易计算器设计&#xff0c;要通过芯片AT89C51实现计算器程序…

Vue核心 计算属性 侦听属性

1.9.计算属性 1.插值语法实现 <!DOCTYPE html> <head><meta charset"UTF-8"><title>姓名案例_插值语法实现</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script…

linux部署jdk\redis\nginx\fastdfs

一、jdk安装及配置修改 1、本地下载jdk包 jdk-8u131-linux-x64.tar.gz&#xff0c;上传到服务器&#xff08;也可通过命令直接下载&#xff09; 2、将压缩包放服务器/usr/local路径下&#xff0c;后解压&#xff1a;tar -zxvf jdk-8u131-linux-x64.tar.gz 如之前已安装&…

OSCP-XPosedAPI(本地文件包含、查看源码、os.system、命令盲注)

目录 扫描 Web API枚举 命令盲注 提权 扫描 发现了两个开放的端口:端口22上的SSH和端口13337上的未知服务。 用netcat手动探测端口13337,但是运行几个常见的TCP/UDP服务初始化命令没有输出。 尝试了一个完整的脚本和版本nmap扫描的开放端口࿰

Vue3:基础入门

Vue3&#xff1a;基础入门 Date: April 10, 2023 Sum: vue简介、vue的基本使用、vue的指令与过滤器、品牌列表案例 目标&#xff1a; 能够知道 vue 的基本使用步骤 掌握插值表达式和 v-bind 指令的用法 能够掌握如何使用 v-on 指令绑定事件 能够使用 v-model 指令实现数据…

Science | 华盛顿大学Baker团队提出AI新范式设计全新蛋白复合物

蛋白质的结构形态和生物学功能是由氨基酸序列决定的。 人工蛋白质设计的目标就是创造可以折叠成特定结构以实现特定功能的新型氨基酸序列。 当然&#xff0c;这并不是一个简单的问题&#xff0c;因为它需要了解蛋白质如何在细胞中折叠&#xff0c;而这一过程在很大程度上仍不为…

【微服务】- 分布式系统的流量防卫兵 - sentinel

Sentinel流量防卫兵 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 一个有梦有戏的人 怒放吧德德 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0…

代码优化- 中间表示上的优化

中间表示上的代码优化依赖于具体所使用的中间表示&#xff1a;控制流图&#xff08;CFG&#xff09;、控制依赖图&#xff08;CDG&#xff09;、静态单赋值形式&#xff08;SSA&#xff09;、后续传递风格&#xff08;CPS&#xff09;等 共同的特点是需要进行程序分析&#xf…

7 ADC(一)

7 ADC ADC简介 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 12位&#xff08;0-2^(12-1)&#xff09;逐次逼近型ADC&#xff0c;1us转换时间…

HTTP连接要考虑超时,重试和并发之原因

一、原因&#xff08;why) 连接超时配置得特别长&#xff0c;比如 60 秒。一般来说&#xff0c;TCP 三次握手建立连接需要的时间非常短&#xff0c;通常在毫秒级最多到秒级&#xff0c;不可能需要十几秒甚至几十秒。如果很久都无法建连&#xff0c;很可能是网络或防火墙配置的…

光纤网卡传输速率和它的应用领域有哪些呢?通常用会到有哪些型号网络变压器呢?

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;常有客户问起光纤网卡该如何选用到合适的产品&#xff0c;选用时要注意到哪些事项&#xff0c;这节将结合配合到的网络变压器和大家一起探讨&#xff0c;希望对大家有些帮助。 1&#xff0e;光纤网卡传输速率与网络…

AlgoC++第三课:C++世界观

目录 C世界观前言1. 程序逻辑2. 内存的逻辑3. 调度的逻辑4. 编译的逻辑5. 作用域的逻辑6. 命名空间的逻辑7. 生命周期的逻辑8. C类的逻辑9. 编译时和运行时的逻辑总结 C世界观 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xff0c;链接。记录下个人学习笔记&#xff0c…

如何查看CPU的L2、L3缓存的容量

可以用CPU-Z&#xff0c;不过需要下载。 可以用命令&#xff1a; wmic cpu get L2CacheSize,L3CacheSize结果&#xff1a;

Golang微服务一把嗦 用户微服务集成主流最新go技术栈

声明&#xff1a;此文章为博主个人学习记录&#xff0c;仅供学习和交流&#xff0c;如有侵权请联系博主。 前言 前段时间&#xff0c;因为本地k8s环境一直出问题&#xff0c;线上云环境也用不起&#xff0c;&#xff08;后面搞定了再慢慢学习&#xff09;所以就暂时搁置了k8s学…

SQL Server基础 第二章 表结构管理

目录 一、数据类型 1&#xff0c;字符类数据类型 2&#xff0c;数值型数据类型 3&#xff0c;日期/时间型数据类型 二、主键&#xff08;Primary key&#xff09; 三、默认值 四、唯一键&#xff08;Unique&#xff09; 五、自增标识 六、约束 七、外键 一、数据类型 …

node+vue+mysql+java健身房网站管理系统

通过大数据管理的方法对健身房管理系统进行了详细的设计说明以及介绍&#xff0c;对健身房管理系统进行了开发和实践。作为一个健身房网站&#xff0c;它为用户提供了一个良好的求知平台。让用户能更好地了解健身带来的好处。前端技术&#xff1a;nodejsvueelementui,视图层其实…