自编码器Auto-Encoders!

一、自编码器Auto-Encoders

1.1、回顾之前的知识

〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!

1.2、无监督学习

〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • 注意:其实无监督并不是没有目标,它也是有目标的,比如看下面的auto-encode,它的目标是什么?它的目标就是它自己,这么一想其实unsupervised learning也是非常有道理的。
  • 比如下面MNIST数据集,输入这样的图片,经过这样一个神经网络NN(encoder),得到一个输出,再经过一个网络(decoder);也可以如下图中的理解。这就是auto-encoder,特别简单。
  • 可视化可以参考这个网站,比较直观的感受784-3(784维降低到3维):降维度可视化网站链接

〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!

〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!

1.3、Auto-Encoders中loss function如何设计

  • 介绍如下、
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
1.3.1、PCA和Auto-encoder对比
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • 效果对比:
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • 再看一个可视化的效果
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!

二、Auto-Encoders的变种

2.1、变种1:原图像中引入噪声

  • 下面讲解一下auto-encoder的变种吧!首先比较简答的是:容易想到如果只是在像素级别里重建,这样没有发现一些更深层次的东西,那你很有可能只是记住一些特征,比如这个数字,你可能直接把这个像素给记住了;那么为了防止记住怎么办?我们给原图像加一些噪声
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!

2.2、变种2:借助Drop out

  • Drop out是Hintton大神发明的,Drop out也是现在一种比较常用的技术,但是他并没有发表在paper上面,据说是Hitton在给他的学生上课的时候随口提出来的小trick(技巧),帮助你提升神经网络性能的技巧。
  • 看下图:首先在Training的时候回有目的的,让这部分的连接断开,具体的操作我们手动的让这部分的权值暂时设置为0,就是相当于暂时断掉了。这样可以理解为:给你的信息有限,这样就迫使你的系统更加的robust,你就不会依赖于所有的神经元,而是部分的神经元。然后你再Test的时候:就会让你的这个任务变得更加的简单了,所有的Drop out设置都恢复了。
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!

2.3、变种3:Adversarial Auto-Encoders

  • 这个是比较有名的,这个跟后面要介绍的GAN非常相关了,这个直接把GAN中的技术应用到这里Auto-Encoders了,
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • 但是实际上最原始的auto-encoders大家发现;比如你从【-1, 1】变换h分布的时候,重建出来的图片它可能是一样的,就是没有呈现出这种分布过来,这样的话就比价烦人了,那么怎么解决这个问题呢?Adversarial Auto-Encoders是怎样解决这个问题的呢?如下图添加了一个Discriminator,还没有讲到GAN,现在可以理解为一个识别器(鉴别器)
  • 我们假设一个分布,高斯分布,均值为0,方差为1,我们希望你属于一个这样的分布,如果你没有输入这个分布,我们鉴别你,我们把真实的z和希望得到的z’都送给这个网络做鉴别这个差距,如果差距大,就是不属于预设的这个分布,我们输出一个fake,我们这个分布属于预设的分布,就是属于这个高斯分布,我们输出这个1。通过这样的话就能迫使就能是我们中间得到的这个hidden vector除了能完成重建工作之外,还能符合我们想要的分布,这样就很好解决上一张图片中所说的不平衡的问题(分布不均匀,乱七八糟)。
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • 由这个Adversarial Auto-Encoders引出这节课的重点所在。
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • sample()是不可微的,不能进行反向传播,
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • 之前介绍了Adversarial Auto-Encoders,我们现在从神经网络的角度理解一下。
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!

2.4、对比Auto-Encoder和Adversarial Auto-Encoder的区别

  • VAE重建的效果好一些。
〖 tensorflow2.0笔记17〗:自编码器Auto-Encoders!
  • VAE除了重建的效果比AE好一些,更重要的是作为一个stochasticstochastic模型,它学习的是q(h)q(h),通过从q(h)q(h)samplesample出不同的hh,这样就可以重建或者说用来做生成的模型,如果h是二维的[h0,h1][h0, h1]h0h_{0}属于h0N(μ0,σ02)h_{0} \sim N\left(\mu_{0}, \sigma_{0}^{2}\right)的分布, h1h_{1}属于h1N(μ0,σ12)h_{1} \sim N\left(\mu_{0}, \sigma_{1}^{2}\right)的分布,知道了这2个分布,我们就改变 μ0,σ0,μ1,σ1\mu_{0},\sigma_{0}, \mu_{1},\sigma_{1},我们再samplesample一下,samplesample出来新的hh, hh再送入后面的decoderdecoder,就能得到 x\overline{x},通过多个samplesample之后得到不同的hh,也可以得到不同的x\overline{x},这样的话就可以实现生成。
  • 看下图横坐标h0h_{0}改变,纵坐标h1h_{1}改变,改变以后相当于上面说的分布改变了,那么sample生成的图片就有随机性在里面。

相关文章:

  • 2021-08-12
  • 2022-03-08
  • 2021-04-07
  • 2021-05-10
  • 2021-12-29
  • 2021-10-07
  • 2021-04-24
  • 2021-08-26
猜你喜欢
  • 2021-12-21
  • 2021-05-25
  • 2021-08-06
  • 2021-08-31
  • 2021-07-18
  • 2022-12-23
  • 2021-05-14
相关资源
相似解决方案