未标注的数据如何处理?一文读懂变分自编码器VAE
yuyutoo 2024-12-15 17:42 3 浏览 0 评论
原文来源:medium
作者:Vivek Vyas
「机器人圈」编译:嗯~阿童木呀、多啦A亮
众所周知,在实验中我们会遇到各种各样的数据,那么想象一下,如果我们遇到没有标签的数据会发生什么呢?大多数深度学习技术需要干净的标注数据,但这一点现实吗?从技术本质上说,如果你有一组输入及其各自的目标标签,你可以试着去了解特定目标的特定标签概率。当然,现实中图像映射真的会如此美好吗?在这篇文章中,我将探索变分自编码器(VAE),以更深入了解未标记数据的世界。该模型在对没有标签的图像集合进行训练后将产生独特的图像。
自动编码器将输入数据顺序地解构为隐藏表示,并使用这些表示来顺序地重构与它们的原始内容相似的输出。它本质上是数据特定的数据压缩,而这意味着它只能对类似于已经它训练的数据进行压缩。当然,自动编码器也被公认为是有损耗的,因此相较于原始输入,解压缩输出结果会稍微降低一些。那么大家可能会有所疑问,如果它们会造成质量损失,为什么还那么实用呢?这是一个很好的问题,事实证明,它们对于数据去噪是非常有用的,即我们在这里训练一个自动编码器,从自身损坏版本中重构输入,这样它就可以消除类似的损坏数据。
首先,我们来谈谈贝叶斯推理(Bayesian inference)。所有阅读这篇文章的人可能都知道深度学习,以及谈到近似复杂函数时它的有效性,然而贝叶斯推理提供了一个独特的框架来解释不确定性,所有的不确定性都是用概率表示的。这是有道理的,如果你仔细想想,在任何给定的时间,都有证据支持或反对我们已知的事物,这些证据可以被用来创造一个新的概率。再进一步,当我们学习新的东西时,我们必须考虑我们已经知道的,并将新的证据加入到考虑范围内,创造一个新的概率。贝叶斯理论基本上是用数学方法描述这个概念的。
VAE就是这些想法的产物。从贝叶斯的角度来看,我们可以将VAE的输入、隐藏表示和重构输出视为有向图形模型中的概率随机变量。假设它包含一些数据的特定概率模型,x和潜在/隐藏变量z,我们便可以写出模型的联合概率,如下所示:
模型的联合概率
给定模型生成的一个字符,我们不知道隐形变量的设置是如何生成这个字符的,我们的模型本质上就是随机的!
VAE由3个主要部分组成:
?编码器
?解码器
?损失函数
给定输入x,假设我们有一个28×28的手写数字图像,它可以达到784维度,其中每个像素都是一维的。现在,这将会编码到一个潜在/隐藏的表示空间,而这将要比784少很多。我们现在可以采样高斯概率密度来获得表示的噪声值。
是不是很酷?下面我们就用代码来将这个表示出来吧。(文章结尾将给出完整代码资源链接)
首先,我们导入库并找到我们的超参数。
接下来,初始化编码器网络。该网络的工作是将输入映射到隐藏的分布参数中。我们接受输入,并通过ReLU(压缩维度的经典非线性激活函数)的密集完全连接层发送它。下一步,我们将输入数据转换为隐藏空间中的两个参数。我们使用密集,完全连接层 - z mean和z log sigma来预定义大小。
解码器将“z”作为其输入,并将参数输出到数据的概率分布中。我们假设每个像素是1或0(黑色或白色),现在我们可以使用伯努利分布,因为它会将“成功”定义为二进制值来表示单个像素。因此,解码器将获得一个数字的潜在/隐藏表示以作为其输入,并且它会输出784个伯努利参数,每个像素一个,所以在0和1之间有784个值。
我们将使用z_mean和z_log_var,通过定义采样函数,从隐藏/潜在正态分布中随机抽取新的类似点。以下代码块中的epsilon是一个随机正态张量。
一旦我们得到z,我们可以将其提供给我们的解码器,解码器会将这些潜在空间点映射回原始输入数据。因此,为了构建一个解码器,我们首先用两个完全连接层及其它们各自的激活函数对其进行初始化。因为数据是从一个小的维度提取到一个较大维数,所以其中一些会在重构过程中丢失。
确实很酷?但是这个“一些”到底是多少呢?为了获取准确值,我们将建立损失函数对其进行精确测量。下面的第一项是测量重构损失。如果解码器 输出在重建数据方面很糟糕,那么损失方面的成本就会相当大。下一个项是正则化项,意味着它可以保持每个数字的表示尽可能多样化。所以举个例子来说就是,如果两个不同的人同时写出数字3,那么这些表示结果可能会看起来很不一样,因为不同的人写的结果当然会不一样。这可能是一个不尽如人意的结果,而正则化项的任务就是拯救“不如意”!我们对不良行为进行惩罚(如这里的例子),并确保类似的表示是紧密相连的。我们可以将总损失函数定义为重构项和KL的散度正则化项的总和。
现在来到训练部分,我们通常会使用梯度下降来训练这个模型,以优化我们对编码器和解码器参数的损失。但是我们如何对随机确定的变量的参数进行衍生?
原来,我们已经将随机性建立在我们的模型本身上了。现在,梯度下降通常期望一个给定的输入总是返回一个固定参数组的相同输出。在我们这种情况下唯一的随机来源将是输入。那么我们如何解决这个问题呢?我们重新确定参数!我们将对样本进行重新确定参数,使得随机性可以独立于参数。
我们将定义一个取决于参数确定性的函数,因此我们可以通过引入随机变量将随机性注入到模型中。编码器将生成平均值向量和标准偏差向量,而不是生成实数值的向量。我们采用涉及z的函数关于其分布参数的导数。我们将模型的优化器定义为rmsprop,并将损失函数定义为vae_loss。
我们通过导入MNIST数据集并将它们馈送到我们的模型中,为给定数量的训练次数和批量大小开始下面的训练。
下面我们画出二维平面上的邻域。每个颜色聚类用一个数字表示,而闭合聚类本质上是与结构相似的数字。
数字表示法
另一种表示方法是通过扫描潜在计划(latent plan)生成数字,定期采样潜点,并为这些点生成相应的数字,如下所示:
生成的数字
这在某些程度上让你感到震撼!
所以这个练习在本质上有三个关键的要点:
?变分编码器允许我们通过执行无监督学习以生成数据。
?VAE =贝叶斯推理+深度学习。
?重参数化使我们能够通过网络进行反向传播,随机独立的参数使我们能够得出梯度。
机器学习是一个非常迷人的东西,希望能通过这篇文章为你带来一些价值! 查看github上的代码,可获得完整代码资源:https://github.com/vvkv/Variational-Auto-Encoders/blob/master/Variational%2BAuto%2BEncoders.ipynb。
相关推荐
- YAML配置文件简介及使用(yaml 配置)
-
简介YAML是"YAMLAin'taMarkupLanguage"(YAML不是一种标记语言)的缩写。相比JSON格式的方便。...
- 教你如何解决最常见的58种网络故障排除方法
-
1.故障现象:网络适配器(网卡)设置与计算机资源有冲突。分析、排除:通过调整网卡资源中的IRQ和I/O值来避开与计算机其它资源的冲突。有些情况还需要通过设置主板的跳线来调整与其它资源的冲突。2.故障现...
- 一分钟带你了解服务器网卡(服务器网卡怎么用)
-
今天小编和大家聊一下服务器的网卡。什么是网卡?简单说网卡就是计算机与局域网互连的设备。计算机主要通过网卡接入网络。网卡又称为网络适配器或网络接口卡NIC(NetworkinterfaceCard)...
- linux文件之ssh配置文件的含义与作用
-
ssh远程登录命令是操作系统(包括linux和window系统)下常用的操作命令,可以帮助用户,远程登录服务器系统,查看,操作系统相关信息。linux系统对于ssh命令有专门保存其相关配置的目录和文件...
- Cilium 官方文档翻译 - IPAM(二)Kubernetes Host模式
-
KubernetesHostScopeciliumIPAM的kuberneteshost-scope模式通过选项ipam:kubernetes开启,将集群IP地址分配委托给每个独立的节点,并...
- 域名劫持跳转,域名劫持跳转的解决办法只需5步
-
简单来说,域名劫持就是把原本准备访问某网站的用户,在不知不觉中,劫持到仿冒的网站上,例如用户准备访问某家知名品牌的网上商店,黑客就可以通过域名劫持的手段,把其带到假的网上商店,同时收集用户的ID信息和...
- Linux 磁盘和文件系统管理(linux磁盘管理fdisk)
-
1检测并确认新硬盘...
- windows host文件怎么恢复?局域网访问全靠这些!
-
windowshost文件怎么恢复?windowshost文件是常用网址域名及其相应IP地址建立一个关联文件,通过这个host文件配置域名和IP的映射关系,以提高域名解析的速度,方便局域网用户使用...
- Nginx配置文件详解与优化建议(nginx 配置详解)
-
1、概述今天来详解一下Nginx的配置文件,以及给出一些配置建议,希望能对大家有所帮助。...
- Mac电脑hosts文件锁定,如何修改hosts文件权限
-
有时候我们需要修改hosts文件,但是网上很多教程都行不通,使用sudo命令也不行。其实有一个很简单的方法。打开终端命令行,使用如下命令即可:sudochflags-hvnoschg/etc/...
- windows电脑如何修改hosts文件?(windows 修改hosts文件)
-
先来简单说下电脑host的作用hosts文件的作用:hosts文件是一个用于储存计算机网络中各节点信息的计算机文件;作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中...
- Vigilante恶意软件行为怪异:修改Hosts文件以阻止受害者访问盗版网站
-
Sophos刚刚报道了一款名叫Vigilante的恶意软件,但其行为却让许多受害者感到不解。与其它专注于偷密码、搞破坏、或勒索赎金的恶意软件不同,Vigilante会通过修改Hosts文件...
- hosts文件无法修改几种现象和解决方法
-
第一种、hosts文件修改完不是直接保存而是弹出另存为窗口解决:1、右击hosts文件——属性——把“只读”前面勾去掉。第二种、打开hosts文件时提示“你没有权限打开该文件,请向文件的所有者或管理员...
- hosts文件位置在哪里,教你hosts文件位置在哪里
-
Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的I...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
【开源分享】2024在线客服系统PHP源码(安装教程+全新UI)
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)