Auto-Encoder 相比较于其他的有监督学习不同,本质上AE是一个无监督学习的过程。那么首先回顾和区分一下有监督学习和无监督学习的不同

这里将有监督学习大致可以分为回归和分类两个大类,虽然回归和分类两者不同,但是他们共同的一点就是数据集都是有类别和有具体的一个数值作为其真实值的,也就是标签。但是我们现实中遇到的问题会有很多未标记数据,那么这些为标记的数据如何来做有监督学习呢?

不得不说其实要么我们得花高昂的成本去对数据进行标记,要么我们就需要另寻他法了。话不多说其实最常见的方法了是采用unsupervised learning,也就是predictive learning无监督学习,这个理念我记得在上个世纪90年代就有提出。这里通过一个樱桃水果蛋糕来解释其各自的情况,樱桃那一小部分可以说就是我们纯粹的强化学习,虽然没有接触这里仅作了解;蛋糕外面裹得那一层巧克力味的脆皮就是我们的有监督学习啦,可以说还是相当大的一部分,但是相比起无监督学习(占据除了外壳外的所有内部蛋糕)也只是冰山一角了。那么问题来了既然无监督学习占据主导地位我们该如何去理解他呢,不得不提得的就是目前可能用的比较少但是作为曾经很辉煌的AutoEncoder来进行了解了。


首先了解一下他的实用意义,无监督学习解决的当时因为算力有限出现的维数爆炸的问题,那个时候针对224*224的图像数据进行训练,维度过高训练起来十分困难,急需降维技术实现问题在低维上的映射。在大量无监督数据集上我们需要对这些高维数据进行降维从而提取出一些我们想要的信息,类似于数据的分布这些我们需要的内容来帮助我们进一步的实现一些操作,诸如压缩、去噪声和超分辨率等等。

好的我们简单了解了AE的使用意义。那么AE构建的是一个什么样的网络了,他又是如何训练的呢?首先看下其网络流程,我们输入的是一张图片,那么同我们一个encoder将原本28*28的图像数据升维成1000然后在传递给一个latent code 俗称为颈层。在经过解码decoder升维成1000维,最后降维成原始的维度28*28,又回到图像数据的模样。这里可以使用降维,但是常用的一般是升维。这样可以看到其中关键的就是我们颈层,这里示例中是维度为2,我们将784的一个数据居然可以用2维就能表达,而且重构之后能与其输入相差无几。这就是我们模型训练优化的目标,使得输入与输出的误差,可以理解为矩阵化中每个像素块进行RMSE操作最后求均方根误差。使其最小从而输入与输出尽可能一致就是无监督的训练部目标,其逼近的label就是他自己本身。

问题来了怎么定义损失函数咧,这里针对二分类问题(分类问题也属于此)和回归问题给出了两个损失函数分辨是Cross-Entropy和误差平方和。

解决了两个大问题,那么我们比较下PCA和AE的区别。PCA是一种线性的降维方法注定有很多非线性问题他适应不了,而AE恰恰解决了他的短板,利用非线性映射的激活函数解决了这一困难。

PCA识别数值和AE数字识别我们可以看到,PCA勉强能看清,但是相当的模糊,其线性降维可以说丢失了很多特征,但是AE明显清晰度分辨率高很多。在比较下人脸,第二行是AE还可以勉强看到鼻子,眼睛这一些五官特征。但是PCA已经糊成一团根本难以分辨了,甚至透露出一丝丝恐怖气息,可以说在图像问题上PCA完败于AE。

现在为了验证这个降维的效果,我们常常会在2维或者三维上去看特征的分布以校验其降维对特征提取的效果,左边是PCA右边是AE很显然AE能够很好地区分这几类类别的特征,而PCA则很逊色。所以暂时的结论是我们要坚定地使用AE。

既然选择了AE那么我们就AE的变种进行阐述,首先Denosing Auto-Encoder,通过对原始输入图像的数据加入噪声,也就是一些杂乱无章的数字加到这个28*28的矩阵里面,可以看到因为有些不相关的数据输入第二层变得有些模糊不清楚了,但是输出的图像还是基本保留了原始输入4的一个特征,能够隐约看出来,效果有所衰减但是仍然具有辨识度,说明通过Encoder和Decoder我们的网络中低维颈层已经学习到了高维特征中的一些关键信息,从而最后通过decoder也能很好地反应原始信息。

第二个边总就是Dropout了,为啥引入他,我们可以看到Dropout的参数从0-1,从完全保留到全部去掉,loss其实一直在上升,但是准确率并不是与LOSS呈线性相关,可以看到0.5左右准确率相对较高,loss也上升的不多,网络参数也大幅度减少了,训练难度很好地降低了。所以一般会加一个Dropout层并设置参数值为0.5.

第三个变种Adversarial AutoEncoders这个结合GAN的AE,Gan我们会在后面一个章节回顾,这里暂且不表。其核心思想见下图:

我们AE的流程可以大致描述为输入X=> h =>X(hat)不会打符号见谅,那么这个中间层h的分布往往就是和第一张图差不多,很难实现属于均值为0标准差为σ2的标准正态分布。那么如何将这个分布变化成我们想要的分布咧,那就需要用到GAN。

既然暂且不表,那么我们讲讲另一个解决方案VAE,使得我们的q(z)分布能够逼近我们理想的分布p(z),那就是要回顾的KL散度,也就是kl divergence。其公式如上图,是一个对概率比值求对数然后积分的函数,放在损失函数里面与CrossEntropy交叉熵放在一起取最小值。那么具体的这个KL散度怎么计算呢我们看下图:

KL散度如上图所示可以说是红色和蓝色两台曲线所代表的分布相交的面积。具体计算公司如下图:


KL散度反映的是P(Z)和Q(Z)两个概率分布的不同程度,当KL散度为0时表明两个分布完全相同。所以 通过公式也可以理解为,q(x)能在多大成都山表达p(x)所包含的信息。KL越大那么表达的效果越差。通过不去上就得公式推导的我们可以看到KL散度得化简形式如下:

但是我们这样去定义KL散度得话就会有一个问题,因为众所周知,我们网络训练的过程是反向对损失函数对参数求导,计算梯度进行迭代,但是我们知道由q(z)到z再到p(z)这样一个过程,而z到p(z)其实是一个sample采样的过程,这个随机采样的过程明显是不可导的那如何解决呢,参考下图。

这里我们看到z分布如果我们表达成第三块的形式加入一个ε属于(0,1)之间的一个随机数,这样构建z的一个关于均值和标准差的函数,就可以对其进行求到了,虽然ε依然没办法求导,但是我们需要用的均值和标准差这两个需要优化从而逼近q分布的参数可以进行求导梯度下降也就可行那就OK

最后我们将思路整理一下,我们之前回顾的VAE其实也是一个神经网络,怎么去理解呢,中间的均值方差还有Z如果我们看做一个颈层那么和AE也就是一样的架构了,其也满足神经网络反向求导梯度下降的形式。后面是关于VAE与AE的性能比较的,可以毫无例外的发现,VAE是比AE要优秀的

不论是在fashion mnist上面还是手写数字和情感识别:

但是人外有人山外有山,为了引出下一章,比较下GAN和VAE

显然上图中GAN的能力要比VAE强太多了。

Tensorflow 2 Auto-Encoder相关推荐

  1. 自编码器(Auto Encoder)原理及其python实现

    目录 一.原理 二.为什么要使用自编码器 三.代码实现 1.原始自编码器 2.多层(堆叠)自编码器 3.卷积自编码器 4.正则自编码器 4.1稀疏自编码器 四.降噪自编码器 五. 逐层贪婪训练堆叠自编 ...

  2. Auto Encoder用于异常检测

    对基于深度神经网络的Auto Encoder用于异常检测的一些思考 from:https://my.oschina.net/u/1778239/blog/1861724 一.前言 现实中,大部分数据都 ...

  3. 2021李宏毅机器学习课程笔记——Auto Encoder

    注:这个是笔者用于期末复习的一个简单笔记,因此难以做到全面详细,有疑问欢迎大家在评论区讨论 https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-d ...

  4. 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

    原文链接 自动编码器(Auto-Encoder,AE) 自动编码器(Auto-Encoder,AE)自编码器(autoencoder)是神经网络的一种,经过训练后能尝试将输入复制到输出.自编码器内部有 ...

  5. Auto Encoder(AE),Denoising Auto Encoder(DAE), Variational Auto Encoder(VAE) 区别

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

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

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

  7. Masked Auto Encoder总结

    Masked Auto Encoder总结 文章目录 Masked Auto Encoder总结 MAE简介 Random Mask random mask 逻辑 random mask 实现 Enc ...

  8. 【深度学习】李宏毅2021/2022春深度学习课程笔记 - Auto Encoder 自编码器 + PyTorch实战

    文章目录 一.Basic Idea of Auto Encoder 1.1 Auto Encoder 结构 1.2 Auto Encoder 降维 1.3 Why Auto Encoder 1.4 D ...

  9. 机器学习笔记:auto encoder

    1 autoencoder 介绍 这是一个无监督学习问题,旨在从原始数据x中学习一个低维的特征向量(没有任何标签) encoder 最早是用线性函数+非线性单元构成(比如Linear+nonlinea ...

  10. Auto Encoder再学习

    一:AutoEncoder基本概念 将输入的比较高维度信息,不管是语音,文字,图像经过encoder转成一个中间状态的向量(也叫做latent code),这是一个低维度的数据,再通过decoder ...

最新文章

  1. dask想说爱你不容易
  2. 跨域解决方案(史上最易懂)
  3. POJ_2001_Shortest Prefixes
  4. mysql数据库映射到内存_基于共享内存的数据库映射
  5. 一天一个设计模式(一) - 总体概述
  6. Android中的Service组件详解
  7. python字符串与列表的相互转换
  8. matplotlib可视化必知必会富文本绘制方法
  9. 数据结构——快速排序(使用Java)
  10. WP8.1开发中关于如何显示.gif格式动态格式图片方法
  11. 人类视觉系统_对人类视觉系统的对抗攻击
  12. java isequal_Java LocalDate isEqual()用法及代码示例
  13. python添加包路径_python包/模块路径
  14. oracle 查询判断语句
  15. 安卓图片自适应的解决办法
  16. 轨迹规划-二次规划QP
  17. php stripslashes和addslashes的区别
  18. 史上最全的信息收集总结!!!
  19. 腾讯会议发布录屏工具“会记”,让云端视频协作随用随录、随享随看
  20. 计算机搜索栏打字不显示,win10搜索栏无法输入文字怎么办_win10电脑搜索栏无法输入的解决方法...

热门文章

  1. Java SE 6之GUI:让界面更加绚丽(下)
  2. windows下手动安装pyinstaller(python2.7)
  3. bzoj千题计划240:bzoj3900: 交换茸角
  4. linux 软件安装方式
  5. CentOS 6.0 xdmcp 配置
  6. oracle 触发器写法|oracle trigger 语法
  7. mysql显示表已存在_「Docker系列」 如何在Docker中部署MySQL数据库?
  8. 设置oracle每行显示字符个数,Oracle一列的多行数据拼成一行显示字符-Oracle
  9. php微信jsapi支付小结,ThinkPHP接入微信支付 - JSAPI支付
  10. 程序员抱怨:父母没文化没见识,当初努力学习远离看来是正确的