文章主要内容参考李宏毅老师的机器学习课程:https://www.bilibili.com/video/BV1Wv411h7kN?p=70

Auto Encoder: 是什么?有什么用?

Auto Encoder 的思路特别简单,就是把高维信息编码为低维信息(encoder的工作),然后再尝试解码回原来的高维信息(decoder的工作),还要尽可能保证能恢复出原来的样子。其中,中间的低维信息被叫做 code, representation, bottleneck, Embedding等等,这里提一嘴,后面就会理解为什么这么叫。

你可能会问,为什么要这样做?有什么用?

首先他是一个无监督的机器学习方法,也就是说,不用人工标注数据集,有训练数据直接扔给模型,模型只管encode到低维信息,decode到高维信息就好了。

理想状态下,AE能将训练数据分布的冗余信息储存在模型的参数里,降维几乎是一定会损失信息的,但是encoder部分和decoder相互配合,能够将损失的部分配合补齐,与原来尽可能一致。

最近想到一个很理想的,最适合AE的例子,例子中可能会有纰漏,尽可能理解思想:

假设我们的输入的维度每个维度表示一个汉字,我的训练数据集都是7个字的文本,我们的中间表示 Embedding 是 2个字两维的文本。某一个理想情况下,输入都是类似“张三今天去学校”,“李四今天去学校”,“王五今天去学校”这样的,某某两个字名字加上“今天去学校”,那么模型就可以学到说,数据的分布中,后面的内容是固定的,encoder在降维的时候可以直接抛去后面的几个字,只保留关键的姓名作为Embedding传给Decoder,然后decoder也心领神会,直接在Embedding后面再补上额外的信息,又把低维信息变成高维了。

补一句,什么是低维信息,什么是高维信息?在实现或者模型里,其实本质就是向量维度,打个比方 [1,2,3,4] 就是四维向量,就比[1,2] 二维向量维度高。通常来说我们默认高维向量中存储更多的信息,直接把[1,2,3,4]转成[1,2]就丢失了信息。但是如果机器能学到看到[1,2]就恢复成[1,2,3,4],那就没有问题,但是如果训练数据集里有 [1,2,3,4] [1,2,4,3] ,那模型该怎么做呢?所以实际情况还是很复杂的,我们希望我们的(神经网络)能够配合学习出相应的规则。

那么从前面我举出的不那么合适的例子,引申到实际情况,就可能是一个64*64*3(高和宽都是64像素的RGB彩色图片)=12288维度的向量作为输入,进入Encoder的神经网络,一顿操作之后变成了1024维的Embedding向量,很明显维度降低,可能损失大量的信息,然后Decoder要尝试把Embedding再回复成原来的彩图,当然难度很大,所以 AE 就可以学习出一些较为精炼的语义信息,比如训练图片都是狗狗,我可以用一个维度表示狗狗的毛色,一个维度表示狗狗占画面的大小比例,一个维度表示品种等等,就可以用较少维度的信息,恢复出原图。当然哈,实际的Embedding几乎不太可能会有我描述的这么有语义的情况,如果有可能搞这部分的人该乐开花了,当然我也是初学,可能有相关的文章大佬评论区推荐哈。

本来想写短文的……一下子又臭又长……

OK,赶紧进入正题,AE有什么用?很明显,如果我把中间的 Embedding 拿出来,那某种意义讲,如果我带着 Decoder 模型,我就有了一个原来数据的压缩,比如原来10000维的数据我压缩到了1000维,如果数据类型一致,那不就是直接10%压缩率起飞?其次,我随便生成一个随机向量,把它当成Embedding送给Decoder,会不会生成一些类似训练集的数据?如果我给AE喂的都是世界名画,随便扔一个Embedding进去我是不是就名画收藏+1?当然实际可能会有各种各样的问题hhh,这就是生成。最后,很明显,就像我举的例子,AE只能对它的训练数据集内的数据进行编码解码,如果我找一个训练集外的数据,AE可能会恢复成四不像,所以我找一个数据送进AE,看和原来像不像,如果像那这个数据大概率比较符合训练集的分布,如果和原来大相径庭,那么很明显这是一个离群数据,所以我们可以拿来做异常检测。

DAE:Denoising AutoEncoder

Vincent P, Larochelle H, Bengio Y, et al. Extracting and composing robust features with denoising autoencoders[C]//Proceedings of the 25th international conference on Machine learning. 2008: 1096-1103.  谷歌学术引用:6429

DAE是一个常见的变体,原来我们要还原的是原来的图片,现在我们给训练数据加一个噪声(其实就可以是符合一些分布的随机数),然后还要让decoder还原出没加噪声的图片。所以相当于让 DAE 还要额外学会去噪。

PS:李宏毅老师在这里直接一波联系到BERT,Masking 其实也是某种角度的加噪声。

VAE:Variational AutoEncoder

参考资料:

论文:Kingma D P, Welling M. Auto-encoding variational bayes[J]. arXiv preprint arXiv:1312.6114, 2013.  谷歌学术引用:18901

https://arxiv.org/abs/1312.6114https://arxiv.org/abs/1312.6114

PyTorch-VAE/vanilla_vae.py at master · AntixK/PyTorch-VAE · GitHub Vanilla VAE 实现

GitHub - AntixK/PyTorch-VAE: A Collection of Variational Autoencoders (VAE) in PyTorch.  VAE 及各种变体的 Pytorch 实现集合

https://medium.com/dataseries/variational-autoencoder-with-pytorch-2d359cbf027b Eugenia Anello 的 VAE 教程博客

怨不得上网搜了好多 VAE 的介绍都不是我想要的……这原文就很硬啊,Variational 指的是 variational Bayesian (VB)。数学弱鸡低头。

看了一圈,大致懂意思了,升级 AE 到 VAE 的原因是,普通 AE 在训练后,中间的 Embedding 很有可能是不平滑的,大致意思就是说, Embedding简单的改变,可能会让 Decode 出来的东西差的很多,而我们可能会希望 Embedding 空间中两个距离相近的 Embedding,Decode 出来的东西也应该比较接近,这样的模型也往往更鲁棒,不会Decode出奇奇怪怪的东西。

那怎么办?

VAE 的解决思路是,原来 Encoder 输出的是一个 Embedding 低维度向量,现在我们让他不是输出某一个特定的 Embedding,而是输出一个 Embedding 的 (正态)分布 Distribution。具体来说,如果 Embedding 的维度是D, Encoder 会输出两个 D 维向量,分别表示每个维度的期望和标准差。有期望和标准差,我们就确定了一个正态分布(对于 Embedding 的每个维度),所以我们就可以把 Embedding 中的每个维度进行采样,来得到一个 Embedding,这个 Embedding 才是之后送给 Decoder 的输入。值得一提的是,Encoder输出的是分布,而送入Decoder的是特定的采样,这一步是离散的,无法微分,所以无法梯度下降优化,所以在实际写代码的时候会有 trick,这里建议想要深挖的同学在搜索一下,相对比较复杂,超过了这篇文章的深度(其实是我没看太深)

然后是定义损失函数,与 AE 相同,VAE 也要尽可能让 Decode 出来的结果尽可能与输入相似,除此之外通常还会有一个 KL 散度的正则化项,关于 KL散度也是机器学习的数学基础,抽象来讲可以评估两个分布的接近程度,这里损失函数还包括一个评估 Encoder 输出的分布与标准正态分布(均值为0,方差为1)的区别,作用就是传统正则化的作用。

那么点题一下,VAE 和 AE 有什么区别呢?

首先,Encoder 部分存在不同,Encoder 输出的是一个概率分布,通过采样得到的Embedding才会送给Decoder。

其次,损失函数加入了 Encoder 的正则化项,让 Encoder 输出的分布尽可能接近标准正态分布。

最后,VAE 还有很多变体,这里也不展开介绍分析。

最最后,建议结合代码,打开 Colab 跑一下,应该会获益匪浅。

PS:感觉自己平时CSDN用的多还是快速的查找一些问题,之后也会写一些简单的短文。

PPS:文中出现的信息和维度等概念,还是尽可能参见正式定义,文中为了便于阐述,可能出现了很多名词的不恰当使用。

Auto Encoder(AE),Denoising Auto Encoder(DAE), Variational Auto Encoder(VAE) 区别相关推荐

  1. 【人工智能概论】 变分自编码器(Variational Auto Encoder , VAE)

    [人工智能概论] 变分自编码器(Variational Auto Encoder , VAE) 文章目录 [人工智能概论] 变分自编码器(Variational Auto Encoder , VAE) ...

  2. Variational AutoEncoder(VAE)变分自编码器

    [本文转载自博客]:解析Variational AutoEncoder(VAE): https://www.jianshu.com/p/ffd493e10751 文章目录 1. 模型总览 1.1 Au ...

  3. 【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

    完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 ...

  4. AE CC 2015版本无法连接Media Encoder解救方法

    from 关于AEcc2015 无法连接Adobe Media Encoder 2015外链输出错误的问题,原因是AE在链接ME的时候默认搜索位置是C盘的,如果你的ME和AE都没有安装在C盘,那么AE ...

  5. 悦联 android auto,马自达6兼容Apple CarPlay和Android Auto系统 三款车载屏幕吸睛

    盖世汽车讯 据外媒报道,马自达人机接口(Human Machine Interface,HMI)工程师Matthew Valbuena谈及了2018款马自达6的最新车载技术. 当进入车辆后,许多驾驶员 ...

  6. 奥迪a3android auto错误,抢先体验: 奥迪A3的Android Auto车载系统

    谷歌现在的野心是无处不在.谷歌产品在你电脑上,在你的手机里,在你的手腕上,现在也要出现在你的车上了.好吧,可能暂时还不能出现在你现在的车上.但是,你的下一部车很可能就将嵌入谷歌的产品. 在今天的谷歌I ...

  7. android auto 能微信_OPPO手环用上Android Auto,可回复微信消息

    现在的绝大部分智能手环产品,都是支持显示手机上的通知功能的,比如说手机上来微信消息了,手环是能够同步进行提醒的,只要你安装了相应的App并且给了它读取通知的权限.但是,就目前的产品来说,基本都是不支持 ...

  8. An adaptive seismic signal denoising method based on variational mode decomposition 阅读笔记

    一种基于变分模态分解的自适应地政信号去噪方法 文献地址:https://www.sciencedirect.com/science/article/abs/pii/S0263224121002815? ...

  9. 福特锐界android auto,福特锐界sync3系统各版本都有什么区别?

    自从福特锐界sync3系统发布后,比较智能的体验收到了很多车主的喜欢,之前讲过sync2系统和sync3系统的区别.给大家回忆一下: sync2和sync3的区别 苹果carplay 百度carlif ...

最新文章

  1. RSA加解密算法的Java实现
  2. PHP的函数file_get_contents() 把整个文件读入一个字符串中
  3. PXE自动安装FreeBSD
  4. 华为摄像机搜索软件_别人的终点华为的起点!用普惠AI守护城市安全
  5. 中关村windows11 32位专业版镜像v2021.07
  6. 「SCOI2014」方伯伯的 OJ 解题报告
  7. 【java】ssh the connection is not authenticated
  8. iOS蓝牙4.0基础开发
  9. laravel ajax分页实例,Laravel 的分页功能 - Laravel 5.6 中文文档
  10. 数据校验简介与C/C++代码实现
  11. 各种文件类型对应 contentType
  12. ALSA声卡驱动二之声卡的创建
  13. 定制WES7紧急修复U盘
  14. 惠普电脑调节电脑亮度
  15. “System.ComponentModel.Win32Exception配额不足,无法处理此命令。”问题
  16. PHP Failed opening required
  17. 速卖通如何避免差评?
  18. 数据挖掘和大数据分析
  19. 音箱选购必备20秘诀
  20. 性能测试怎么监控服务器,性能测试篇 :Jmeter监控服务器性能

热门文章

  1. CDH集成了Kerberos后写入数据到HBase遇到的几个问题
  2. javase能做什么项目
  3. JAVA——勾股定理
  4. 数字图像处理100问—40 JPEG 压缩——第四步:YCbCr+离散余弦变换+量化
  5. 秦九邵算法,牛顿迭代算法,盛金公式
  6. 【来日复制粘贴】状态栏随机显示
  7. 原理竟然是这!kafka和zookeeper超时参数
  8. 如何在评估机器学习模型时防止数据泄漏
  9. 知乎高赞回答:为什么高级程序员不必担心自己的技术过时?
  10. Whale帷幄 - 数字化解决方案供应商公司 数字化转型解决方案服务商